操作系统知识点总结(第二章 进程的描述与控制)
基于计算机操作系统(第四版)
第二章 进程的描述与控制
- 程序顺序执行时的特征:顺序性、封闭性、可再现性
- “并发”:在多道环境下,系统具有了许多比单道环境下更复杂的情况,我们把多道环境下的程序设计叫做并发程序设计。
- 程序并发执行提高了系统的吞吐量和资源利用率
- 程序并发执行时的特征:间断性,失去封闭性,不可再现性
- 程序:在时间上严格有序的指令或语句序列,体现了某种算法,程序规定了计算机需做的操作的执行顺序。
特点:独占性、顺序性、可再现性 - 进程是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动。
进程和程序的区别:
程序 | 进程 |
---|---|
程序是指令的集合,是静态的概念 | 进程是程序在处理机上的一次执行的过程,是动态的概念 |
程序的存在是永久的。程序可以作为软件资料长期保存。 | 进程的存在是暂时的。进程是有生命周期的“一次运行活动”,诞生(建立)、死亡(撤销)。 |
进程=程序+数据+PCB,即进程是一个程序及其数据在处理机上顺序地执行时所发生的活动 | |
进程是一个独立的运行单位,能与其它进程并行活动。而程序则不是。 | |
进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位。 | |
一个程序可以作为多个进程的运行程序,一个进程也可以运行多个程序。 |
- 进程的三种基本状态:就绪状态、执行状态、阻塞状态
阻塞状态有时也称为等待状态或封锁状态。
被阻塞的进程必须经过就绪才能被重新调度。
-
为满足进程控制块对数据及操作的完整性要求以及增强管理的灵活性,通常在系统中又为进程引入了两种常见的状态:创建状态和终止状态。
-
进程控制块中的信息:
1.进程标识符
2.处理机状态
3.进程调度信息
4.进程控制信息 -
进程终止原因:
正常结束。
异常结束:①越界错;②保护错;③非法指令;④特权指令错;⑤运行超时;⑥等待超时;⑦算术运算错;⑧I/O故障。
外界干预:①操作员或操作系统干预;②父进程请求;③因父进程终止。 -
两种形式的制约关系:资源共享关系、相互合作关系。
-
同步:多个并发进程的相关进程在执行速度上的制约
-
临界资源:一次仅允许一个进程使用的资源
-
临界区:在每个进程中访问临界资源的那段代码称为临界区
-
同步机制应遵循的原则:空闲让进;忙则等待;有限等待;让权等待;多中择一。
-
硬件同步机制:1.进入临界区前执行“关中断”,离开临界区后执行“开中断”。
2.利用Test-and-Set指令。
3.利用swap指令。 -
利用swap指令缺点:
①未实现让权等待。
②可能“饥饿”(一个进程一直得不到资源)
③可能死锁
优点:
①适用于任意数目的进程
②简单、容易验证其正确性
★信号量机制
-
P原语 P(s)/wait(s)
申请使用临界资源时调用P原语
P操作一次,s-1 -
V原语 V(s)/signal(s)
释放临界资源,唤醒进程等待队列中的投一个进程
V操作一个,s+1 -
每次wait操作,意味着进程请求一个单位的该类资源,使系统中可供分配的该类资源数减少一个。遵循“让权等待”原则。每次signal操作表示执行进程释放一个单位资源,使系统中可供分配的该类资源数增加一个。
-
s≥0 有资源,当前进程可执行
s<0 无资源,绝对值为在等待进程的数量 -
注:①P、V操作必须成对出现。
②对每个程序的多个P操作,顺序不能颠倒,否则死锁。 -
AND型信号量:将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。
-
P、V操作的优点:简单、表达能力强(用P、V操作可解决任何同步互斥问题)
缺点:不够安全,P、V操作使用不当会出现死锁;遇到复杂同步互斥问题时实现复杂 -
互斥信号量mutex,公有信号量
-
当mutex=1时,表示两个进程皆未进入需要互斥的临界区;当mutex=0时,表示有一个进程进入临界区运行,另外一个必须等待,挂入阻塞队列;当mutex=-1时,表示有一个进程正在临界区运行,另外一个进程因等待而阻塞在信号量队列中,需要被当前已在临界区运行的进程退出时唤醒。
★★经典进程的同步问题
1. 生产者-消费者问题
若干进程通过一共享缓冲池(包含有限N个缓冲区)交换数据,生产者进程不断写入,消费者进程不断读出。
利用记录型信号量解决生产者-消费者问题:
- 互斥:任意时刻只能有一个进程可对共享缓冲池操作
同步:缓冲区不满生产者才能写入,缓冲区不空消费者才能读出 - ①每个程序中用于实现互斥的wait(mutex)和signal(mutex)必须成对地出现。
②对资源信号量empty和full的wait和signal操作,同样需要成对地出现,但它们分别处于不同的程序中。
③在每个程序中的多个wait操作顺序不能颠倒,否则可能引起进程死锁。
利用AND信号量解决:简洁、避免死锁的发生。
2.哲学家进餐问题
实现对筷子的互斥使用。
3.读者-写者问题
允许多个进程同时读一个共享对象。只要有一个Reader进程在读,便不允许Writer进程去写。
4.理发师睡觉问题
例题
线程
- 线程是进程内的一个相对独立的、可独立调度和指派的执行单元
- 线程控制块TCB