[操作系统系列]进程同步与通信

操作系统的进程同步与通信

并发的多个进程之间有些进程是独立的,有些可能存在和其他好=进程有着间接或直接的关系:竞争资源、协作执行、传递信息,共享数据。要使得这些并发进程都能正确执行,操作系统必须提供一定的机制加以控制和管理。

进程之间的协作关系包括:互斥,同步,通信。
【互斥】指多个进程之间不能同时使用一个资源,当某个资源被某个进程占用时,其他进程必须等待。
【同步】指多个进程中发生的事件存在着某种时序关系,一些程序的执行必须先于另一个程序。
【通信】指多个进程之间传递一定量的信息。

同步与互斥:
毫无节制的进程并发会导致进程的不可再现性,进程同步与互斥的主要任务是使并发执行的诸进程之间能有效地共享资源 和相互合作,从而使程序的执行具有可再现性。
[临界资源]某种共享资源但在某段时间内仅管程最大的问题是对编译器的依赖。因为我们需要编译器将需要的同步原语加 在管程的开始和结尾允许一个进程使用的资源
[临界区]每个进程中访问临界资源的那段代码
临界区进入准则:
空闲让进:当无进程处于临界区时,临界资源处于空闲状态。此时允许进程进入临界区。
忙则等待:当已有进程进入临界区时,临界资源正在被访问,其他想进入临界区的进程必须待。
有限等待:对于要求访问临界资源的进程,应保证有机会在有效的时间内进入,以免进入“死等”状态。
让权等待: 当进程不能进入临界区时,应立即释放处理机,以免进程进入“忙等”。
在这里插入图片描述
信号量和PV操作:
信号量的定义:
s.value的初值表示系统中某种资源的数目(0表示无资源可用)。
s.value <0时,|s.value|表示等待该资源的进程数。
P(s) 操作表示要申请一个资源。
V(s) 操作表示要释放一个资源。
在这里插入图片描述
信号量的PV操作:
P原语执行的操作用wait(s)函数表示
P操作表示申请一个资源,故资源数s.value要减1(先减再分配)
资源数s.value<0,表示当前无空闲资源可分配(0表示该次操作分配了最后一个资源),提出申请的进程被阻塞,进入等待队列。|s.value|的值表示队列里的进程数。
在这里插入图片描述
V原语执行的操作用signal(s)函数表示
V操作表示释放一个资源,故资源数s.value要加1资源数s.value<=0(0表示刚刚释放的一个资源正好用于供这次唤醒的程序使用),表示当前有进程在等待该资源,要唤醒等待队列中的一个进程。
在这里插入图片描述
使用P、V操作,信号量的入口值非常重要,它关系着当前进程是否进入等待状态,或者是否唤醒一个等待进程。S的初值在定义信号量时确定,实现进程相互关系的效果取决于信号量的初值及进程调用的P、V操作顺序。
信号量s的使用:必须置一次且只能置一次初值,信号量的初值不能为负数应该大于等于0,只能执行P、V操作。

AND信号量:
将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。也即是,对若干个临 界或若干种资源的分配,采取原子操作方式:要么全部分配到进程,要么一个也不分配。(这种方法可用于防止死锁的发生)

管程:
一组共享资源的数据结构以及一组能为并发进程在其上执行的针对该资源的一组操作,这组操作能同步进程和改变管程中 的数据。信号量机制虽然既方便又有效地解决了进程同步问题,但要求访问临界资源的进程自备同步操作wait(s)、 signal(s),使得大量的同步操作分散在各个进程中,给进程的管理带来不便,并会因同步操作使用不当导致死锁。管程 的概念,把分散在各个进程中的与同一共享资源有关的同步处理从各进程中抽出并集中起来。
在这里插入图片描述
一次只有一个进程可以进入,其他的进入等待管程可用的队列。
进程在管程中可能会通过发送cwait(x)将自己挂在条件x上,进入等待队列。
为了区别等待的原因,引入条件变量condition在管程中执行的进程发现条件变量x发生变化,发送
csignal(x)通知想要的条件队列。
管程最大的问题是对编译器的依赖。因为我们需要编译器将需要的同步原语加在管程的开始和结尾。

进程通信
信号量作为进程同步和互斥工具是卓有成效,但作为通信工具就不够理想:一次只传一条消息,效率低;通信对用户不透 明。因此必须引入高级通信工具,解决进程之间大量的信息传递问题。
【进程通信的类型】
1)共享存储器系统:相互通信的进程向系统申请存储区域,通过对存储区域的读写进行大量信息传递。
2)消息传递系统:进程间的数据交换以消息为单位,通过一组消息通信原语实现信息的传递。
[直接通信方式]消息直接从发送方发送到接受方
[间接通信方式]消息发送到临时保存队列(信箱),接收方从信息接收消息。利用【发送原语和 接收原语】(例如crtl C+V)
3)管道通信:用共享文件(管道文件)实现通信双方的数据传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值