破解操作系统的奥秘
【实验五】Linux操作系统是如何工作的?破解操作系统的奥秘
姓名:吕良
学号:SA12**6259
关键字:存储程序计算机 堆栈机制 中断机制
#include<stdio.h> int main() { printf("HelloWorld\n"); return 0; }
操作系统如何运行Hello程序
一、存储程序计算机
“存储程序”原理,是将根据特定问题编写的程序存放在计算机存储器中,然后按存储器中的存储程序的首地址执行程序的第一条指令,以后就按照该程序的规定顺序其他指令,直至程序结束执行。
Hello源程序被编译汇编成ELF可执行文件格式,存储在计算机存储器的某段空间中;
二、堆栈机制
一个过程调用包括将数据(以过程参数和返回值得形式)和控制从代码的一部分传递到另一部分。另外,它还必须在进入时为过程的局部变量分配空间,并在退出时释放这些空间。数据传递、局部变量的分配和释放都是通过操纵程序栈来实现的。
操作系统会创建一个新的进程来执行Hello程序。而进程的地址空间可分为两部分:独立的用户态地址空间(0~3G)和共享的内核态地址空间(3~4G),进程用户态地址空间中有一段空间是进程的用户态堆栈,相应地,进程内核态地址空间中有一段空间是进程的内核态堆栈。程序的执行就是在栈中进行的:最开始Hello程序运行在用户栈,当执行到printf时发生系统调用(软中断),程序进入到内核栈执行,最后再返回到用户栈。
三、中断机制
中断,顾名思义,就是CPU停下当前的工作,转而去处理系统出现的新情况。中断是进程从用户态切换到内核态的唯一途径。(这里的中断是广义上的中断,分为同步中断(异常)和异步中断(狭义上的中断))如上面所说,当执行到printf时发生系统调用(软中断),程序进入内核态,最后再返回到用户态。
最后,综合起来说一下操作系统是如何执行Hello程序的:
首先,Hello源程序被编译汇编成ELF可执行文件格式,存储在计算机存储器中。然后操作系统创建一个新进程,并规划好进程的用户态堆栈和内核态堆栈。TSS(任务状态段)不仅在进程切换时起着重要作用,在同一进程的用户态和内核态切换时也至关重要。TSS中保存了进程的用户态的栈顶指针esp和内核态的栈顶指针esp0。当Hello程序执行到printf通过系统调用(软中断)进入到内核态时,进程会把内核栈的相关指针ss0和esp0堆装入SS及ESP寄存器以变换到内核堆栈,除了通过寄存器把相应的参数传递到内核栈,还会从TSS中取出进程的用户栈栈顶指针esp,把它压入到进程的内核栈。程序开始在内核栈执行......。当系统调用执行完后,进程就要返回到用户态。此时将保存在内核栈中的用户栈的栈顶指针esp出栈,装入ESP寄存器中,进程就顺利的返回到了用户态。
浙公网安备 33010602011771号