学号:SA12***116
1.操作系统工作的基础
1.1 存储程序计算机
存储程序计算机最早是由著名数学家冯·诺伊曼等人在1946年总结并明确提出来的,因此又被称为冯·诺伊曼计算机。(以下参考自维基百科)存储程序计算机在体系结构上主要特点有:
1.以运算单元为中心
2.采用存储程序原理
3.存储器是按地址访问、线性编址的空间
4.控制流由指令流产生
5.指令由操作码和地址码组成
6.数据以二进制编码
1.2 堆栈(函数调用堆栈)机制
首先堆栈是c语言里函数调用的基础。并且堆栈是函数调用时把被调用的函数所需参数压入栈中,以实现函数的调用。
堆栈的具体作用有:
1.传递参数(为被调用函数提供参数)
2.保存局部变量
3.保存中间变量
4.在系统中用堆栈保存任务的状态(例如各个寄存器的值)
具体调用堆栈的时候,最上层的函数,堆栈指针指向栈顶,而ebp指向帧栈底。而其他帧栈底部的指针ebp都压入到了栈中。当最外层的函数调用结束后,把ebp的值给dsp作为下一个函数的帧栈顶,而把压在栈中的ebp弹出做当前的帧栈底。如此往复。
1.3 中断机制
处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回
中断使得硬件得以与处理器进行通信。
不同的设备对应的中断不同,而每个中断都通过一个惟一的数字标识。从而使得操作系统能够对中断进行区分,并知道哪个硬件设备产生了哪个中断。这样,操作系统才能给不同的中断提供不同的
中断处理程序。
在它执行程序的时候,如果有另外的事件发生(比如用户又打开了一个程序)那么这时候就需要由
计算机系统的中断机制来处理了。
2.操作系统(内核)是如何工作
2.1 EBP/ESP的变化
要完成函数调用时栈的扩展和恢复,主要是由esp和ebp这两个寄存器实现的。esp是栈顶寄存器,里面存的是下次push时将会写入的地址,当然了,由 于x86架构下栈由高地址向低地址生长,所以push会导致esp变小,而pop导致esp变大,因而有人也将esp称为栈底寄存器,这个称呼是无所谓 的,也不影响讨论。ebp是基址寄存器,里面存的函数的基地址。应该说esp是很好理解的,但是ebp不然,基地址到底是什么呢?我们可以通过程序运行时 esp和ebp所存储的值来解答这个问题。
2.2 CS:EIP的变化
在正常情况下,CS:EIP是指向下一条要执行的指令,而在操作系统引入了中断之后,
CS:EIP
指向中断处理程序入口,同时控制权由CPU转向内核,中断之前的
CS:EIP将被压入堆栈进行保存。