第二章
文章目录
2.1 进程基本概念
1.有向无环图
- 操作系统用有向无环图描述进程之间执行关系【无环!有环则会出现死循环】
2. 顺序执行:
- 输入—计算—输出
I1—>C1—>O1==》I2—>C2—>O2 【单道程序环境】
特点:(背过!)
①顺序性:处理机严格按照程序执行
②封闭性:程序开始执行不受外界影响
③可再现性:执行结果与速度无关,只与初始条件有关
3. 并发执行:
- n个作业,每个作业都执行输入计算输出过程,则同一时间间隔内处理作业吞吐量增加
I1—>C1—>O1
I2—>C2—>O2
I3—>C3—>O3 【多道程序环境】
特点:
①间断性:程序共享资源,形成相互制约关系
②失去封闭性:程序运行受其他程序影响,并发进程共享变量,执行结果与速度有关
③不可再现性:程序在并发执行,多次运行条件相同的同一程序会出现不同运行结果
④资源利用率提高,系统吞吐量增加
2.2 进程的描述
1. 进程概念
- 进程概念
程序关于某数据集合的一次执行过程
程序的并发执行是现代操作系统的基本特征之一,为了更好的描述这一特征引入进程概念 - 进程和程序的区别
①进程具有并发特征 而程序没有
②进程是动态概念,而程序是静态概念
③进程是竞争计算机系统资源的基本单位,其并发性收到系统的制约
④不同进程可包含同一程序,只有对该程序所对应的数据集不同
2. 进程基本特征(!!)
①并发:走走停停
②异步
③独立:- 独立调度单位-独立执行单位-独立拥有资源
④动态性:有生命周期的一次执行过程
⑤进程结构特征:PCB(进程控制块-进程存在的标志)+程序+数据=进程实体
3.进程三状态图
- 三状态图👇👇👇👇👇
①就绪状态:
程序的一个或多个进程从外存调入到内存,获取除CPU之外的全部必须资源,且PCB也处于初始化完善阶段【就绪状态一定在内存中;万事俱备只欠CPU】
②执行状态:
CPU按照调度算法将处于就绪状态的进程或程序调入到CPU进行执行【运行状态一定在内存中,CPU正在运行】
情况1:从就绪队列调入的进程【恰好】在CPU单个时间片内执行结束,则将其在就绪队列里的占位清除,并重新从外存中由调度算法调度新进程
情况2:从就绪队列调入的进程【未在】CPU单个时间片内执行结束,则其重新回到就绪队列等待调度算法再次调度
情况3:从就绪队列调入的进程【提前于】CPU单个时间片内执行结束。由于进程调度是以单个时间片为基准,所以需要等待下一个时间片开始再次调度新进程。由于单个时间片是μs级别,所以不考虑上个时间片空闲浪费。
③阻塞状态:
正在执行的进程因无法使用外设而处于暂停状态,需要在内存中(非就绪队列)开辟新队列排队,且同一原因被阻塞的进程形成一条队列【阻塞队列一定在内存中;万事俱备只欠CPU和外设】
阻塞队列的外设条件满足则会重新回到就绪队列等待调度
三状态之间转换详细解释👇👇👇👇
①就绪状态——>执行状态 进程调度过程【不需要硬件支持】
就绪队列程序在调度算法调度下进入到CPU执行
②执行状态——>就绪状态 【时间片用完】
进程在单个时间片未执行结束需要重新回到就绪队列排队等待调度算法调度
③执行状态——>阻塞状态 【I/O请求】
执行在CPU内的进程在无法获取外设处理的情况下重新在内存中以相同阻塞情况排队
④阻塞状态——>就绪状态【I/O完成】
阻塞队列进程获得其所需的外设等条件则会重新回到就绪队列等待调度算法调度
4. 挂起状态&唤醒状态
挂起:外存上有非常紧急的任务,而内存处于满的状态,为了及时执行外存上的紧急任务,因而需要将内存上长期不用的进程移入到外存上,此操作为 挂起
唤醒:内存上不是特别紧急时刻,则将挂起到外存上的进程调度到内存中
5. 引起挂起原因
- 终端用户请求
- 负荷调节需要
- 操作系统需要
6. 进程五状态图
- 👆👆👆👆👆类比三状态图详细过程记忆
静止就绪 静止阻塞都是外存挂起的状态
7.进程管理中的数据结构
PCB是进程的唯一标识(作用、信息、组织方式)
2.3 进程的控制
1. 进程创建+终止
- 创建:操作系统create()创造首个进程
- 创建过程:(!!)
①申请空白PCB
②为新进程分配资源
③初始化进程控制块
④将新进程插入到就绪队列 - 进程创建原因
①用户登录
②作业调度
③提供服务
④应用请求
- 终止:进程随作业运行正常或不正常结束而撤销
- 终止过程:
①找出被终止的进程PCB
②若进程状态为运行态,置CPU调度标志为真
③若有子孙进程,则终止其子孙进程并回收资源
④回收进程资源
⑤回收终止进程的PCB
2. 进程阻塞+唤醒
- 阻塞/唤醒原因
①请求系统服务
②启动某种操作
③新数据尚未到达
④无新工作可做 - 阻塞过程
①调用阻塞原语阻塞自己
②将PCB状态改为阻塞并加入阻塞队列
③转进程调度 - 唤醒过程
阻塞进程等待的事件发生,有关进程调用唤醒原语唤醒等待该事件的进程
3.进程挂起+激活
- 挂起过程
检查被挂起的程序进程
①活动就绪——>静止就绪
②活动阻塞——>静止阻塞
③正在执行——>调整进程调度 - 激活过程
①激活原语将进程从外存到内存
②检查进程状态:静止就绪——>活动就绪;静止阻塞——>活动阻塞
2.4 进程同步
**主要任务:**基于并发实现结果的可再现性
1. 进程间制约关系
- 间接相互制约关系:源于资源共享
- 直接相互制约关系:源于进程合作
2. 临界资源+临界区
- 临界区:访问临界资源的代码
- 临界资源:所以的变量都是临界资源,一次仅允许一个进程访问的资源
系统执行的是高级语言所对应的机器语言∴对于counter语句的执行,可能会执行一部分P语句,一部分V语句,导致最终结果不可再现
- 进程互斥:两进程不能同时访问同一临界资源的临界区
- 进程同步互斥表示进程间的协调与竞争
3.同步机制遵循的规则
- 空闲让进:CPU空闲情况下使用
- 忙则等待:CPU繁忙则等待其空闲
- 有限等待:每个进程有其等待的上限
- 让权等待:等待时将CPU让出
4. 信号量机制
信号量解决进程间的同步互斥问题,大于0代表可用资源的数目;信号量小于0则其绝对值表示因请求资源而被塞的进程数目 mutex=0表示有一个进程进入临界区,另一个不确定
- 整型信号量
- 整型量,除初始化外,仅能通过两个原子操作来访问
- 原子操作:- P操作:wait(S){S–;}申请资源 -V操作:signal(S){S++;}【要执行都执行 要不执行都不执行】
- 用信号量机制实现互斥模式【未遵循让权等待】
//P操作:
while(S<=0)do no-op{S--;}
//V操作
S++;
Semaphore mutex=1;//等于1表示临界资源,不能同时进入临界区
begin
parbegin//与parend括起来的程序并发执行
process1:
begin
repeat//while(1)
wait(mutex);//进入区
critical section
signal(mutex);//退出区
remainder section;//剩余区
until false
end
process2:
begin
repeat//while(1)
wait(mutex);//进入区
critical section
signal(mutex);//退出区
remainder section;//剩余区
until false
end
parend
end;
代码分析:
执行完ProcessⅠ的P原语后,mutex变为0,接着下一个时间片执行ProcessⅡ的P原语 由于mutex=0<=0 ∴do-noop 且空占时间片不执行操作;紧接着执行ProcessⅠ的临界资源,直到执行ProcessⅠ的V原语,才使得mutex值变为1,此时Process2操作才可以开始执行,保证了同一临界资源不能进入同一临界区
- 记录型信号量
- 数据结构
typedef struct{
int value;
struct process_contral_block*list;
}semaphore;
- 记录型信号量PV原语
//P原语
wait(semaphore*s)
{
s->value--;
if(s-value<0)
block(s->list);
}
2.5 经典进程同步问题
- 生产者消费者模型
- 哲学家进餐模型
- 读者写者模型
2.6 进程通信
不重要!期末考试完补充
2.7 线程
- 定义:线程是进程的一条执行路径,包含独立堆栈和CPU寄存状态,每个线程共享其所附属进程的所有资源
- 线程引入目的:使多个进程能并发执行,提高资源利用率和系统吞吐量,减少时空开销
- 线程特点:
①并发
②独立:独立调度和分派的单位
③轻实体型
④共享进程资源 - 进程与线程的关系:线程是属于进程的,线程运行在进程的空间内,同一进程所产生的线程共享同一物理内存空间,当进程退出时所产生的线程都会被强制退出且删除
- 进程与线程的区别:
①一个线程执行完并不释放资源,它不拥有资源,多线程构成进程,进程拥有资源,执行完释放资源
②终止资源:线程无需回收资源,所有线程执行完即进程结束需要回收资源
③进程、线程的同步都不仅限于信号量机制,还有互斥锁,条件变量