本文为学习小林coding《图解操作系统系列》总结,详细内容请移步原文https://blog.csdn.net/qq_34827674/article/details/107305756
进程
进程描述:
当我们编写的程序编译成可执行文件,运行后cpu就会执行我们程序中的指令,这个运行的程序就称为进程。我们的cpu不可能只运行一个程序,当我们的程序在等待资源或者其他原因暂时不能执行,那么cpu就要一直等待进程执行结束再去处理其他的工作,此时就会造成资源的浪费,所以我们可以在一个进程等待资源的时候,让cpu去处理其他的进程,等到原来的进程具备运行条件的时候,再来处理这个程序,这种多个程序交替执行的思想就是cpu管理多个进程的初步想法。
多进程的操作系统,cup会在进程间切换执行,每个进程各运行几十后者几百个毫秒。这种虽然每个时间点只有一个程序在运行,但一个时间段内,可能会运行多个进程的方式称为并发,而同一时间点两个程序同时运行的方式称为并行。
进程的状态:
一个进程在活动期间至少具备三种状态:
- 运行状态(Runing):该时刻进程占用 CPU;
- 就绪状态(Ready):可运行,但因为其他进程正在运行而暂停停止;
- 阻塞状态(Blocked):该进程正在等待某一事件发生(如等待输入/输出操作的完成)而暂时停止运行,这时,即使给它CPU控制权,它也无法运行;
此外,进程还有两个基本的状态:
- 创建状态(new):进程正在被创建时的状态;
- 结束状态(Exit):进程正在从系统中消失时的状态;
一个完整的进程状态的变迁如下图:
以下各个状态的变化比较同意理解,知道了各个状态的含义,两个状态之间的变化经过哪些条件就可以知道了:
- NULL -> 创建状态:一个新进程被创建时的第一个状态;
- 创建状态 -> 就绪状态:当进程被创建完成并初始化后,一切就绪准备运行时,变为就绪状态,这个过程是很快的;
- 就绪态 -> 运行状态:处于就绪状态的进程被操作系统的进程调度器选中后,就分配给 CPU 正式运行该进程;
- 运行状态 -> 结束状态:当进程已经运行完成或出错时,会被操作系统作结束状态处理;
- 运行状态 -> 就绪状态:处于运行状态的进程在运行过程中,由于分配给它的运行时间片用完,操作系统会把该进程变为就绪态,接着从就绪态选中另外一个进程运行;
- 运行状态 -> 阻塞状态:当进程请求某个事件且必须等待时,例如请求 I/O 事件;
- 阻塞状态 -> 就绪状态:当进程要等待的事件完成时,它从阻塞状态变到就绪状态;
处于阻塞状态的进程会占用物理内存,所以虚拟内存管理的操作系统中,通常会把阻塞状态的进程换出到硬盘,等到再次运行时候,在从硬盘换到物理内存:
这种没有占用实际物理内存的情况,就是挂起状态,不同于阻塞状态,阻塞是等待某个时间的返回。挂起状态分为两种:
- 阻塞挂起状态