操作系统--进程同步

1.进程同步的基本概念

进程同步是指多个相关进程在执行次序上进行协调,它的目的是使系统中诸进程之间能按照一定的规则(或时序),共享资源和相互合作,从而使程序的执行具有可再现性。用来实现同步的机制叫做同步机制。

例:对于混合运算1+2*3,假设系统产生两个进程,加法进程和乘法进程,要让计算结果正确,一定要让加法进程发生在乘法进程之后,但实际操作系统具有异步性,若不加以制约,加法进程发生在乘法进程之前是有可能的,因此要制定一定的机制去约束加法进程,让它在乘法进程完成之后才发生。

2.临界资源

虽然多个进程可以共享系统中的各种资源,但其中许多资源一次只能为一个进程所用,将一次仅允许一个进程使用的资源称为临界资源。例如:打印机等。

对临界资源的访问,必须互斥地进行,在每个进程中,访问临界资源的那段代码称为临界区。为了保证临界资源的正确使用,可将临界资源的访问划分为4个部分:

(1)进入区:为了进入临界区使用临界资源,在进入区要检查可否进入临界区,若能进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区。

(2)临界区:进程中访问临界资源的那段代码,又称临界段。

(3)退出区:将正在访问临界区的标志清除。

(4)剩余区:代码中的其余部分。

3.进程之间的制约关系

3.1同步

同步也叫直接制约关系,是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。

例如:输入进程A通过单缓冲区向进程B提供数据。当该缓冲区为空时,进程B不能获得所需数据而阻塞,一旦进程A将数据送入缓冲区,进程B就被唤醒。反之,当缓冲区满时,进程A被阻塞,仅当进程B取走缓冲数据时,才唤醒进程A

3.2互斥

互斥也称间接制约关系,当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源。

为禁止两个进程同时进入临界区,同步机制应遵循以下准则:

(1)空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区

(2)忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待

(3)有限等待:对请求访问的进程,应保证能在有限时间内进入临界区

(4)让权等待:当进程不能进入临界区时,应立即释放处理器,防止进程忙等待

4.信号量

信号量机制用来解决互斥与同步问题,它只能被两个标准原语wait(S)【表示等待某种资源直到可用,资源暂时不可用,则进程进入阻塞态,执行P操作的进程处于运行态】和signal(S)【用V操作唤醒一个等待进程时,被唤醒进程变为就绪态,只有就绪进程能获得处理器资源,被唤醒的进程并不能直接转换为运行态】访问,也可记为"P操作"和"V操作"(信号量其实就是一个变量,可以用一个信号量来表示系统中某种资源的数量)

原语是指完成某种功能且不被分割、不被中断执行的操作序列。

4.1整型信号量

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

Wait操作中,只要信号量S<=0,就会不断地测试。因此,该机制并未遵循"让权等待"的准则,而是使进程处于"忙等"的状态

4.2记录信号量

记录信号量是不存在"忙等"现象的进程同步机制。除需要一个用于代表资源数目的整型信号量value外,再增加一个进程列表L,用于链接所有等待该资源的进程。

4.3利用信号量实现同步

与互斥信号量初值一般为1不同,用P、V操作实现进程同步,信号量的初值应根据具体情况来确定。若期望的消息尚未产生,则对应的初值应为0,若期望的消息已存在,则信号量的初值应设为一个非0的正整数。

互斥信号量(mutex)

如果信号量的值大于0,表示资源可用,其数值表示可用的资源数量(对于互斥,通常为1,表示只有一个资源实例)。

如果信号量的值等于0,表示资源已被占用,但没有线程在等待。

如果信号量的值小于0,表示资源已被占用,并且有线程在等待,其绝对值表示等待的线程数。

相关推荐
zzzzzz31017 小时前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode17 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz4 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化