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

来源:互联网 发布:装潢设计软件学习 编辑:程序博客网 时间:2024/05/22 03:16

【研究内容】

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

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

【分析结论】

        在单进程计算机中,通过CPU和进程空间实现计算机的运行。每个进程都有4G的进程逻辑地址空间task_struct,CPU根据cs:eip从进程空间中取下一条指令进行执行,这样一直取指令执行指令地重复执行实现了单进程计算机的顺序运行。

        而函数调用堆栈实现了c代码的调用执行控制,寄存器ebp指向当前函数调用堆栈的栈底,esp指向当前函数调用堆栈的栈顶。当调用新函数时,将cs:eip和原函数的栈底压栈,并把原函数的栈顶作为新函数的栈底,此时栈顶与栈底重合,eip指向新函数开始处继续执行,当函数运行结束时leave将释放新函数的函数调用栈空间,此时栈顶与栈底重合,再恢复ebp到原函数的栈底,此时cs:eip出栈,从cs:eip处继续执行原函数,从而实现了c函数的调用控制。

        为了实现计算机多进程,给cup增加了中断机制,该机制包括三种:I/O中断、时钟中断和系统调用。中断机制的实现大致相同,进程X正在执行,在接收到中断信号后,CPU把当前的进程的用户态信息(cs:eip、esp、ebp等)保存到内核态进程X的内核堆栈中,并把esp指向内核栈X栈顶,cs:eip指向中断处理程序入口,控制权由CPU转向了内核。

       操作系统运行时,内核包括中断处理程序和内核线程两部分,也就是说内核包含所有程序共享的控制路径(中断处理程序)以及内核线程(用于提供内核服务)。上文中在转向内核态后,内核save_all保存现场后,进行中断处理,处理过程中如果需要进程的切换,调用schedule()选择下一个进程Y并进行切换(其中switch_to实现了进程及内核栈的切换),在中断处理结束后,restore_all恢复现场并返回到用户态,此时进程Y内核栈中esp、cs:eip等信息出栈,esp指向进程Y的用户态堆栈栈顶,cs:eip指向进程Y要执行的下一条指令,从此控制权又由内核转向了CPU,CUP根据cs:eip执行Y进程。

        以上就是linux操作系统的工作过程。



原创粉丝点击