学号:SA12*****81
姓名:**堂
操作系统工作的基础:存储程序计算机、堆栈(函数调用堆栈)机制和中断机制;
在操作系统工作的基础之上,请您简述操作系统(内核)是如何工作,宏观概述结合关键点的微观(CS:EIP、EBP/ESP等的变化)分析。
存储程序计算机
现代计算机大多基于冯诺依曼体系结构,
存储程序和程序控制原理的要点是,程序输入到计算机中,存储在内存储器中(存储原理),在运行时,控制器按地址顺序取出存放在内存储器中的指令(按地址顺序访问指令),然后分析指令,执行指令的功能,遇到转移指令时,则转移到转移地址,再按地址顺序访问指令(程序控制)。
函数调用栈
函数调用栈一直随着函数调用的增长,随着函数的返回缩短。在调用函数时候,先压函数参数(从右往左顺序压),再压入函数调用下条指令的地址(由call完成)。接着进入调用函数体中先执行PUSH EBP,MOV EBP ESP,接着就是把函数体中的局部变量压入栈中。再遇到函数的调用的嵌套则依此类推。
EBP寄存器就处于一个很重要的地位,该寄存器中存储着栈中的一个地址(原EBP入栈后的栈顶),从该地址为基准,向上(栈底方向)能获取返回地址、参数值,向下(栈顶方向)能获取函数局部变量值,而该地址处又存储着上一层函数调用时的EBP值。
这样的结构使得函数调用过程中,可以保存调用前的状态,也达到了传递参数的目的,当被调用函数结束以后可以回到调用函数的下一条指令继续执行。
相关内容可以参照:http://blog.youkuaiyun.com/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
后续学习过程中将对本文再进行进一步的完善。