临界资源
把 一个时间段内只允许一个进程使用 的资源称为临界资源。
如:许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。
临界区
访问临界资源的那段代码
进程的互斥
进程 并发 执行 时,需要访问 临界资源,这些进程是 互斥的
如:多个进程并行时,需要使用 打印机,像 打印机 这类 物理设备,同一时间段内 只允许一个进程访问。那这些进程就是互斥的
互斥访问过程
当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须 等待。
当前访问临界资源的进程访问结束,释放 该资源之后,另一个进程才能去访问临界资源。
进程的同步
进程 并发 执行 时,有速度上的差异,在一定情况下停下等待,不存在资源是否单独或共享的问题
用于 生产者-消费者 模式,如:食堂出餐速度慢,学生打饭多,学生需要等待食堂出餐,这两个进程是同步关系
信号量
是操作系统用来解决 进程并发 中的 互斥 和 同步 问题的一种方法
信号量一般用 S 表示,是一个整数变量
当 S>=0 表示 资源可用数
当 S<0 则其绝对值表示 排队进程数
PV操作
P操作:申请资源
V操作:表示释放一个资源
进程互斥-PV操作
提示:S表示信号量
当进程执行时,先执行 P操作,申请资源:
- 执行
S=S-1 - 若
S>=0,S表示资源 可用数量,说明资源 够用,进程继续执行; - 若
S<0,S表示 排队进程数,说明资源 不够用,将该进程放入阻塞队列
当该进程执行结束后,再执行 V操作,释放资源:
- 执行
S=S+1 - 若
S>0,S表示资源 可用数量,没有进程排队; - 若
S<=0,S表示 排队进程数,从阻塞队列中取出进程,告诉该进程可以执行
总结
信号量初值:表示 资源的数量,一般 非0
先执行 P操作,申请资源
再执行 V操作,释放资源
进程同步-PV操作
S1 表示市场的数量,数量是 1S2 表示产品数量,数量是 0
如果生产者先执行
- 先执行
P(S1)操作后,S1 是 0 - 生成产品,并放入到 缓冲区(市场)后,执行
V(S2),通过释放产品操作让S2的数量加1
然后,消费者执行
先执行
P(S2),由于S2 非 0(上面执行加1),执行后,S2>=0,会继续执行从缓冲区取商品后,执行
V(S1),通过释放操作市场,让S1的数量加1,表示市场可被下一个进程使用
如果消费者先执行
- 先执行
P(S2),由于S2 初始值 0,执行后,S2是-1,该进程会放入阻塞队列中
然后,生产者执行
- 先执行
P(S1)操作后,S1 是 0 - 生成产品,并放入到 缓冲区(市场)后,执行
V(S2),通过释放产品操作让S2的数量加1 - 唤醒阻塞队列中的进程
最后,消费者执行
从缓冲区取商品后,执行 V(S1),通过释放操作 市场,让 S1的数量加1,表示 市场 可被下一个进程使用
总结
信号量初值:一般是 共享资源的数量,通常 为0
先执行 V操作,释放资源,目的是让可用资源 数量+1
再执行 P操作,申请资源
题1
思考:2台打印机3个进程要互斥使用打印机。模拟整个PV过程,信号量S的初值为多少?取值范围是多少?
初值:资源数量,即 S = 2
进程1访问打印机时:S = 2 - 1 = 1
进程2访问打印机时:S = 1 - 1 = 0
进程3访问打印机时:S = 0 - 1 = -1
题2
假设铁路自动售票系统有n个售票终端,该系统为每个售票终端创建一个进程Pi(i=1,2,…,n)管理车票销售过程。假设Tj(j=1,2,…,m)单元存放某日某趟车的车票剩余票数,Temp为Pi进程的临时工作单元,x为某用户的购票张数。Pi进程的工作
流程如下图所示,用P操作和V操作实现进程间的同步与互斤。
初始化时系统应将信号量S赋值为()
图中(a)、(b)和(c)处应分别填入()。
A、n-1B、0C、1D、2
A、V(S)、P(S)和P(S)B、P(S)、P(S)和V(S)
C、V(S)、V(S)和P(S)D、P(S)、V(S)和V(S)
参考:
https://blog.csdn.net/m0_48241022/article/details/142315009


