您当前的位置:《操作系统原理》听课笔记:21
《操作系统原理》听课笔记:21

互斥和同步解决方法之三:

信号量方法

软件方法和硬件方法都存在忙等问题,浪费了处理机时间。

信号量方法能实现进程互斥与同步,而不必忙等。

用信号量实现互斥的基本原理

1、两个或多个进程可以通过传递信号进行合作,可以迫使进程在某个位置暂时停止执行(阻塞等待),知道它收到一个可以向前推进的信号(被唤醒)。

2、将实现信号灯作用的变量称为信号量,常定义为记录型变量S,其中一个域为整型,另一个域为队列,其元素为等待该信号量的阻塞进程(FIFO)。

定义对信号量的两个原子操作:wait(s)和signal(s)

wait(s):

s.count=s.count-1;

if   s.count<0

then begin

       进程阻塞;

      进程进入s.queue队列;

      end;

singal(s)

s.count=s.count+1;

if  s.count<=0

then   begin

         唤醒队首进程;

         将进程从s.queue阻塞队列中移除;

end;

Wait\Signal的应用:

1、进程进入临界区之前,首先执行wait(s)原语,若s.count<0,则进程调用阻塞原语,将自己阻塞,并插入到s.count队列排队。

2、阻塞进程不会占用处理机时间,不是忙等。直到某个从临界区退出的进程执行signal(s)原语唤醒它。

3、一旦其它某个进程执行了signal(s)原语中的s,count+1的操作后,发现s.count+1操作后,发现s.count<=0,即阻塞队列中还有阻塞进程,则调用唤醒原语,把阻塞队列中第一个进程改为就绪状态。

信号量的类型:互斥信号量、资源信号量。

互斥信号量初始化为1,用于申请或归还资源使用权。资源信号量用于申请或归还资源,可以初始化为大于1的正常数,表示系统中某类资源的可用个数。

 

收藏状态
收藏本课程的同学
相关课程