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

学号:SA12*****81

姓名:**堂


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

在操作系统工作的基础之上,请您简述操作系统(内核)是如何工作,宏观概述结合关键点的微观(CS:EIP、EBP/ESP等的变化)分析。

 

存储程序计算机

现代计算机大多基于冯诺依曼体系结构,

存储程序和程序控制原理的要点是,程序输入到计算机中,存储在内存储器中(存储原理),在运行时,控制器按地址顺序取出存放在内存储器中的指令(按地址顺序访问指令),然后分析指令,执行指令的功能,遇到转移指令时,则转移到转移地址,再按地址顺序访问指令(程序控制)。

 

函数调用栈

函数调用栈一直随着函数调用的增长,随着函数的返回缩短。在调用函数时候,先压函数参数(从右往左顺序压),再压入函数调用下条指令的地址(由call完成)。接着进入调用函数体中先执行PUSH EBP,MOV EBP ESP,接着就是把函数体中的局部变量压入栈中。再遇到函数的调用的嵌套则依此类推。

EBP寄存器就处于一个很重要的地位,该寄存器中存储着栈中的一个地址(原EBP入栈后的栈顶),从该地址为基准,向上(栈底方向)能获取返回地址、参数值,向下(栈顶方向)能获取函数局部变量值,而该地址处又存储着上一层函数调用时的EBP值。

这样的结构使得函数调用过程中,可以保存调用前的状态,也达到了传递参数的目的,当被调用函数结束以后可以回到调用函数的下一条指令继续执行。

相关内容可以参照:http://blog.csdn.net/u010678824/article/details/8936577

 

中断

中断事件改变处理器执行指令的顺序,使得处理器转而去执行正常控制流之外的代码。中断处理机制可以使计算机能够并发的执行程序,从而改变之前的顺序执行指令的工作模式,提高计算机的运行效率。

 

操作系统内核是如何工作

从宏观上看,硬件基本初始完成以后,start_kernel开始运行完成操作系统本身的初始化,并且最后会启动一个init进程,之后的用户进程都直接或间接地从这个init进程创建。

从微观上看,多任务的进行是这样的情况,用户的进程在执行的时候,发生中断,那么就会进入内核态,先把它的esp和eip存入内核栈,然后SAVE_ALL把CPU的一些寄存器存入内核栈,然后就进行中断处理,中断处理的最后会调用switch_to宏,切换到另一个进程继续执行。新执行的程序会接着从它上一次被switch_to切换出去的地方继续执行,很可能是restore_all和iret,也就是从内核态切换出来,在用户态继续执行用户程序。

 

参考:

http://baike.baidu.com/view/2083958.htm

深入理解Linux内核

独辟蹊径品内核Linux内核源代码导读

以及其他同学的博客

http://teamtrac.ustcsz.edu.cn/wiki/Linux2013Lab5

 

后续学习过程中将对本文再进行进一步的完善。




  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值