您的位置:首页 > 运维架构 > Linux

linux操作系统实验五--Linux操作系统是如何工作的?

2013-06-30 11:21 274 查看
学号:SA*****340

这篇博文主要研究Linux操作系统是如何工作的?主要从以下几个方面进行分析,它们是linux操作系统正常工作核心的几个部分。

一、操作系统工作的基础

1、存储程序计算机

存储程序计算机就是冯·诺伊曼结构,其核心思想是把计算机执行时需要的指令和数据存储起来,不用硬件来实现指令,从而改善计算机的灵活性,计算机可以很容易地改变其程序地址。在执行程序时CPU根据当前程序指针寄存器的内存取出指令并执行相应的指令,然后再进行下一条指令的读取并执行,如此循环直到程序结束时才停止执行。这个执行过程可以简化如下:



图1
计算机简单的工作原理

2、函数调用堆栈

另外一个重要的计算机工作机制就是分析堆栈,这是计算机工作不可忽视。进程是CPU执行的基本单位,每个进程都有自己独立的内存空间,进程的内存地址空间可以用下图来表示:



图2 进程的虚拟内存空间
重点分析进程的用户态占用空间以及8KB的内核空间。
计算在执行的过程中,需要存储很多的临时数据,然而这些数据只是在某个运行阶段需要,不会在整个运行阶段使用,而是动态的随着程序的运行而生成的。因此需要一个动态地管理临时数据的机制,这个机制就是堆栈(函数调用堆栈)。堆是一个长期存放永久数据的容器,栈则是随着函数的动态调用而发生变化的,在进行函数调用时,用户态的栈会保存函数的返回地址、cs:eip等相关寄存器的值、函数参数以及局部变量等等。如果系统进行系统调用或者中断处理时候,内核栈会保存中断函数返回地址和其它一些重要的参数,堆栈的作用不言而喻。
堆栈的工作机制可以参见这篇博文计算机是怎么工作的?

3、中断处理机

中断事件改变处理器执行指令的顺序,使得处理器转而去执行正常控制流之外的代码。中断处理机制可以使计算机能够并发的执行程序,从而改变之前的顺序执行指令的工作模式,提高计算机的运行效率。
以上介绍的三个方面是linux操作系统正常工作管理必不可少的部分。有了上面三个条件,计算机可以执行一个可以变更的、可以管理运行时数据的程序了。

二、linux操作系统是如何工作的?

有了上述几个条件后,可以上计算机可以同时运行批量的程序,操作系统能够帮助计算机高效、安全管理这些程序。在计算机启动时,所有的硬件条件准备好后,开始启动start_kernel完成操作系统自身的初始化,并且随后启动一个进程init。之后的所有进程都是在这个进程的基础上创建的。
当用户态的进程在执行过程中来了中断,那么就会进入内核态,这时必须把esp,eip等重要的值压入之前进程的内核栈,然后进行SAVE_ALL,把CPU的一些寄存器的值压入内核栈,然后进行中断处理,中断处理之后进程切换,调用switch_to切换到另外一个进行继续执行。新执行的程序会在它上一次被switch_to切换出去的地方继续执行,然后进行中断恢复restore_all和中断返回iret,从内核态切换出来进入用户态,在用户态继续执行相应的指令。然后如此循环。
从进程执行的角度进程分析:当前进程X在运行,当前的esp寄存器指向进程X的用户栈的栈顶,eip指向进程X的代码段,假设进程X的时间片用完,这时候发生中断,那么CPU要做两件工作,1是将当前的eip和esp压入到进程X的内核栈,2是将esp指向进程X的内核栈,并将eip指向中断处理入口,进入到内核态。在进行SAVA_ALL即保存相关寄存器等之后,开始执行中断处理程序,进行的切换与调度就是发生在中断处理程序中。根据相应的调度策略,选择下一个要执行的进程next,并切换到进程next。这里内核是通过执行switch_to来进行进程切换的,在switch_to中主要进行了进程的寄存器register和进程的内核栈stack的切换。当进程切换完以后,esp就指向了进程Y的内核栈,可以看到,在进程Y的内核栈中保存着进程Y被挂起以前的esp以及eip,进程弹栈操作,现在的eip指向的就是进程Y的代码区,而esp就只想进程Y的用户栈,这样通过esp和eip的的切换就切换到了进程Y继续执行,完成了整个进程从X切换到进程Y。



图3 中断处理及进程切换调度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: