操作系统| 进程同步详解(主要任务制约关系临界资源临界区同步机制遵循规则信号量机制信号量的应用)
Posted 有理想、有本领、有担当的有志青年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统| 进程同步详解(主要任务制约关系临界资源临界区同步机制遵循规则信号量机制信号量的应用)相关的知识,希望对你有一定的参考价值。
文章目录
进程的同步基本概念
进程同步的主要任务
使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
进程间的制约关系
-
由于资源共享造成的间接相互制约关系
-
由于进程合作造成的直接相互制约关系
临界资源
一次仅允许一个进程访问的资源叫做临界资源(互斥访问)
临界区
进程中访问临界资源的代码
设计流程:
- 检查临界资源是否可用
- 访问
- 将正在访问的标志恢复为未被访问的标志
同步机制应遵循的规则
- 空闲让进
- 忙则等待(临界资源占用需等待)
- 有限等待(等待时间有限)
- 让权等待(让出CPU)
信号量机制
整型信号量
P操作 wait(S)
wait(S):
While (S<=0)
do no-op;# 会一直占CPU运行,不能做到让权等待
S--;
V操作 signal(S)
signal(S):
S++;
注意:P操作和V操作属于原子操作,不可被中断
记录型信号量 ❤❤❤
typedef struct
int value;
struct process_control_block *list
semphore;
wait(semaphore *S)
S->value--; // 代表可用资源数-1
if (S->value<0)
block(S->list); // 若减1后小于0,则证明资源缺乏,故阻塞进程
signal(semphore *S)
S->value++; // 代表可用资源数+1
if(S->value<=0)
wakeup(S->list); // 若加1后小于等于0,证明有阻塞的进程,故唤醒1个
AND型信号量
将进程需要的资源一次性分配,运行完后一次性释放
Swait(S1,S2,S3...) //同时满足所有信号量S
Ssignal(S1,S2,S3...) //同时释放所有信号量S
信号量的应用
实现进程互斥
为进程设置初始信号量 mutex = 1 ,将临界区置于wait(mutex)和signal(mutex)之间
实现前驱关系
设置共享信号量 S = 0,实现先P1,后P2
S = 0
P1:
语句1;
...
signal(S)
P2:
wait(S)
语句1;
...
利用记录型信号量实现同步
semaphore empty = 1;
semaphore full = 0;
begin
parbegin
p1:begin
repeat
......
wait(full)
print(x) # 默认将x打印完后销毁
signal(empty)
......
until
end
p2:begin
repeat
......
wait(empty);
x:=处理结果 # x重新创建赋值
signal(full);
until false;
end
......
以上是关于操作系统| 进程同步详解(主要任务制约关系临界资源临界区同步机制遵循规则信号量机制信号量的应用)的主要内容,如果未能解决你的问题,请参考以下文章