一、管程
1.管程是一种特殊的软件模块。包含:
A:局部于管程的共享数据结构说明。
B:对该数据结构进行操作的函数。
C:对A进行初始化的语句。
D:名称。
2.基本特征:
A:共享数据只能由管程的过程(函数)访问。
B:进程只能通过调用 过程(函数)访问共享数据。
C:每次仅允许一个进程在使用过程执行内部过程。
D:可在管程中设置条件变量及 等待/唤醒 操作解决同步问题。让一个进线程在条件变量上等待。
二、死锁
1.死锁:进程等待其他进程占有资源,导致各进程(两个及两个以上)阻塞。
条件:互斥占用;不可剥夺;请求和保持;循环等待。
2.饥饿:长期无法获得资源,使进程无法推进。
条件:不可夺资源的竞争;信号量使用不当;进程推进顺序非法。
3.死循环:无法跳出循环。
三、预防死锁
1,破坏互斥条件:采用SPOOLing技术将独占设备在逻辑上该为共享设备;但很多时候无法破坏互斥性。
2, 破坏不剥夺条件:进程资源得不到满足,释放保持的所有资源;操作体统强行剥夺。
3,破坏请求和保持条件:采用静态分配,一次性请求完所有资源。
4,破坏循环等待:采用顺序资源分配法,给定资源编号,按递增顺序请求。
四、避免死锁
1,安全序列:系统按序列分配资源,每个进程可顺利完成,找出安全序列,则为安全状态。
2,处于安全状态,一定不会死锁,不进入安全状态,可能发生死锁。
3,银行家算法:
五大矩阵:最大需求Max;资源分配Allocation;进程需求Need=Max-Allocation;可用资源Avaliable;当前需求Requerst
步骤:检查最大需求,检查可用资源是否满足需求,分配资源,检查是否进入不安全状态。
五、死锁的检测与解除
1,检测:在资源分配图中,找出既不阻塞、又不是孤点的进程,消去请求边和分配边,使之成为孤立的节点。
释放后的资源可唤醒某些等待而阻塞的进程,若消去后能去出所有边,则图是可完全简化的。
2,解除:
A:资源剥夺,挂起死锁进程,抢占进程持有的资源
B:终止进程,终止死锁进程,释放资源
C:进程回退:系统设置还原点,记录进程历史信息,回退到死锁前的状态。