当前位置:网站首页> 体育头条 > 篮球比赛两方各多少队员(进程之间的关系和通信)

篮球比赛两方各多少队员(进程之间的关系和通信)

更新时间:2022-10-16 18:03:36

进程间的制约关系有互斥、同步和通信三种形式。互斥体现了竞争关系,同步体现了合作关系,通信完成进程间的众多信息交换。你要深入理解进程的同步和互斥的含义,并能够正确区分它们,了解高级进程通信的3种方式,即共享存储器、管道文件和消息传递。

(一)同步

在日常生活中,同步关系的事例不胜枚举。例如,接力赛中前一棒运动员把棒交给下面的运动员,不能犯规。在工业生产的流水作业过程中,每道工序都有自己的特定任务,它们协同工作才能完成产品的生产,在前一道工序未完成或加工质量不合格时,后一道工序不能进行下去。

篮球比赛两方各多少队员(进程之间的关系和通信)

接力赛图示

篮球比赛两方各多少队员(进程之间的关系和通信)

工业生产的流水线图示

在计算机系统中,属于这种关系的进程是很多的。例如,SPOOLing系统的输入功能可以由两个进程A和B完成,进程A负责从读卡机上把卡片上的信息读到一个缓冲区中,进程B负责把该缓冲区中的信息进行加工并写到外存输入井中。

篮球比赛两方各多少队员(进程之间的关系和通信)

要实现二者的协同工作,两个进程必须满足如下制约关系:只有当取空该缓冲区中的内容时,进程A才能向其中写入新信息;只有当写满该缓冲区时,进程B才能从中取出内容做进一步加工和转送工作。可见,在缓冲区内容取空时,进程B不应继续运行,需要等待进程A向其中送入新信息;反之,当缓冲区中的信息尚未取走时,进程A应等待,防止把原有的信息冲掉而造成信息丢失的结果。针对该缓冲区,进程A和进程B就是一种同步关系。

通过上面分析可以看出,同步进程通过共享资源来协调活动,在执行时间的次序上有一定约束。虽然彼此不直接知道对方的名字,但知道对方的存在和作用。在协调动作的情况下,多个进程可以共同完成一项任务。

(二)互斥

在日常生活中,人与人之间还存在另一种形式的关系,就是竞争一个共用的事物,如汽车在交叉路口争用车道,篮球比赛中两方队员争抢篮板球,等等。这些人之间可能彼此并不认识,由于想要共用一个事物,产生了相互排斥的竞争关系。

篮球比赛两方各多少队员(进程之间的关系和通信)

汽车在交叉路口争用车道

篮球比赛两方各多少队员(进程之间的关系和通信)

争抢篮板球

在计算机系统中,进程之间的关系通常也是与此类似的互斥关系,这是由于进程共享某些资源而引起的。例如系统中只有一台打印机,有两个进程都要使用,为了保证打印结果的正确和方便使用,只能是一个进程用完打印机之后,另一个进程才能使用,否则,两个进程同时使用一台打印机,则结果交织在一起,根本无法辨认。这两个进程对打印机的申请没有顺序关系,谁都可能先提出请求。

篮球比赛两方各多少队员(进程之间的关系和通信)

为了解决这个问题,可以采取以下办法:使用前,各进程先申请打印机,如果打印机未分给其他进程,就把打印机分给该进程,做上占用标记,以后一直归它使用;当它用完之后,释放打印机,清除标记,这时另一个进程的申请才能得到满足。在一个进程使用打印机期间,另一个进程的申请不被满足,该进程必须等待。

从以上分析看出,在逻辑上这两个进程本来完全独立,毫无关系,只是由于竞争同一个物理资源而相互制约。这种互斥关系不同于前面讲的同步关系,它们的运行不具有时间次序的特征,谁先向系统提出申请,谁就先执行。

(三)通信

进程通信是指进程间的信息交换。各进程在执行过程中为合作完成一个共同的任务,需要协调步伐、交流信息。就如同人们在社会活动中进行交流一样。进程间交换的信息量可多可少。少则仅是一个状态或数值,多则可交换成千上万个字节的数据。

上述进程的互斥和同步机构因交换的信息量少,被归结为低级进程通信。本节介绍高级进程通信,它是方便高效地交换大量信息的通信方式。

高级进程通信方式有很多种,大致可归并为3类:共享存储器、管道文件和消息传递。

篮球比赛两方各多少队员(进程之间的关系和通信)

图 进程通信方式对比图

1.共享内存方式

共享内存方式是在内存中分配一片空间作为共享内存。需要进行通信的各个进程把共享内存附加到自己的地址空间中,然后就象正常操作一样对共享区中的数据进程读或写。如果用户不需要某个共享内存,可以把它取消。通过对共享内存的访问,相关进程间就可以传输大量数据。

2.管道文件方式

管道文件也称作管道线,它是连接两个命令的一个打开文件。一个命令向该文件中写入数据,称作写者;另一个命令从该文件中读出数据,称作读者。例如在Linux系统中,下述命令行就实现两个命令间的通信:

who | wc -l

写者和读者按先入先出(FIFO)的方式传送数据,由管道通信机制协调二者的动作,提供同步、互斥等功能。

在UNIX系统中,命令是通过进程实现的。所以,读者和写者又分别称作读进程和写进程。

3.消息传递方式

消息传递方式以消息(message)为单位在进程间进行数据交换。

它有两种实现方式:

(1)直接通信方式。发送进程直接将消息挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中得到消息。

消息缓存通信:

消息缓冲通信这种方法是P.B.Hansen于1969年在他设计RC4000机器的操作系统时首先提出,在1970年公布的。其设计思想是:由系统管理一组缓冲区,其中每个缓冲区可以存放一个消息(即一组信息)。当进程要发送消息时,先要向系统申请一缓冲区,然后把消息写进去,接着把该缓冲区连到接收进程的一个消息队列中,并用通知接收者,接收进程可以在适当时候从消息队列中取出消息,并释放该缓冲区。

消息缓冲区一般包含下列几种信息:

name:发送消息的进程名或标识号。

size:消息长度。

text:消息正文。

next:下个缓冲区的地址。

在采用消息通信机构的系统中,进程PCB中一般包含有下列项目:

mutex:消息队列操作互斥信号量。消息队列是临界资源,不允许两个或两个以上进程对它同时进行访问。

Sm:表示接收消息计数和同步的信号量,用于接收消息进程与发送消息进程进行同步,其值表示消息队列中的消息数目。

Pm:指向该进程的消息队列中第一个缓冲区的指针。

接收消息进程的PCB和它的消息缓冲链的关系如图2-21所示。

篮球比赛两方各多少队员(进程之间的关系和通信)

图2-21 PCB与消息缓冲链

两个进程进行消息传送的过程如图2-22所示,发送进程在发送消息之前,要先在自己的内存空间设置一发送区,把准备发送的消息正文以及接收消息的进程名(或标识号)和消息长度填入其中,完成上述准备工作之后,调用发送消息的程序send(addr),其中参数addr是消息发送的起始地址。send程序的流程如图2-23所示,图中mutex是接收进程PCB中的互斥信号量,Sm是接收进程PCB中的同步信号量。

篮球比赛两方各多少队员(进程之间的关系和通信)

图2-22 消息发送与接收

接收进程在读取消息之前,先在自己占用的内存空间中指定一个接收消息区,然后调用接收消息程序receive(ptr),其中参数ptr是指向消息接收区的指针。receive程序的流程如图2-24所示。

篮球比赛两方各多少队员(进程之间的关系和通信)

篮球比赛两方各多少队员(进程之间的关系和通信)

图2-23 send程序流程图

图2-24 receive程序流程图

在实际通信时,发送进程往往要求接收进程在收到消息后立即回答,或按消息的规定,在执行了某些操作后予以回答。此时接收进程在收到发来的消息后,便对消息进行分析,若是完成某项任务的命令,接收进程便去完成指定任务,并把所得结果转换成回答消息。同样,通过send程序将回答消息回送给原发送进程,原发送进程再用receive程序读取回答消息。至此两个进程才结束由一次服务请求而引起的通信全过程。

这种通信方式的好处是扩大了信息传递能力,但系统也要花费一定的代价,主要反映在:PCB中多了两个信号量和一个指针。使其规模变大;系统开设多个缓冲区,占用内存空间;增加对缓冲区的管理程序;对于缓冲区和消息队列的管理要涉及复杂的同步关系,给系统增加了复杂性和调度负担。

(2)间接通信方式。发送进程将消息送到称作信箱的中间设施中,接收进程从信箱中取得消息。这种通信方式也称作信箱通信方式。

信箱通信:

信箱是实现进程通信的中间实体,可以存放一定数量的消息。发送进程将消息送入信箱,接收进程从信箱中取出发给自己的消息。这有点类似于我们日常使用信箱的情况。

信箱是一种数据结构,在逻辑上可分为两个部分:信箱头——包括信箱名字、信箱属性(公用、私用或者共享)和信箱格状态等;信箱体——用来存放消息的多个信箱格。

消息在信箱中存放受到安全保护,得到核准的用户(进程)可以随时读取消息,而其他用户被拒绝访问信箱。

信箱可以动态创建和撤消。进程可以利用信箱创建原语来创建一个新信箱,创建时应给出信箱名字及其属性等,以及谁可以共享此信箱(对共享信箱)。不再使用信箱时,可用信箱撤消原语删除它。

当进程之间要通信时,它们必须有共享信箱。发送和接收消息的原语形式为:

send(mailbox,message)

其中,mailbox为信箱,message是要发送的消息。发送进程要发送消息时,先判断该信箱的信箱格是否为空。若为空,则将消息送入相应信箱格中,并置信箱格状态为满;否则重复测试。当信箱全满时,发送者挂起,直至有消息从信箱中取走。

receive(mailbox,message)

接收进程要接收一个消息时,先判断信箱状态是否为满。若为满,表示有消息,则从中取走消息。否则若为空,则接收者挂起。

信箱可分为3类:

① 公用信箱:它由操作系统创建,系统中所有核准进程都可使用它——既可把消息送到该信箱中,又可从中取出发给自己的消息。

② 共享信箱:它由某个进程创建,对它要指明共享属性以及共享进程的名字。信箱的创建者和共享者都可以从中取走发给自己的消息。

③ 私有信箱:用户进程为自己创建的信箱。创建者有权从中读取消息,而其它进程(用户)只能把消息发送到该信箱中。