文章目录
本章内容
- 1.前驱图和程序执行
- 2.进程描述
- 3.进程控制
- 4.进程同步与经典问题
- 5.进程通信
- 6.线程的概念与实现
第一节.前驱图和程序执行
(一)前驱图
-
前趋图是一个有向无循环图(DAG),用于描述进程之间执行的前后关系
一定注意前驱图不能存在环
(二)顺序执行与并发执行
顺序执行
-
1.顺序执行可分为三步:
I:输入操作
C:计算操作
P:输出操作
-
2.图解(与单道批处理很相似)
-
-
3.特征:
- 顺序性:CPU严格按照程序顺序执行
- 封闭性:I、C、P执行期间不受干扰,不可人机交互
- 可再现性:执行结果与执行速度(时间)无关,只与初始条件有关
- 对于可再现性的理解是,结果是可再现的,不会因为时间而改变。比如电脑出故障,能把这个故障再现出来
并发执行
- 1.并发执行的理解类似于多道批处理的过程
- 2.特征
- 间断性(失去顺序性):走走停停不是直接执行完成的
- 失去封闭性:程序运行受到其他程序干扰
- 不可再现性:并发执行不能重现结果,多次结果不同
-
理解:不同程序使用同一个变量,执行结果可能不同
-
-
这个图,a是公共变量,如果先执行程序1,打印的是1;如果先执行程序二打印的是0。因为不确定谁先执行所以这就是不可再现性
-
解决办法就是在程序上加一个开关,就是所谓的信号量
-
第二节.进程的定义和特征
(一)进程的定义和特征
- 进程:程序关于某个数据集合的一次执行过程
- 进程是执行中的程序
- 进程的处理需要数据和程序
- 总的意思就是进程是动态的过程,程序是静态的
- 进程的特征:
- 结构特征:进程实体=PCB+程序+数据
- 动态性(最基本特征)
- 进程时执行过程,有生命周期
- 程序是静态的,没有生命周期
- 并发性:竞争同一个CPU
- 独立性:自己使用的时候是独立占用CPU的
- 异步性:走走停停,以不可预知的速度向前推进
(二)进程三态与转化
-
程序三态:就绪、执行、阻塞
-
就绪状态
- 进程已获得除CPU之外的所有必需的资源,一旦得到CPU控制权,立即可以运行
- 就是万事俱备,只欠CPU
- 在就绪状态中有就绪队列,这个队列根据调度算法来决定下一个谁调入CPU执行
-
执行状态
- 程序正在CPU上执行
-
阻塞状态
- 因为某些原因被迫停止执行
- 阻塞状态有阻塞队列,也由调度算法决定谁进入就绪状态
-
三态转化
-
程序最开始处于就绪队列中,就绪状态只欠CPU
在调度算法分配后就进入CPU执行,如果在这个时间片内执行完成则终止,如果没完成就回到就绪队列中等到调度
如果在CPU执行过程中因某种原因出现问题(例如打印机被占用了)则会进入阻塞队列,处于阻塞状态
当这个问题被解决掉调度算法会在阻塞队列中选择一个进程到就绪队列中,从此又回到了第一步
几点注意和理解:
-
1.关于pcb;pcb是一个结构体,那么在内存中有一块存储pcb的区域(就简称pcb区),这个区域有很多pcb从而组成了一个pcb队列(静态链表实现)。在一个程序处理完成时这个程序对应的pcb就挂到这个队列中,等待下一次被重新赋值和使用
-
2.三态的进程相关程序已经被调入内存,而pcb被赋值就代表了程序被调入内存,
-
3.当处于执行状态时,CPU通过对应的pcb就可以知道了这个pcb代表的程序代码和数据。pcb有与CPU对应的结构,当时间片完又回到了就绪状态时,会保护现场,这个是把CPU寄存器的内容完整的存到对应的pcb上
-
4.对于这个图,当A程序执行完成后,又来了一个D程序,A对应的pcb就会到空闲的队列中,D拿下来一个把原来的数据重新赋值成为D自己的
-
(三)挂起状态与进程五态
挂起状态
- 定义:把进程和数据从内存移到外存
- 挂起的原因:
- 终端用户的请求
- 刚运行就出现了错误,净值运行修改它
- 父进程的请求(进程家族树,后面会说)
- 负荷调节的需要
- 内存空间有限,外存想执行的程序很多
- 有些进程边缘化或总选不中
- 把暂时没用的移出,移出的大部分是阻塞队列的
- 操作系统的需要
- 终端用户的请求
进程五态转化
理解:
-
首先执行态就是三态的执行态,活动就绪态就是三态的就绪态,活动阻塞态就是三态的阻塞态
这三个状态都是被调入内存中
-
静止就绪态静止阻塞态是由其他三个状态通过挂起状态转化来的,那么这俩状态不在内存中,在外存中
-
要说两个地方,一个是执行态到静止就绪态,这是极特殊的少数情况,当有一个大作业来临要占用大部分的内存空间时,正在CPU执行的程序直接调到外存,转换到静止就绪态
-
另一个是静止阻塞态到静止就绪态,要解释这个问题,首先要明确五态的需求
状态 需求 执行 啥都不缺,正在执行 活动就绪 只欠CPU 静止就绪 只欠CPU和内存 活动阻塞 欠CPU和I/O请求的东西 静止阻塞 欠CPU、内存和I/O请求的东西 那么静止阻塞态到静止就绪态这条线,意思是我如果这个请求被满足了(例如有空闲的打印机了),那么我就到静止就绪态,等待被调入内存和调度算法分配CPU即可,可以不回到阻塞态
(四)进程控制块(PCB)
PCB就是个结构体,PCB是进程存在的唯一标志,就像户口一样
PCB作用
- 作为独立运行基本单位的标志
- CPU调入PCB的程序和数据
- 能实现间断性运行方式
- 分时轮流,走走停停
- 提供进程管理所需要的信息
- 提供调度管理所需要的信息
- 名字、调度算法的内容(优先级、到达时间)、保护现场(对接CPU的寄存器信息)、数据
- 实现与其他进程的同步和通信
- 存在地址指针、在信号量机制中体现
信息
- 进程标识符:唯一标识一个进程
- 外部标识符:对程序员和用户
- 内部标识符:对操作系统
- 处理机状态
- 即保护现场中对应CPU寄存器的各个数据
- CPU的寄存器与PCB的一部分对应
- 进程调度信息
- 名字、调度算法的内容(优先级、到达时间)、保护现场(对接CPU的寄存器信息)、数据
组织方式
-
线性——结构体数组——很少使用
-
链式——链表——常用
-
索引——静态链表——常用
:对操作系统
- 处理机状态
- 即保护现场中对应CPU寄存器的各个数据
- CPU的寄存器与PCB的一部分对应
- 进程调度信息
- 名字、调度算法的内容(优先级、到达时间)、保护现场(对接CPU的寄存器信息)、数据
未完待续
- 名字、调度算法的内容(优先级、到达时间)、保护现场(对接CPU的寄存器信息)、数据