计算机操作系统 --- 进程和进程的上下文切换

时间:2020-01-15 12:04:02   收藏:0   阅读:150

问题

程序和进程

     程序是静态的概念,而process进程更像是运行任务,最后面一个例子可以好好理解,一个程序可以被多个进程加载。 技术图片

进程的概念

技术图片

进程与上下文切换

技术图片

    可以看到两个进程(shell 和 hello 程序)发生切换的时候会从内核态到用户态。

技术图片

    上面这张图非常重要,好好理解!     上面就是我们所说的上下文分两部分,和系统相关的进程信息为系统上下文,而和用户相关的则是用户级上下文, 例如我们的java 进程来说,java 对于操作系统来说是一个进程,一个进程有标识信息吧,进程的标识信息属于系统上下文,而我们写的代码则分配在用户程序块,我们使用代码生成的“对象”等分配在用户堆栈和用户数据块中。

技术图片

    还是以java进程为例,假若操作系统中存在一个 java 进程,那么它的进程空间就可以这样表示。

用户态和内核态

    我们现在知道操作系统要不就处于两种状态,要不就执行用户代码,要不就执行内核代码。

技术图片

处理器为了区分这两种模式,就有一个标识位用于区分两种状态。

进程的加载和运行

技术图片

    上图是加载程序的步骤,其中step3,注意创建的进程是只能读不行写,通过只读来实现写时拷贝(相当于数据库数据从文件加载到内存,然后修改产生脏页,然后脏页再回刷数据回文件的原理,但是次处不是回刷到文件)写的时候发生了保护错了,这时候才真正执行替换的工作,将新进程的东西替换到旧进程的东西,step4 不会从磁盘拷贝代码和数据等内容,而是修改shell(旧进程)页表等东西,使得页表指向的是hello(新进程)页框,这时候就会产生缺页,缺页后就会加载数据到内存中,直到main函数。

execve函数执行

execve函数的执行可以任务是进程前的准备工作,execve的执行到main方法执行之前是需要重要把握的一部分的,会在操作系统后面的课程学习。

技术图片

任务的栈结构

我们看右边的图,main函数的第二个参数是个数组放的是进程名,例如上面例子中的“Hello”

技术图片

总结

参考资料

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!