操作系统--进程同步

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,表示资源已被占用,并且有线程在等待,其绝对值表示等待的线程数。

相关推荐
神梦流1 小时前
GE 引擎的非标准数据流处理:稀疏张量与自定义算子在图优化中的语义保持
linux·运维·服务器
兜兜转转了多少年1 小时前
从脚本到系统:2026 年 AI 代理驱动的 Shell 自动化
运维·人工智能·自动化
Lsir10110_2 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
郝学胜-神的一滴2 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
Doro再努力2 小时前
【Linux操作系统12】Git版本控制与GDB调试:从入门到实践
linux·运维·服务器·git·vim
全栈工程师修炼指南2 小时前
Nginx | stream content 阶段:UDP 协议四层反向代理浅析与实践
运维·网络·网络协议·nginx·udp
Lsir10110_3 小时前
【Linux】进程信号(上半)
linux·运维·服务器
开开心心就好3 小时前
发票合并打印工具,多页布局设置实时预览
linux·运维·服务器·windows·pdf·harmonyos·1024程序员节
火车叼位3 小时前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
css趣多多4 小时前
add组件增删改的表单处理
java·服务器·前端