作者:SA****6450 丁海蛟
1.计算机是如何工作的?
现代的计算机都是程序存储计算机。存储程序计算机最早是由著名数学家冯·诺伊曼等人在1946年总结并明确提出来的,因此又被称为冯·诺伊曼计算机。
所谓程序存储计算机,是指将计算的内容(数据)和计算的过程(指令)都保存到存储器上,然后按照步骤(程序设定的指令顺序)对数据进行读取、运算、保存。
2.堆栈机制
计算在执行的过程中,需要存储很多的临时数据,然而这些数据只是在某个运行阶段需要,不会在整个运行阶段使用,而是动态的随着程序的运行而生成的。因此需要一个动态地管理临时数据的机制,这个机制就是堆栈(函数调用堆栈)。堆是一个长期存放永久数据的容器,栈则是随着函数的动态调用而发生变化的,在进行函数调用时,用户态的栈会保存函数的返回地址、cs:eip等相关寄存器的值、函数参数以及局部变量等等。如果系统进行系统调用或者中断处理时候,内核栈会保存中断函数返回地址和其它一些重要的参数。
3.中断机制
中断分为同步和异步中断,中断是由间隔定时器和I/O设备产生的。中断的过程其实就是CPU停下现在正在处理的进程,转而响应中断信号来自的进程,保存当前进程的状态和信息,进而执行申请处理的进程,执行完中断进程之后,CPU再返回到之前进程中停下工作的地方继续执行原进程。
4.操作系统内核是如何工作的
操作系统有用户态和内核态两种状态,分成这两种状态的原因是它们具有不同的权限。内核态的权限更高,可以执行一些系统级别的指令和操作。用户态只能执行一些基本操作。intel X86的CPU将权限分为0~3四种,Linux只用了其中的0和3,其中0表示内核态,3表示用户态。中断是用户态切换到核心态的途径之一,而系统一般采用int $80中断调用。此时将ESP、SS压入堆栈保存,函数栈将切换到内核态。CPU切入到内核态,找到当前进程的内核态,执行SALL_ALL,。由硬件自动保存寄存器SS、ESP、EFLAGS、CS:EIP的值。中断处理之后,执行swith_to宏切换进程,然后通过RESTORE_ALL恢复寄存器中的值,iret恢复SS、ESP、EFLAGS、CS、EIP的值,最后CPU又从内核态切换回用户态。