《实验五——Linux操作系统是如何工作的?破解操作系统的奥秘》

姓名:方超

学号:SA12**6201

Linux操作系统工作的基础

  存储程序计算机、堆栈(函数调用堆栈)机制和中断机制是Linux操作系统工作的三大基础。

  存储程序计算机是目前通用计算机的工作模型,程序指令保存在存储器中,处理器与存储器通过总线相连,处理器从存储器中获取指令和数据并执行,执行方向是逐条执行。存储器中存储的数据可以随机的读取,处理器的程序指针寄存器(x86中是EIP)标志着当前或者即将执行的指令在存储器中的存储位置。Linux默认工作在这种存储程序计算机模型之上。

  堆栈机制是C语言函数调用的基础,而Linux内核大部分是用C语言编写的,因此堆栈对于Linux系统也至关重要。

  中断机制是现代多任务操作系统的基础,可以说没有中断机制就不可能实现多任务切换。中断机制大致就是向处理器发出中断信号,处理器收到中断信号后会从存储器的固定位置取指令执行。

Linux操作系统工作的原理

  在Linux操作系统中,为了系统内核的安全不受用户应用程序的破坏,将系统工作的状态分为了用户态和内核态,用户态是应用程序工作的状态,而Linux内核运行时的状态就是内核态。处于用户态的代码无法访问到内核态的代码和数据,这就最大限度的保护了系统的安全。我们知道应用程序主要是完成某种特定的功能,而操作系统的主要功能就是对计算机的各种资源进行管理,我们在使用计算机时主要就是使用各种应用程序。在使用Linux操作系统中,大部分时间系统都工作在用户态,但是当出现需要进程调度或者应用程序请求系统调用等需要内核运行时,系统是怎样完成从用户态到内核态的切换,而又返回到内核态的呢?

  答案就是通过中断机制,陷入Linux内核的唯一办法就是中断(这里中断的概念也包括了异常,处理器处理中断和异常的机制是类似的)。中断发生后,处理器会首先根据该进程的TSS段将SS和ESP设置为指向本进程的内核栈。然后将当前在用户态运行的应用程序的eflags,cs及eip的内容压入到该进程的内核栈中,强制将CS和EIP设置为对应中断类型的中断处理程序,在中断处理程序中会调用SAVE_ALL宏来将剩余的寄存器的值压入内核堆栈。以上动作可以理解为保存应用程序的执行断点。之后内核根据中断的类型执行相应的中断服务程序。当中断服务程序执行完毕后,内核会执行schedule函数进行进程调度以选择出将要执行的进程并调用__switch_to函数将SS和ESP切换到即将要执行的进程的内核栈。此时栈中保存了即将运行进程的执行断点,内核调用restore_all函数来将程序的执行断点恢复至各个寄存器,然后执行iret指令将eflags,CS和EIP,SS和ESP(指向进程的用户栈地址)从内核栈中恢复。至此,系统从内核态返回用户态。

Linux操作系统是如何工作的的更多相关文章

  1. 浅析Linux操作系统是如何工作的(思维导图)

    SA***189 多任务计算机运转机制如下思维导图所示: 小结: Linux操作系统是一个在时钟的节拍下,各个模块紧密协作.密不可分的整体,而整个Linux系统都是建立在存储程序的基础之上,正是有了程 ...

  2. Linux操作系统是如何工作的?破解操作系统的奥秘

    学号:SA12**6112 研究笔记: 1:计算机是怎么样工作的 2:用户态到内核态切换之奥秘解析 3:进程切换之奥秘解析 本博文主要是根据前3篇笔记来总结Linux内核的工作机制. 一:操作系统工作 ...

  3. Linux内核分析第二周学习总结:操作系统是如何工作的?

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 ...

  4. Linux操作系统学习_操作系统是如何工作的

    实验五:Linux操作系统是如何工作的? 学号:SA1****369 操作系统工作的基础:存储程序计算机.堆栈(函数调用堆栈)机制和中断机制 首先要整明白的一个问题是什么是存储程序计算机?其实存储程序 ...

  5. linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码

    计算机如何工作 三个法宝:存储程序计算机.函数调用堆栈.中断机制. 堆栈 函数调用框架 传递参数 保存返回地址 提供局部变量空间 堆栈相关的寄存器 Esp 堆栈指针  (stack pointer) ...

  6. 《Linux内核分析》第二周 操作系统是如何工作的?

    [刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK TWO(2 ...

  7. Linux内核分析——操作系统是如何工作的

    万子惠 + 原创作品转载请注明出处 + <Linux内核分析> 实验部分 使用实验楼的虚拟机打开shell 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain. ...

  8. Linux内核分析之操作系统是如何工作的

    在本周的课程中,孟老师主要讲解了操作系统是如何工作的,我根据自己的理解写了这篇博客,请各位小伙伴多多指正. 一.知识点总结 1. 三个法宝 存储程序计算机:所有计算机基础性的逻辑框架. 堆栈:高级语言 ...

  9. Linux内核分析作业二—操作系统是如何工作的

    一.实验:简单的时间片轮转多道程序内核代码运行与分析 my_start_kernel之前都是硬件初始化,它是操作系统的执行入口,每循环100000次就进行一次打印. 执行更加简单,每次时钟中断时都会调 ...

随机推荐

  1. python爬虫系列:Scrapy安装与使用

    这篇博文主要写Scrapy框架的安装与使用 Scrapy框架安装 命令行进入C:\Anaconda2\Scripts目录,运行:conda install Scrapy 创建Scrapy项目 1)进入 ...

  2. PECL轻松安装PHP扩展

    搭建PHP环境的时候,我们通常不会把全部的扩展都安装,随着需求不断添加,可能须要安装新的扩展,以下介绍一种简便的安装方法. 此处以ev.so扩展为例. 1.进入php安装文件夹bin文件夹.cd /A ...

  3. MantisBT 问题分配显示 姓名

    MantisBT 在提交问题的时候,系统默认"分配"给备选账号,而不是姓名. 这样在使用的时候很不便. 能够通过改动配置文件来改变,找到MantisBT根文件夹下文件config_ ...

  4. HTML、CSS和JS中注释类型的总结

    添加必要的注释,是一个优秀的程序员必须具备的好习惯,可以大大提高代码的可维护性.可读性. 1.HTML注释 <!--注释的内容--> 注释的地方(根据个人习惯可能有所不同): 结束标签的后 ...

  5. oracle RAC 11g sqlload 生产表导入数据(ORA-12899)

    背景:由于即将来临的双十一,业务部门(我司是做京东,天猫的短信服务),短信入库慢,需要DBA把数据库sqlload进数据库. 表结构如下: MRS VARCHAR2(100), STATUS VARC ...

  6. BZOJ 1818 线段树+扫描线

    思路: 可以把题目转化成 给你一些沿坐标轴方向的线段 让你求交点个数 然后就线段树+扫描线 搞一搞 (线段不包含断点 最后+n 这种方式 比线段包含断点+各种特判要好写得多) //By SiriusR ...

  7. python中set集合的使用

    集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. python 的集合类型和 其他语言类似, 是一个无序不重复元素集 基本功能包括关系测试和消除重复元素.集合对象还支持un ...

  8. 什么是CNN--Convolutional Neural Networks

    是近些年在机器视觉领域很火的模型,最先由 Yan Lecun 提出. 如果想学细节可以看 Andrej Karpathy 的 cs231n . How does it work? 给一张图片,每个圆负 ...

  9. javascript中菜单栏切换案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. DB2load遇到SQL3508N错误

    SQL3508N装入或装入查询期间,当存取类型为 "<文件类型>" 的文件或路径时出错.原因码:"<原因码>".路径:"< ...