进程管理

来源:互联网 发布:java ee 7源码 编辑:程序博客网 时间:2024/05/21 10:51


转载自:http://metc.gdut.edu.cn/os/oscai/chapter2/pages/ch29.htm#%E5%9F%BA%E6%9C%AC%E6%96%B9%E6%B3%95



第二章

第八节

OS.GIF (2407 bytes)DIR02.GIF (873 bytes)HELP1.GIF (1502 bytes)

    先,介绍一个由于共享资源而产生死锁的例子:
    设系统有一台打印机(R1),一台读卡机(R2),两进程共享这两台设备。
        用信号量S1表示R1是否可用,初值为1;
        用信号量S2表示R2是否可用,初值为1;

    这两个进程在并发执行过程中,可能会发生
死锁。大家可以思考一下,如何修改AB进程
才不会发生死锁

 

Backhead.gif (2500 bytes)

 生死锁的原因和必要条件
    产生死锁的原因
        竞争系统资源

line2.gif (869 bytes)

    系统中只有一台打印机R1和一台读卡机R2,可供进
P1P2共享。R1R2已经分别分配给P1P2使用,当P1
P2在不释放资源R1R2而又同时分别申请R2R1如左
),形成环路,这样会产生死锁
        进程的推进顺序不当

ch2803.GIF (3605 bytes)

    在进程P1P2并发执行时,按照左图曲
线所示顺序推进时,两进程会顺利完
成,我们称这种推进顺序是合法的。
    若按曲线的顺序推进时,进入不安全
区D内,两进程再推进会产生死锁
    三角箭头.GIF (188 bytes)产生死锁的必要条件

互斥条件

进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。

请求和保持条件

当进程因请求资源而阻塞时,对已获得的资源保持不放。

不剥夺条件

进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。

环路等待条件

在发生死锁时,必然存在一个进程--资源的环形链。

 决死锁的基本方法
    预防死锁
        资源一次性分配:(破坏请求和保持条件
        可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件
        资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求
                                 资源,释放则相反(破坏环路等待条件
    避免死锁
        预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得    较满意的系统性能
        由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算
    资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等
    待。其中最具有代表性的避免死锁算法银行家算法
    检测死锁
        首先为每个进程和每个资源指定一个唯一的号码;
        然后建立资源分配表进程等待表,例如:
           资源分配表

资源号

占用进程号

1

P2

2

P4

3

P1

           进程等待表

进程号

等待资源号

P1

1

P2

2

P4

 
        检测算法:

    如上例,当进程P4
申请资源3时,检测算法
如下:

    解除死锁
        当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:
        LBLUEP2.GIF (906 bytes)剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态
        LBULEP.GIF (159 bytes)撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态
                     消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。

Backhead.gif (2500 bytes)

SPLIT.GIF (3216 bytes)

 本概念
    死锁:指多个进程因竞争共享资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再          向前推进。
 
    安全状态与不安全状态:安全状态指系统能按某种进程顺序来为每个进程分配其所需资源,直                           至最大需求,使每个进程都可顺利完成。若系统不存在这样一个序列,                           则称系统处于不安全状态。
 

Backhead.gif (2500 bytes)

SPLIT.GIF (3216 bytes)

 
      

                      

原创粉丝点击