【实验五】Linux操作系统是如何工作的?破解操作系统的奥秘

来源:互联网 发布:网络犯罪 编辑:程序博客网 时间:2024/05/16 06:17

实验要求:

  • 操作系统工作的基础:存储程序计算机、堆栈(函数调用堆栈)机制和中断机制;
  • 在操作系统工作的基础之上,请您简述操作系统(内核)是如何工作,宏观概述结合关键点的微观(CS:EIP、EBP/ESP等的变化)分析。
  • 完成500字左右的一段总结文字(务必是自己写的),附上学习研究笔记,另外请大家养成尊重知识产权的习惯引用或参考别人的资料注明出处URL。


一.存储程序计算机-处理器读并解释存储在存储器中的指令

   一个典型系统的硬件组成:


主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。硬件上,主存是一组动态随机存取存储器(DRAM)芯片组成的。逻辑上,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),这些地址从零开始.

处理器CPU,解释或执行存储在主存中指令的引擎。CPU的核心是一个寄存器-PC程序计数器。

从系统通电开始,直到系统断电,CPU一直在不断的执行PC指向的指令,再更新PC,使其指向下一条指令。


二. 堆栈(函数调用堆栈)机制

一个过程调用包括将数据(过程参数或返回值)和控制从代码的一部分传递到另一部分,它还必须在进入时为过程的局部变量分配空间,并在退出时释放空间。

大多数机器只提供转移控制到过程,或者反之的简单指令,数据传递、局部变量的分配和释放通过操纵  程序栈  来实现。(参考http://blog.sina.com.cn/s/blog_927b6d2e010193vf.html


三.中断机制-变内核主动为硬件主动

处理器和外部设备速度往往不在一个数量级,使其能协工作,轮询polling固然可以但是CPU利用率低,于是想提供一种机制:让硬件在需要时再向内核发出信号--即中断机制。

硬件设备产生的中断并不考虑与CPU的时钟同步,中断可以随时产生。还包含时钟中断:更新新系统自启动以来所经过的时间Jiffies;更新时间和日期Xtime;确定当前进程的执行时间,考虑是否抢占;更新资源使用统计计数;检查到期的软定时器。


异常与中断不同,它在产生时必须考虑与CPU时钟同步。分为处理器探测异常(故障fault,陷阱trap,异常终止abort)和编程异常(又叫软中断,如系统调用)


四. 操作系统是如何工作的


操作系统是一些基本的程序集合,其中最重要的程序称为内核kernel,又习惯称为操作系统。

当操作系统启动时,内核被装入RAM中,内核包含系统运行必不可少的很多核心过程procedure,操作系统必须完成两个主要目标:

  • 与硬件交互,为硬件平台上所有低层可编程部件提供服务;
  • 为运行在计算机系统上的应用程序提供执行环境。


撇开内核与硬件交互部分,内核为应用程序提供执行环境:
应用程序通过系统调用与内核通信,应用程序通常调用库函数再由库函数通过系统调用界面,让内核代其完成各种任务。应用程序通过系统调用界面陷入内核--是应用程序完成其工作的基本行为方式。

具体过程:
进程1运行,在用户态有自己的堆栈空间S1,此时发生中断或异常(如时钟中断,IO中断,系统调用等),进程1进入内核态,内核堆栈空间SK1,硬件处理过程--控制单元判段保存cs,eip,ss,esp,eflags寄存器,然后查找中断向量表IDT,根据中断号运行中断处理程序;
时钟中断程序会检查进程的运行时间,考虑是否抢占,若果必要,此时会换调用schedule(),schedule()最后调用switch_to宏进行进程上下文切换,此后进入切换后的进程2,进程2内核态堆栈SK2此时保存着其用户态的进程上下文,pop操作后,iret进行中断上下文恢复,进程2进入用户态,此时有自己的堆栈空间S2。


一些思考:
要区别进程切换与中断(异常),一个进程的上下文与一个中断的上下文不同:
进程上下文包含了进程执行需要的所有信息
– 用户地址空间:包括程序代码,数据,用户堆栈等
– 控制信息:进程描述符,内核堆栈等
– 硬件上下文:进程恢复时必须用的一组寄存器值。

中断或异常的执行代码不是一个进程,它是一个内核控制路径,比一个进程要“轻”,上下文相较要少。

Linux为每个进程分配一个8KB大小的内存区域,用于存放该进程两个不同的数据结构:

– Thread_info
– 进程的内核堆栈

内核控制路径所用的堆栈很少,因此对栈和Thread_info来说,8KB足够了。

参考:
《Linux内核设计与实现》
《深入理解LINUX内核》


原创粉丝点击