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

来源:互联网 发布:java 简单代码实例 编辑:程序博客网 时间:2024/05/01 17:22

SA12420 马林

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

     现行的计算机都是基于冯诺依曼体系结构,又成存储程序结构的基础进行设计的,其中最重要的2个计算机硬件为处理器和存储器。本人在此基础上对操作系统工作基础进行一个简单的探讨。

  

   所谓存储程序计算机是指程序指令和数据都存储在存储器中,处理器按照一定的顺序从存储器中取出指令执行,最终得到一个输出。可以想象,在最原始的计算机上运行一个未进行任何抽象或封装的程序,应该是顺序执行的。但是现在的程序,封装程度已经越来越高,比如说函数调用就是一个非常常见的封装。有了函数调用,减少了相同功能代码的重复,使得程序员不用关心函数的内部实现,而只需要知道输入,就能得到其输出。函数的调用是利用堆栈来实现的。

   调用了call指令之后,函数会将目前执行的状态中重要的寄存器数据压进堆栈保存起来,然后pc跳转至目标函数位置进行执行,执行完毕后堆栈中的数据被压出,使得函数可以返回调用前的位置继续执行,从而完成了函数的调用。

   中断控制是为了克服对I/O接口采用程序查询控制服务方式所带来的处理器低效率产生的。它可以改变cpu的执行路径。中断发生后,计算机同样会将重要数据压进内核堆栈,当中断完成后,再从内核堆栈中取出,从而根据需要返回至正确的位置继续执行。

   一般来说,用户程序在用户态执行,当进行系统调用或者发生中断异常处理,会从用户态陷入内核态。在进入内核态之前,会将重要的寄存器数据如下图所示的压进内核堆栈空间。

 

当程序处理完之后要返回到用户态继续执行陷入之前的程序也可以从内核堆栈中得到足够的信息从而可以正确的返回。

   简单的说来,堆栈机制可以使得在执行流改变路径的时候,可以保存改变前的重要信息不丢失, 使得程序可以在需要的时候正确的返回,而堆栈的先进后出的性质,也可以使得这种路径的改变可以嵌套或者说递归的发生而不会出现错误。

参考书籍及文献:

一、Understanding The Linux Kernerl      -- Daniel P.Bovet  Mraco Cesati

二、Linux操作系统原理与应用    --陈莉君 康华 编著

原创粉丝点击