二、进程管理(5.进程通讯)

本文详细介绍了进程通信的三种主要类型:共享存储器系统、消息传递系统和管道通信,强调了消息传递机制在现代操作系统中的广泛应用。在消息传递中,直接通信和间接通信(通过信箱)的方式各有特点,满足不同同步需求。此外,文章还探讨了通信链路的建立、消息格式、进程同步方式等关键问题,为理解进程间通信提供了深入的洞察。
摘要由CSDN通过智能技术生成

1. 进程通信的类型

(1)共享存储器系统

        ① 基于共享数据结构的通信方式。

                在这种通信方式中,要求诸进程公用某些数据结构,借以实现诸进程间的信息交换。

                如在生产者—消费者问题中,就是用有界缓冲区这种数据结构来实现通信的。

                 这里,公用数据结构的设置及对进程间同步的处理,都是程序员的职责。这无疑增加了            程序员的负担,而操作系统却只须提供共享存储器

                因此,这种通信方式是低效的,只适于传递相对少量的数据

        ②基于共享存储区的通信方式。

                为了传输大量数据,在存储器中划出了一块共享存储区,诸进程可通过对共享存储区中           数据的读或写来实现通信。这种通信方式属于高级通信

                进程在通信前,先向系统申请获得共享存储区中的一个分区,并指定该分区的关键字

                若系统已经给其他进程分配了这样的分区,则将该分区的描述符返回给申请者,否则,          由申请者把获得的共享存储分区连接到本进程上;

                此后,便可像读、写 普通存储器一样地读、写该公用存储分区。

(2)消息传递系统

        消息传递系统是当前应用最为广泛的一种进程间的通信机制。

        在该机制中,进程间的数据交换是以格式化的消息(message)为单位的;在计算机网络中,又把message称为报文。程序员直接利用操作系统提供的一组通信命令(原语),不仅能实现大量数据 的传递,而且还隐藏了通信的实现细节,使通信过程对用户是透明的, 从而大大减化了通信程序编制的复杂性,因而获得了广泛的应用。

       在当今最为流行的微内核操作系统中,微内核与服务器之间的通信,无一例外地都采用了消息传递机制;又由于它能很好地支持多处理机系统、分布式系统和计算机网络,因此它也成为这些领域最主要的通信工具。

        消息传递系统的通信方式属于高级通信方式

        因其实现方式的不同而进一步分成直接通信方式间接通信方式两种。

(3)管道通信

        所谓“管道” ,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。

        向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道;

        而接受管道 输出的接收进程(即读进程),则从管道中接收(读)数据。

        由于发送进程和接收进程是利用管道进行通信的,故又称为管道通信。

管道机制必须提供三种协调能力:

        ①互斥,就是不能同时读写。

        ②同步,指当写(输入)进程把一定数量(如4 KB)的数据写入pipe,便去睡眠等待,直到读(输出)进程取走数据后,再把它唤醒。当读进程读一空pipe时,也应睡眠等待,直至写进程将数据写入管道后,才将之唤醒。

        ③确定对方是否存在,只有确定了对方已存在时,才能进行通信。

2. 消息传递通信的实现方法

(1)直接通信方式

        就是发送消息的进程利用OS提供的原语直接向接收消息的进程发送消息。就像是打电话,先建立连接之后再发消息。

        要求发送进程和接收进程都以显式的方式提供对方的标识符。

        系统提供的原语:

                Send(Receiver,message); 发送一个消息给接收进程;

                Receive(Sender,message); 接收Sender发来的消息;

        但是,在某些情况下,接收进程和多个发送进程通信,对于接收进程来说,很难知道发送进程的标识符。例如:打印机进程,就难以知道发送消息的进程标识符。

        对于这样的应用,在接收进程接收消息的原语中,表示源进程的参数为完成通信后的返回值,接收原语可表示为:

         Receive (id,message);

(2)间接通信方式

        就像是发邮件。

        间接通信方式指进程之间的通信需要通过作为共享数据结构的实体

        该实体用来暂存发送进程发送给目标进程的消息;接收进程则从该实体中取出对方发送给自己的消息。通常把这种中间实体称为信箱

        消息在信箱中可以安全地保存,只允许核准的目标用户随时读取。因此,利用信箱通信方式,既可实现实时通信,又可实现非实时通信

系统为信箱通信提供了若干条原语,分别用于信箱的创建、撤消和消息的发送、接收等:

        ①信箱的创建和撤销

                进程可利用信箱创建原语来建立一个新信箱。创建者进程应给出信箱名字、信箱属性(公          用、私用或共享);对于共享信箱,还应给出共享者的名字。当进程不再需要读信箱时,可用          信箱撤消原语将之撤消。

        ②消息的发送和接收

                当进程之间要利用信箱进行通信时,必须使用共享信箱,并利用系统提供的下述通信原         语进行通信:

                Send(mailbox,message); 将一个消息发送到指定信箱;

                Receive(mailbox,message); 从指定信箱中接收一个消息;

信箱分为三类:

        ①私用信箱

             用户进程可为自己建立一个新信箱,并作为该进程的一部分。

             信箱的拥有者有权从信箱中读取消息,其他用户则只能将自己构成的消息发送到该信箱中

             这种私用信箱可采用单向通信链路的信箱来实现。

             当拥有该信箱的进程结束时,信箱也随之消失

        ②公用信箱

             由操作系统创建,提供给系统中的所有核准进程使用。

             核准进程既可把消息发送到该信箱中,也可从信箱中读取发送给自己的消息。

             公用信箱应采用双向通信链路的信箱来实现。

             公用信箱在系统运行期间始终存在

        ③共享信箱

             它由某进程创建,在创建时或创建后,指明它是可共享的,同时须指出共享进程(用户)的           名字。

             信箱的拥有者和共享者,都有权从信箱中取走发送给自己的消息。

利用信箱通信,发送者和接收者之间关系:

        ① 一对一关系。为发送和接收进程建立专用通信链路,不受其他进程影响。

        ② 多对一关系。即客户/服务器交互。

        ③ 一对多关系。广播式。注意与②的区别,一个是交互,一个是发送。      

        ④ 多对多关系。建立一个公用信箱。

3. 消息传递系统实现中的若干问题

(1)通信链路

        为使在发送进程和接收进程之间能进行通信,必须在两者之间建立一 条通信链路。

两种方式:

       ①由发送进程在通信之前用显式的“建立连接”命令(原语)请求系统为之建立一条通信链路;在链路使用完后,也用显式方式拆除链路。这种方式主要用于计算机网络中。

        ②发送进程无须明确提出建立链路的请求,只须利用系统提供的发送命令(原语),系统会自动地为之建立一条链路。这种方式主要用于单机系统中。

根据链路连接方法,链路分为两类:

        ①点—点连接通信链路,这时的一条链路只连接两个结点(进程);

        ②多点连接链路,指用一条链路连接多个(n>2)结点(进程)。

根据通信方式,链路分为两类:

        ①单向通信链路,只允许发送进程向接收进程发送消息,或者相反;

        ②双向通信链路。

(2)消息的格式

        分为定长和可变长度。

        定长对要发送较长消息的用户是不方便的。

        系统无论在处理还是在存储变长消息时,都可能会付出更多的 开销,但这方便了用户。

(3)进程同步方式

        ①发送进程阻塞,接收进程阻塞。

                这种情况主要用于进程之间紧密同步,发送进程和接收进程之间无缓冲时。

                这两个进程平时都处于阻塞状态,直到有消息传递时。

                这种同步方式称为汇合。

        ②发送进程不阻塞,接收进程阻塞。

                这是一种应用最广的进程同步方式。

                平时,发送进程不阻塞,因而它可以尽快地把一个或多个消息发送给多个目标;

                而接收进程平时则处于阻塞状态,直到发送进程发来消息时才被唤醒。

        ③发送进程和接收进程均不阻塞。

                这也是一种较常见的进程同步形式。

                平时,发送进程和接收进程都在忙于自己的事情,仅当发生某事件使它无法继续运行时,才把自己阻塞起来等待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值