操作系统知识整理4:进程通信,信号量,死锁

一、基本概念

1.同步与互斥

   同步:两个或两个以上进程要协作完成一个任务。

   互斥:两个或两个以上进程竞争一个资源。

2.临界段

   临界资源:一段时间内只允许一个进程访问的资源。

   临界段:进程访问临界资源的程序段

二、信号量

1.操作

(1)初始化操作,信号量能初始化为非负的值。

(2)semWait操作,能减小信号量的值,如结果值为负,执行semWait操作的进程就被封锁。

(3)semSignal操作,能增加信号量的值,如果结果值非正,那么原先因执行semWait操作而阻塞的进程被解除阻塞。

2.信号量实现互斥

       semWait(s)

       临界段

       semSignal(s)

3.信号量实现同步

       由进程A semWait,进程BsemSignal

4.生产消费者问题

       buffers:缓冲区的大小

       mutex:互斥信号量

       product:有无产品

       生产者:

              while(){

                     produce new product;

                     semWait(buffers);

                     semWait(mutex);

                     put product into buffers;

                     semSignal(mutex);

                     semSignal(products);

}

消费者:

       while(){

              semWait(products);

                     semWait(mutex);

              getproduct from buffers;

                     semSignal(mutex);

              semSignal(buffers);

              consumeproduct;

}

5.读者/写者问题

读者进程之间不需要互斥,但写进程必须与其他所有写进程和读进程互斥。

信号量:mutex(互斥信号量),wrt,count(计数器)

写进程:

       while(){         

              semWait(wrt);

              write information;

              semSignal(wrt);

}

读进程:

       while(){

              semWait(mutex);

              if (++count == 1)

                     semWait(wrt);

              semWait(mutex)

              read information;

              semSignal(mutex);

              if ( --count == 0)

                     semSignal(wrt);

              semSignal(mutex);

}

三、进程间数据通信

1.消息通信

       一个进程要向另一个进程发送消息,先要向系统申请一个缓冲区,填写了消息正文和其他有关消息的特征、控制信息后,通过消息通信机构将该消息送到接收其他消息队列中。

       接收进程在一个适当时机从消息队列中移出一个消息,读取所有的信息后,再释放消息缓冲区。

2.共享存储区

3.管道

四、死锁

1.死锁产生原因

       几个进程各自占了对方要的资源

2.产生死锁的条件

(1)互斥执行

       每次只能允许一个进程占有和使用一个资源,其他申请该资源的进程被阻塞。

(2)保持并等待

       当进程等待分配给它新的资源时,保持占有已分配的资源。

(3)不可剥夺

       不能强迫移去进程占有的未使用完的资源。

(4)循环等待

       存在一个闭合的进程──资源链,以致每一个进程至少占有链中下一个进程所需要的一个资源。

3.死锁的预防

(1)互斥执行

       无法预防。

(2)保持并等待

       进程一次申请它所有需要的资源。

(3)不可剥夺

       如果进程不能获得进一步的资源,要求其释放原先占有的资源。

(4)循环等待

       资源排序,如果一个进程已经占有了资源A,那么它接下来只能申请排在A后面的资源。

       此外还有银行家算法用于死锁避免,Coffman算法用于死锁检测。

4.死锁解除

(1)强迫撤销所有死锁进程

(2)逐个撤销死锁进程

(3)相继剥夺进程所占资源

       

你可能感兴趣的:(操作系统)