1、进程间的制约关系
在计算机系统中,由于资源有限,又导致了进程之间的资源竞争和共享。
间接制约
处于并发状态的多个进程由于要共享某个独享型资源二产生的执行速度的制约。
直接制约
处于并发状态的多个进程要完成同一个任务,由于各个进程之间的协同合作而产生的制约。|
产生制约的原因
① 资源共享 :有进程甲、乙、丙都需要打印机,而系统只有一台,由此产生间接制约。
② 进程合作:有一计算任务,(a+b)×(c+d),其中甲完成a+b,乙完成c+d,丙完成甲×乙,由此产生直接制约
2、临界资源与临界区
临界资源
一次仅允许一个进程使用的资源。
临界资源的特征:① 唯一性 ② 排他性
临界区
访问临界资源的程序段或不允许多个并发进程交叉执行的一段程序。
临界区设计原则:
- 每次至多允许一个进程位于临界区;
- 若有多个进程请求进入临界区,应在有限时间内只选择一个进程进入临界区。
- 进程在临界区内只能停留有限的时间。
临界资源的访问过程
1)进入区。在进入区要检查可否进入临界区,如果可以进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区。
2)临界区。进程中正在访问临界资源的那段代码,又称临界段。
3)退出区。将正在访问临界区的标志清除。
4)剩余区。代码中的其余部分。
3、互斥与同步
同步:称直接制约关系,是指完成某种任务而建立的两个或多个进程,这些进程因为要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。
进程间的直接制约关系就是源于它们之间的相互合作。
互斥:称间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源。
信号量与P、V原语
信号量:在操作系统中代表可用资源的数目,是一个整形变量,其值只能通过P、v原语改变。
分类:
1)公用信号量:初值为1,用于进程互斥,值域为~,n为需互斥的进程的个数;
2)私用信号量:初值为0或正整数n,用于进程同步,值域范围较公用信号量宽。
例:有两个进程都需要的一个公共缓冲区,数据发送完,CPU立马提取数据,试用信号量描述两个进程之间的并发过程。
①分析:
是直接制约还是间接制约(竞争和合作)
②制作信号量
进程的通信
进程的通信是指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。
高级通信主要有以下三个类:
- 共享存储:通信的进程之间存在一块可直接访问的共享空间。
共享存储分为两类:
低级方式的共享是基于数据结构的共享;
高级方式则是基于存储区的共享。
- 消息传递:消息传递系统中,进程利用操作系统提供的消息传递方法(发送原语,接收原语)进行数据交换。
直接通信方式:发送进程直接把消息发送给接收进程,并将它挂在接受进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。
间接通信方式:发送进程把消息发送到某个中间实体中,接受进程从中间实体中取得信息。这种中间实体一般称为信箱,这种通信方式又称为信箱通信方式。(例如电子邮件系统)
- 管道通信:为了协调双方的通信,管道机制必须提供以下三方面的协调能力:互斥、同步和确定对方的存在。在Linux中,管道是一种使用非常频繁的通信机制,管道通信可以克服使用文件进行通信的两个问题:
1)限制管道的大小。实际上,管道是一个固定大小的缓冲区。Linux中,该缓冲区的大小为4KB。当管道被写满时,对管道的write()调用将默认地被阻塞,等待某些数据被读取,以便腾出足够的空间供write()调用写。
2)读进程也可能比写进程快。当所有当前进程数据已被读取时,管道变空。这种情况发生时,一个随后的read()调用将默认地被阻塞,等待某些数据被写入,这解决了read()调用返回文件结束的问题。
管道只能采取半双工通信,即某一时刻只能单向传输。要实现父子进程双方互动通信,需要定义两个管道。
3、死锁
死锁是指计算机系统或进程所处的一种状态,即两个或多个进程无限期地等待永远不会发生的条件。
死锁的起因
死锁的起因是并发进程的资源竞争。
根本原因:系统提供的资源不足。
其次原因:程序推进不合理
死锁的四个必要条件
(1)互斥条件。
(2)不剥夺条件。
(3)请求和保持条件。
(4)环路等待条件。
解决死锁的策略
1.利用假脱机技术(SPOOLing技术),变独享资源为共享资源;
2.采用可剥夺的资源使用方式;
3.采用资源的预先全部分配方式;
4.采用有控资源分配方法。
死锁的预防
1、资源预分配法
每个用户向系统提交作业时,需一次性说明所需要的资源;并且作业调度程序只能在满足作业所需的全部资源的前提下才能将它投入运行。当资源一旦分配给该作业后,在其整个运行期间这些资源为它独占。
资源分配法的缺点
1、用户在作业运行前可能不能提出该作业运行所需的全部资源;
2、资源利用率很低;
3、作业等待时间较长;
4、系统吞吐量很低;
2、有序资源分配法
该方法给系统中所有资源给定一个唯一的编号,所有的分配请求必须以上升的次序进行,系统要求每个进程:
1)对它所必须使用的而且属于同一类的所有资源,必须一次申请完;
2)在申请不同类的资源时,必须按各类资源的编号依次请求。
3、银行家算法
该算法在有进程提出资源分配请求时,首先检查申请者对各类资源的最大需求量,如果系统现存的各类资源可以满足当前它对各类资源的最大需求量时,就满足它的请求。
即:仅当申请者可以在一定时间内无条件地归还它所申请的全部资源时,才能将资源分配给它。
银行家算法的数据结构
可用资源向量Available
最大需求矩阵Max
分配矩阵Allocation
需求矩阵Need
死锁的解除
(1)资源剥夺法。
- 1)还原算法。即恢复计算结果和状态。
- 2)建立检查点主要是用来恢复分配前的状态。
(2)撤消进程法。
- 1)程序的优先数,即被撤消进程的优先数。
- 2)作业类的外部代价
- 3)运行代价,即重新启动它并运行到当前撤消点所需要的代价。
网友评论