操作系统(四)并发和同步

  • 进程的同步和互斥
  • 信号量
  • 管程
  • 进程的通信

1.进程的相互作用
1.1 相关进程与无关进程
并发进程相互之间可能没有关系,也可能存在某种关系,如果进程间彼此毫无关系,互不影响,这种情况不会对系统产生任何影响,通常不是所要研究的对象。如果进程之间相互影响,彼此相关,那么就需要进行合理的控制和协调才能正确执行。进程之间的关系可以分为:进程互斥进程同步
进程互斥:系统中的某些进程需要访问共同的资源,即当一个进程访问共享资源的时候,其他访问该资源的进程必须等待,当这个进程使用完了之后,其他进程才能使用。这个时候就要求进程互斥地访问共享资源。
进程同步:系统中的某些进程之间存在相互作用的关系,即一个进程执行完了以后,另一个进程才开始,否则,另一个进程不能开始,这是就要保证相互合作的进程在执行次序上要同步。

 
 
 

2.进程互斥
解决办法有两种:
第一种是由竞争双方平等协商
第二种是引入进程管理者
资源共享的程度分为三个层次:互斥,死锁,饥饿

2.1临界资源的概念
在系统中有许多硬件或者是软件资源,例如打印机,公共变量等,这些资源在一段时间内只允许一个进程访问或者使用,这种资源称为临界资源。
临界资源的访问过程:进入区,临界区,退出区,剩余区

2.2进程同步机制应遵循的原则
空闲让进。当无进程处于临界区时,临界资源处于空闲状态,可以允许一个请求进入临界区的进程进入临界区,有效地使用临界区。
忙则等待。当已有进程进入临界区时,由于临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证进程互斥地使用临界资源。
有限等待。对要求访问临界资源的进程,应保证该进程在有效的时间内进入临界区,以免陷入“死等”状态。
让权等待。当进程不能进入临界区时,应立即释放处理器,以免陷入盲等。

进程互斥的软件实现:
1.单标志算法
2.双标志,先检查算法
3.双标志,后检查算法
4.先修改,后检查,后修改者等待算法
 
 
 
3.信号量
1965年荷兰学者Dijkstra提出的信号量机制是一种很有效的进程同步工具,得到了广泛的使用,这里主要了解的是经常使用的信号量,整型信号量。
进程互斥的硬件方法:
1.TS指令
2.Swap指令
3.信号量:最经常使用的信号量就是——整型信号量
对信号量的操作:
对于整型信号量,仅能通过两个标准的原语操作来访问,这两个操作被称为P操作,V操作,也合称为PV操作,其中P操作在进入临界区前执行,V操作在退出临界区后执行。

注意:P操作表示申请一个资源,V操作代表释放一个资源。
 
 
 

4.经典的进程同步问题
4.1简单生产者——消费者问题
生产者、缓冲区、消费者
生产者生产一个产品放入缓冲区,消费者一次只能从缓冲区拿出一个产品。

利用PV操作实现进程同步的方法:
使用PV操作的规则
(1)分清哪些是互斥问题,那些是同步问题。
(2)对于互斥问题要设置互斥信号量,互斥信号量的个人只与临济资源的种类有关。
(3)对于同步问题要设置同步信号量,通常同步信号量的个数与参与同步的进程种类有关。
(4)在每个进程中用于实现互斥的PV操作必须成对出现。在某个进程中如果同时存在互斥与同步的P操作,其顺序不能颠倒。

同步,互斥问题的解题步骤:
确定流程,包括进程的数量,进程的工作内容,可以用流程图来描述。
确定同步关系。根据使用的临界资源,还是处理的前后关系,来确定互斥和同步。然后确定信号量的个数,含义,以及对信号量的PV操作。

哲学家就餐问题
有4位哲学家围着一个圆桌在讨论问题和进餐,在讨论时每人手中什么都不拿,当需要进餐时,每人需要用刀和叉各一把。共有两把刀和两把叉,每把刀和叉供相邻的两个人使用。

如果PV操作的信号量S初值为4,则现在S=-1,表示有多少个进程在等待?
信号量的值有三种:大于0,小于0,等于0。大于0表示当前拥有的这种资源的数目等于0表示当前资源没有且没有因为需要该资源而处于等待队列的进程小于0表示当前因为申请该资源而得不到满足的处于等待队列的个数

这里S=-1,表示有一个进程在等待。

用V操作可以唤醒一个进程,被唤醒进程的状态变为就绪状态。

设有n个进程共有一个相同的程序段(临界区),如果每次最多允许m个进程(m<n)同时进入临界区。则信号量的初始值为m。

在执行V操作的时候,当信号量的值小于等于0,应释放一个等待信号量的进程。

操作系统中利用信号量和PV操作,可以实现进程的互斥和同步。

 
 
 
5.管程
管程的组成,四部分:管程名称共享数据的说明对该数据进行操作的一组过程对共享数据设置初始值的语句

进程或者线程的阻塞和唤醒,可以通过管程的wait和signal原语操作来巧妙的实现。
wait原语
signal原语

管程的三个特征:
(1)模块化:一个管程是一个基本的程序单位,可以单独编译。
(2)抽象数据类型
(3)信息隐蔽

 
 
 
6.进程通信
进程通信是指进程间的信息交换。根据进程通信的机制不同将进程通信分为低级通信,不能承担进程间大量信息的交换任务,因此引入了新的通信原语,解决了大量信息交换问题。
用户直接利用操作系统提供的一组通信命令,高效地传送大量数据,称为高级通信,也就是管道通信。
进程之间的通信方式:
(1)共享内存
(2)消息机制
(3)通过共享文件

7.共享内存
在相互通信的进程之间设置一个公共的内存区,一组进程向该公共内存中写,另一组进程从内存中读,通过这种方式实现两个进程间的信息交换。

8.消息机制
在消息机制中,进程间的数据交换是以信息为单位进行的。用户直接利用系统中提供的一组通信命令(原语)进行通信。

消息缓冲通信
两条原语:发送原语Send(Receiver,messege);
接收原语:Receive(Sender,Messege);
信箱通信方式

管道通信系统
管道通信是指连接读进程和写进程的,用于实现它们通信的共享文件。这种方式首创于UNIX系统。

假如有3个进程共享一个资源,如果每次只允许一个进程使用该资源,则用PV操作管理时信号量S的可能取值。
分析:三个进程共享一个临界资源,那么必有一个信号量的值为1。信号量S的值是可以变化的,它的范围与使用临界资源进程的数目有关系,三个进程共享一个临界资源,并不代表三个进程要同时访问临界资源。有的时候可能是一个进程使用,两个进程使用,或者三个进程都使用。当然,也可以没有进程使用这个临界资源。当没有进程使用临界资源时,S的值为1;有一个进程使用临界资源时,S的值为0;有两个进程使用临界资源时,S的值为-1,代表有一个进程处于等待状态;三个都要使用临界资源,那么三个中只有一个能满足,剩下的两个就要等待,S=-2。所以S的值为1,0,-1,-2。
拓展三个进程共享两个临界资源,此时S的值由上面的分析,就可以取2,1,0,-1。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺的碎冰冰~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值