进程同步
一、基本概念
目的:为了保证多个进程能有条不紊地运行,在多道程序系统中,必须引入进程同步机制。
主要任务:对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则(或时序)共享系统资源,并能很好地相互合作,从而使程序的执行具有可再现性。(异步性)
两种形式的制约关系:
1)间接相互制约关系:多个程序在并发执行时,由于共享系统资源,如CPU、I/O设备(打印机、磁带机)等形成的制约关系。
这些资源必须互斥访问;用户在使用之前,应先提出申请,而不允许用户进程直接使用。
2)直接相互制约关系:源于进程之间的相互合作。如输入进程A和计算进程B,之间共享一个缓冲区。
临界资源(Critical Resouce):如打印机、磁带机等,各进程采用互斥方式,实现对这种资源的共享。
临界区(critical section):在每个进程中访问临界资源(共享资源)的那段代码称为临界区。
每个进程进入临界区之前,先对欲访问的临界资源进行检查,看它是否正在被访问。未被访问,则可进入,并设置它正被访问的标志,否则不能进入。把这段代码称为进入区(entry section);相应地,在临界区后面也要加上一段退出区(exit section)的代码,用于将临界区正被访问的标志恢复为未被访问的标志。
同步机制应遵循的规则:(软件方法)
1)空闲让进:无进程处于临界区时,即临界资源处于空闲状态,可以进入;
2)忙则等待:已有进程处于临界区时,即临界资源正被访问,必须等待,实现互斥访问;
3)有限等待:在有限的时间内,进入自己的临界区,以免陷入“死等”状态;
4)让权等待:进程不能进入自己的临界区时,必须释放处理机,以免陷入“忙等”(“饥饿”)状态。
二、硬件同步机制
1.关中断:进程在临界区执行期间,系统不响应中断。问题:中断滥用
2.利用Test-and-Set指令实现互斥
3.利用Swap指令实现进程互斥:循环进程。当临界资源忙碌时,访问进程不断进行测试,处于“忙等”,不符合“让权等待”。
三、信号量机制
P、V操作(低级进程通信原语)在同步互斥中的作用:
在同步问题中,若某个行为要用到那个资源,那么在那个行为前面P那个资源一下;若某个行为会提供某种资源,则在那个行为后面V那个资源一下。
在互斥问题中,P、V操作要紧紧夹着使用互斥资源的那个行为,中间不能有其他冗余的代码。
1.整型信号量:P、V操作;定义一个表示资源数目的整型量S
当S<=0时,不断进行测试,违反“让权等待”原则。
2.记录型信号量:在整型信号量的基础上,增加了一个进程链表指针list,用于链接上述所有等待进程。
当S<=0时,进行自我阻塞,放弃处理机,插入等待进程,遵循“让权等待”。
3.AND型信号量:将进程在整个运行过程中需要的全部资源,一次性全部地分配给进程,带进程使用完后再一起释放。
对若干个临界资源的分配采取原子操作方式,要么把它所请求的资源全部分配给进程,要么一个也不分配。
由死锁理论,上述方法可避免死锁。
4信号量集:对AND信号量机制加以扩充,对进程所申请的所有资源以及每类资源不同的资源需求量,在一次P、V原语操作中完成 申请及释放。
四、信号量的应用
1.实现进程同步
2.实现进程互斥
3.实现前驱关系
五、管程机制
有关硬件及软件资源,一般用数据结构抽象地描述其资源特性,即用少量信息和对资源所执行的操作来表征该资源,而忽略内部结构和实现细节。
管程是由一组数据及定义在这组数据之上的对这组数据的操作组成的软件模块(类似于抽象类)。这组操作能初始化并改变管程中的数据和同步进程。
管程的基本特性:
1)局部于管程的数据只能被局部于管程内的进程所访问;
2)一个进程只有通过调用管程内的过程,才能进入管程访问共享数据;
3)每次仅允许一个进程在管程内执行某个内部过程。
管程是一个语言成分,所以管程的互斥访问完全由编译程序在编译时自动添加,无需程序员关注,而且保证正确。
管程与进程的区别:
1)进城定义的是PCB;管程定义的是公共数据结构
2)进程用于并发执行;管程用于同步与互斥
3)进程调用管程中的过程
4)进程能并发;管程不能
5)进程具有动态性;管程只是一个资源管理模块
六、经典同步问题
1.生产者—消费者问题
2.哲学家就餐问题
3.读者—写者问题
进程通信
一、基本概念
1.进程概念
进程通信是指进程之间的信息交换。P、V是低级的通信方式。
2.为什么进程之间的通信必须借助OS的内核功能
每个进程有自己独立的地址空间。在OS和硬件的地址保护机制下,进程无法访问其他进程的地址空间,所以必须借助于 OS的系统调用实现进程之间的通信。
二、进程通信的类型
1.共享存储器系统
相互通信的进程共享某些数据结构或共享存储区。进程之间能够通过这些空间进行通信,需要使用互斥机制(P、V)。
2.管道通信系统
所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。
输入进程向管道中以字符流的形式输入,输出进程以字符流的形式从管道取出。
管道机制必须提供三种协调能力:互斥、同步和确定对方的存在。
其中的,同步:读进程要求读,但管道为空,则等待写进程写入数据。
互斥:读写进程不能同时进行。
注意:从管道读数据是一次性操作,数据一旦被读取,就从管道中被抛弃,释放空间以便写更多的数据。管道只能采用半双工通信,即某一时刻只能单向传输。要实现父子进程双向互动通信,需要定义两个管道。
3.消息传递系统
1)直接通信方式
进程以格式化的消息(message)为单位,将通信的数据封装在消息中,利用OS提供的一组通信命令(原语),在进程之间直接进行消息传递。
2)间接通信方式(信箱通信)
发送进程把消息发送到某个中间实体中,接收进程从中间实体(信箱)中取得消息。该通信方式广泛应用与计算机网络中。
4.客户机—服务器系统
主要应用于计算机网络中,主要的实现方法分为三种:套接字、远程过程调用和远程方法调用。