操作系统学习笔记(十九)~信号量在互斥问题和同步问题中的应用

一、什么是临界区?对临界区的访问应该遵循什么准则?

        临界区:访问临界资源的那段代码。

        准则:

  • 互斥,如果有进程在某个临界区执行,其他进程将被排斥在临界区外,有相同临界资源的临界区都需要互斥,无相同临界资源的临界区不需要互斥。
  • 有空让进,临界区内无进程执行,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效利用临界资源。
  • 有限等待,每个进程进入临界区前的等待时间必须有限,以免陷入“死等”状态。

二、请谈谈同步信号量的值有什么含义。

        同步信号量的值大于0时,表示这一资源没有被使用的数量,或者释放的数量,可分配请求使用这个资源的进程。
        同步信号量的值等于0时,表示这一资源分配完毕,或者没有被释放,如果现在有进程申请这个资源,必须等待。
        同步信号量的值小于0时,表示请求这一资源没有得到而正在等待这一资源的数目。

三、有四个进程S1、R1、R2和R3,其中S1向缓冲区BUFF发送消息,R1、R2和R3从缓冲区中接收消息。发送和接收的规则如下:

  1. 缓冲区BUFF任何时候只能存放1个消息;
  2. R1、R2和R3每次可取S1存放在缓冲区中的消息;
  3. 每个存放在缓冲区中的消息必须被R1、R2和R3均接收后才能清除。

请用信号量机制来实现这4个进程间的同步。

信号量初值S1=1,S2=0,S3=0,S4=0,MUTEX=1;
int Count=0;
S1                        R1                  R2                      R3 
repeat                    repeat               repeat                   repeat 
P(S1)                    P(S2)                P(S3)                    P(S4)
Send message           get message          get message              get message
P(MUTEX)               P(MUTEX)            P(MUTEX)               P(MUTEX)
Count=0                 Count=Count+1       Count=Count+1           Count=Count+1
V(S2)                    if(Count=3)           if(Count=3)               if(Count=3)
V(S3)                    V(S1)                V(S1)                    V(S1)
V(S4)                    V(MUTEX)           V(MUTEX)               V(MUTEX)
V(MUTEX)             until false             until false                 until false
until false   

四、桌上有一个空的水果盘,且盘中一次只能放一个水果。爸爸专向盘中放苹果,妈妈专向盘中放桔子,一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子中的苹果。固定每次当盘子空时爸爸或妈妈可向盘中放一个水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出。请用PV操作实现爸爸、妈妈、儿子和女儿四个进程的同步。

信号量初值apple=0,orange=0,plate=1

Dad(){
 while(1){
  准备苹果;
  P(plate);
  放苹果;
  V(apple);
  }
 }
 
Daughter(){
 while(1){
  P(apple);
  拿苹果;
  V(plate);
  吃苹果;
  }
 }
 
 Mom){
 while(1){
  准备桔子;
  P(plate);
  放桔子;
  V(orange);
  }
 }
 
 Son(){
 while(1){
  P(orange);
  拿桔子;
  V(plate);
  吃桔子;
 }
}
发布了218 篇原创文章 · 获赞 523 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/weixin_44225182/article/details/105584712