知识总览

在这里插入图片描述

为什么要引入信号量机制

为了更好的解决进程互斥与同步的问题

在这里插入图片描述

信号量机制

用户可以通过操作系统提供的一对原语信号量操作,从而方便的实现了进程互斥,进程同步

信号量:就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量

(原语是一种特殊的程序段,其执行只能一气呵成,不可被中断。原语是由关中断/开中断指实现的。软件解决方案的主要问题是由“进入区的各种操作无法一气呵成”,因此如果能把进入区、退出区的操作都用“原语”实现,使这些操作能“一气呵成”就能避免问题。)

一对原语:wait(S) 原语和 signal(S) 原语,可以理解为我们自己写的函数,其中的信号量S就是函数调用的时候传入的一个参数,常常简称为P,V操作,所以经常把wait(S) 原语和 signal(S) 原语,写为P(S),V(S)

整型信号量

用一个整数型变量作为信号量,用来描述系统中某种资源的数量

在这里插入图片描述

一个进程如果一直进不了临界区,他一直在wait区循环等待,一直占用处理机,处于盲等的状态

记录型信号量

整型信号量的缺陷是存在忙等,所以提出了记录型信号量

在这里插入图片描述

semaphore是一个结构体,value初始化为刚开始的资源数量,L等待队列初始化为NULL

block(S.L)是阻塞该进程,就不用占用处理机了

wakeup(S.L)是唤醒该进程,从阻塞态转变为就绪态,也就是当s.value++后还小于等于零,说明在阻塞队列中至少有一个进程,所以唤醒等待队列中的进程

在这里插入图片描述

image-20230504190559918

总结

在这里插入图片描述