操作系统 - 同步、通信与死锁

2018-03-09  本文已影响0人  CandyTong_

并发进程

与时间有关的错误

进程中基本关系

进程互斥关系是一种特殊的进程同步关系

临界区

并发进程中与共享变量有关的程序段

信号量与PV操作

一般信号量

设s为一个记录型数据结构,一个分量为整型量value,另一个为信号量队列queue

P(s)

将信号量s减1,若结果 <0,则执行P操作的进程被阻塞

V(s)

将信号量s加1,若结果 ≤0,则唤醒该信号量等待list中的一个进程

typedef struct semaphore {
    int value;             /*信号量值*/
    struct pcb *list;    /*信号量队列指针*/
 }; 
void P(semaphore &s) {
     s.value--;            
     if(s.value<0)      // s.value--前小于或等于0     
         sleep(s.list);      
}                     
void V(semaphore &s) {
    s.value++;            
    if(s.value<=0)      // s.value++ 前小于0
        wakeup(s.list);        
}                      

二值信号量

信号量的value只能取值0,1

信号量实现互斥

semaphore mutex;
mutex = 1;
cobegin
    process Pi(){
        P(mutex);
        /* 临界区 */
        V(mutex);
    }
coend

信号量例子

自己看书

进程通信(IPC)

内存进程中,大多数都是无关的(互不干扰),只有少数有关

通信方式(机制)

死锁

死锁防止

产生条件

死锁防止策略

破坏产生条件中的一个或多个

死锁避免

动态地确定是否分配资源给提出请求的进程,如果一个资源分配会导致系统下一步死锁,便拒绝本次分配

死锁防止跟死锁避免的区别

银行家算法

进程-资源分配图

无环——无死锁
有环——可能死锁


image.png

资源指向已分配的进程(已经分配了)
进程箭头指向请求的资源(还没请求到)

死锁的检测算法

死锁的恢复方法

上一篇 下一篇

猜你喜欢

热点阅读