主要参考书籍:《CSAPP》、《图解操作系统》、《MOS现代操作系统》
本篇着重学习线程与进程
进程
小林coding对进程的解释:代码以二进制的文件形式存储到内存当中,CPU读取并执行其中的每一条指令,其中CPU正在运行的每一条指令就是进程。
CSAPP中对进程的解释:进程的经典定义是一个执行中的程序实例 , 系统中每个程序都运行在进程的上下文(context)中。
上下文是指程序运行时的环境:包括存在内存中的代码和数据、它的栈、寄存器、环境变量、程序计数器等等。
MOS中对进程的解释:MOS对进程的由来和定义以及概念讲解得很详细。容易理解,但也导致难以记忆。进程是人类抽象出来的。它与程序有细微的区别。
用简单的公式去记忆进程: 代码(运行中)+ 上下文(环境) = 进程
进程模型
我们经常也把进程模型简称为进程。
比较底层的东西:进程的实现
这里应该拓展出来为操作系统中进程模型的实现
进程的特点(有什么状态)
在我们初步知道进程是什么之后(也许,毕竟概念真的很难记,而且这东西很抽象),我们需要进一步地知道进程在做些什么,他有什么样的特点。
在《MOS》中先提到了如何控制进程,然后才提到进程的状态
而在《图解系统》中则先提到进程的状态
因为进程是并发的<单核中>(不是并行)
进程的运作规律
运行 -- 暂停 -- 运行
进程三大基本状态
如果没有状态没法控制的,而且有一个物理原因(只有一个核,一个核同时只能跑一个进程 ),必须要切换才能完成多进程工作
运行态
运行态就是:该时刻进程实际占用CPU
就绪态
就绪态就是:进程所有条件都准备好,随时等待CPU可用就马上进入占用
阻塞态
阻塞态就是:因为某些条件还没准备好,等待外部事件发生使条件准备好。
状态的轮转关系
使用进程模型使得我们易于想象系统内部的操作状况。一些进程正在运行执行用户键入命令所对应的程序。另一些进程是系统的一部分,它们的任务是完成下列一些工作:比如,执行文件服务请求、管理磁盘驱动器和磁带机的运行细节等。当发生一个磁盘中断时,系统会做出决定,停止运行当前进程,转而运行磁盘进程,该进程在此之前因等待中断而处于阻塞态。这样,我们就可以不再考虑中断,而只是考虑用户进程、磁盘进程、终端进程等。这些进程在等待时总是处于阻塞状态。在已经读入磁盘或键入字符后,等待它们的进程就被解除阻塞,并成为可调度运行的进程。 ------------------
也许我们一直觉得操作系统深不可测,无法知道内部如何运转,但在理解了进程模型之后,一切变得明朗起来。
进程完整状态流转
事实上,进程还存在更加完整、完善的状态流转(补充了解)
创建状态
结束状态
完整状态变迁图:
其实图中也还不算完全完善,不过基本已经齐全(比如从运行态到就绪态还可能是被抢占) 这取决于操作系统的调度机制
挂起状态
起因:如果有大量的阻塞态的进程在等待,每个进程有自己的信息(占着系统的内存甚至是缓存),但内存终归是有限的,我们只能退而求其次,将进程的信息存到外存当中(外部存储--硬盘)。
这时,进程不占据实际的物理内存空间。 我们称之为挂起状态。
阻塞挂起状态
就绪挂起状态
好耶! 又有新图
进程的层次结构
我们都知道进程有着父子之类的亲密关系
但更进一步的是我们即便知道了,很多题目我们依然做不出来,因为不清楚细节
比如说:
父进程创建了子进程后,子进程是否拥有新的内存页表,会否引发CPU中断(记不太清那些题目了)...
可以专门收集一下。
习题:《现代操作系统》 第二章的全部习题
用A4纸写下答案 若有编程题便用编程实现并记录
可以结合第十章的LInux的进程一起学习
标签:第一轮,操作系统,状态,阻塞,进程,秋招,CPU,运行 From: https://www.cnblogs.com/black-worrior-2000/p/16586847.html