操作系统(三)| 进程同步详解(主要任务、制约关系、临界资源、临界区、同步机制遵循规则、信号量机制、信号量的应用)
生活随笔
收集整理的这篇文章主要介绍了
操作系统(三)| 进程同步详解(主要任务、制约关系、临界资源、临界区、同步机制遵循规则、信号量机制、信号量的应用)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
文章目录
- 进程的同步基本概念
- 进程同步的主要任务
- 进程间的制约关系
- 临界资源
- 临界区
- 同步机制应遵循的规则
- 信号量机制
- 整型信号量
- 记录型信号量 ❤❤❤
- AND型信号量
- 信号量的应用
- 实现进程互斥
- 实现前驱关系
- 利用记录型信号量实现同步
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。点击这里
进程的同步基本概念
进程同步的主要任务
使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
进程间的制约关系
-
由于资源共享造成的间接相互制约关系
-
由于进程合作造成的直接相互制约关系
临界资源
一次仅允许一个进程访问的资源叫做临界资源(互斥访问)
临界区
进程中访问临界资源的代码
设计流程:
- 检查临界资源是否可用
- 访问
- 将正在访问的标志恢复为未被访问的标志
同步机制应遵循的规则
- 空闲让进
- 忙则等待(临界资源占用需等待)
- 有限等待(等待时间有限)
- 让权等待(让出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--; // 代表可用资源数-1if (S->value<0)block(S->list); // 若减1后小于0,则证明资源缺乏,故阻塞进程 }signal(semphore *S){S->value++; // 代表可用资源数+1if(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 parbeginp1:beginrepeat......wait(full)print(x) # 默认将x打印完后销毁signal(empty)......untilendp2:beginrepeat......wait(empty);x:=处理结果 # x重新创建赋值signal(full);until false;end ......总结
以上是生活随笔为你收集整理的操作系统(三)| 进程同步详解(主要任务、制约关系、临界资源、临界区、同步机制遵循规则、信号量机制、信号量的应用)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 操作系统(二 )| 进程管理初探(前趋图
- 下一篇: 操作系统(四) | 经典进程的同步问题(