最新【考研计算机专业课】武汉大学操作系统PPT课件 第3章 进程同步与通信2(共80张PPT课件).pptx

上传人:豆**** 文档编号:27191450 上传时间:2022-07-23 格式:PPTX 页数:80 大小:353.94KB
返回 下载 相关 举报
最新【考研计算机专业课】武汉大学操作系统PPT课件 第3章 进程同步与通信2(共80张PPT课件).pptx_第1页
第1页 / 共80页
最新【考研计算机专业课】武汉大学操作系统PPT课件 第3章 进程同步与通信2(共80张PPT课件).pptx_第2页
第2页 / 共80页
点击查看更多>>
资源描述

《最新【考研计算机专业课】武汉大学操作系统PPT课件 第3章 进程同步与通信2(共80张PPT课件).pptx》由会员分享,可在线阅读,更多相关《最新【考研计算机专业课】武汉大学操作系统PPT课件 第3章 进程同步与通信2(共80张PPT课件).pptx(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、3.5 进程进程(jnchng)通信通信n进程通信是指进程之间的信息交换。n进程互斥与同步交换的信息量较少且效率较低,因此称这两种进程通信方式为低级进程通信方式,相应地也将P、V原语称为两条低级进程通信原语。n高级进程通信方式是指进程之间以较高的效率传送大量(dling)数据。第一页,共八十页。3.5.1 进程通信进程通信(tng xn)的类型的类型n高级进程通信(tng xn)方式可分为三大类:n共享存储器系统n消息传递系统n管道通信系统或共享文件系统第二页,共八十页。共享存储器系统共享存储器系统(xtng)n相互通信的进程共享某些数据结构或共享存储区。n基于共享数据结构的通信方式(fngs

2、h):诸进程通过公用某些数据结构交换信息。如生产者-消费者问题。n基于共享存储区的通信方式:在存储器中划出一块共享存储区,诸进程可通过对共享存储区进行读或写来实现通信。包括建立共享存储区、附接及断接。第三页,共八十页。消息传递系统消息传递系统(xtng)n在消息传递系统中,进程间的数据交换以消息为单位,程序员直接利用系统提供(tgng)的一组通信命令(原语)来实现通信。n消息传递系统因其实现方式不同可分为:n直接通信方式:发送进程将消息发送到接收进程,并将其挂在接收进程的消息队列上;接收进程从消息队列上取消息。n间接通信方式:发送进程将消息发送到信箱,接收进程从信箱中取消息。第四页,共八十页。

3、管道管道(gundo)(共享文件)通信(共享文件)通信n管道(共享文件)通过连接读进程(jnchng)和写进程(jnchng)的共享文件来实现读写进程(jnchng)之间通信。第五页,共八十页。3.5.2 消息传递系统(xtng)n消息传递系统是实现进程通信的常用(chn yn)方式,这种通信方式既可以实现进程间的信息交换,也可以实现进程间的同步。 第六页,共八十页。1. 消息消息(xio xi)缓冲通信缓冲通信n消息缓冲通信是直接通信方式(fngsh)的一种实现。第七页,共八十页。消息缓冲队列(duli)通信机制中的数据结构n所谓消息是指一组信息,消息缓冲区的数据结构如下: struct m

4、essage sender; 发送者进程标识符 size; 消息长度 text; 消息正文 next; 指向(zh xin)下一个消息缓冲区的指针 第八页,共八十页。在PCB中还应增加(zngji)struct PCB mq;消息队列队首指针(zhzhn) mutex;消息队列互斥信号量 sm;消息队列资源信号量 第九页,共八十页。消息缓冲通信消息缓冲通信(tng xn)的实现思想的实现思想n为了实现消息通信,发送进程应先在自己的工作区中设置一个发送区,把欲发送的消息填入其中,然后(rnhu)再用发送原语将其发送出去。n接收进程调用接收原语从自己的消息缓冲队列中摘下第一个消息,并将其内容复制到

5、自己的消息接收区内。第十页,共八十页。 send(B,a); sender:A size:6 text:Hello!两个进程进行通信(tng xn)的过程进程(jnchng)APCB(B)进程(jnchng)B receive(b) sender:A size:6 text:Hello! mq mutex smsender:Asize:6text:Hello!next:0ab第一个消息缓冲区第十一页,共八十页。发送(f sn)原语描述void send(receiver,a)receiver为接收者标识号,a为发送区首址 向系统申请一个消息缓冲区i; 将发送区a中的消息复制到i中; 获得接收进

6、程的内部标识(biozh)j; P(mutex); 把消息插入j的消息队列上; V(mutex); V(sm); 第十二页,共八十页。接收(jishu)原语描述void receive(b)b为接收区首址 获得(hud)接收进程内部标识j; P(sm); P(mutex); 将消息队列中的第一个消息移出; V(mutex); 将消息复制到接收区b; 第十三页,共八十页。2.信箱信箱(xnxing)通信通信n信箱信箱通信方式(fngsh)中,进程之间通信需要通过共享数据结构实体-信箱来进行。n信箱是一种数据结构,其中存放信件。n信箱逻辑上分成信箱头和信箱体两部分。n信箱头中存放有关信箱的描述。n

7、信箱体由若干格子组成,每格存放一个信件,格子的数目和大小在创建信箱时确定。 第十四页,共八十页。信箱(xnxing)通信原语n信箱通信原语包括(boku):n信箱的创建和撤消:n消息的发送和接收:nSend(mailbox,message);nReceive(mailbox,message);第十五页,共八十页。消息(xio xi)通信中的同步问题1n进程间的消息通信存在同步关系n对于发送进程来说,它在执行发送原语后有两种可能选择:n发送进程阻塞,直到这个(zh ge)消息被接收进程接收到,这种发送称为阻塞发送。n发送进程不阻塞,继续执行,这种发送称为非阻塞发送。第十六页,共八十页。消息(xi

8、o xi)通信中的同步问题2n对于一个接收进程来说,在执行接收原语后也有两种可能选择:n如果一个消息在接收原语执行之前已经发送,则该消息被接收进程接收,接收进程继续执行。n如果没有正在等待的消息,则该进程阻塞直到有消息到达;或者该进程继续执行,放弃接收的努力(n l)。前者称为阻塞接收,后者称为非阻塞接收。第十七页,共八十页。消息通信(tng xn)中的同步问题3n根据发送进程和接收进程采取方式的不同,通常有三种常用的组合(zh)方式:n非阻塞发送、阻塞接收。n非阻塞发送、非阻塞接收。n阻塞发送,阻塞接收。第十八页,共八十页。3.管道(gundo)n使用管道通信时,基本上采用文件系统的原有机制

9、实现。包括创建、打开、关闭、读写等。n管道机制应提供(tgng)以下三方面的协调能力:n互斥:诸进程互斥读写管道n同步:管道空、满情况处理n存在:确定对方是否存在第十九页,共八十页。管道(gundo)通信示意图1n初始时,其长度为4,系统将管道(gundo)看成一个循环队列。按先进先出的方式读写。inout A B C Dn写入字符E后,管道(gundo)长度为5inout A B C D E第二十页,共八十页。管道(gundo)通信示意图2n读一个字符(z f)后,管道长度为4inout B C D En若管道容量(rngling)为n且in=n时,再写入一个字符,则in移到管道的另一端。i

10、nout D E X第二十一页,共八十页。习题(xt)nP75n3(1)n3(2)n3(4)n3(7)第二十二页,共八十页。选择题1n若信号量S的初值为2,当前值为-1,则表示有_等待进程。A. 2个 B. 1个C. 0个 D. 3个n在操作系统中,P、V操作是一种_。A. 机器指令 B. 系统调用命令C. 作业控制命令 D. 低级(dj)进程通信原语第二十三页,共八十页。选择题2n对信号量X执行P操作时,若 _ 则进程(jnchng)进入等待状态。 AX-10 BX-10 DX-1=0n用P、V操作管理临界区时,信号量的初值应定义为_。 A. -1 B. 0 C. 1 D. 任意值第二十四页

11、,共八十页。选择题3n临界区是_。A.一段共享数据区 B. 一段程序C.一个互斥资源 D.一个缓冲区n对于两个(lin )并发进程,设互斥信号量为mutex,若mutex=0则_。A.表示有一个进程进入临界区,另一个进程等待进入B. 表示没有进程进入临界区C.表示有一个进程进入临界区D. 表示有两个进程进入临界区第二十五页,共八十页。选择题4n对信号量S执行V操作后,下述选项正确的是_。A.当S小于0时唤醒一个阻塞进程B.当S小于等于0时唤醒一个阻塞进程C.当S小于0时唤醒一个就绪进程D.当S小于等于0时唤醒一个就绪进程n有若干并发进程均将共享变量count的值加1一次,那么有关count值说

12、法正确的是_。 A肯定有不正确的结果 B肯定有正确的结果 C若控制(kngzh)这些并发进程互斥执行count加1操作,count中的值正确 DA,B,C均不对第二十六页,共八十页。选择题5n下述哪个(n ge)选项不是管程的组成部分_。A.对局部于管程的数据结构设置初值的语句B.局部于管程的共享数据说明C.管程内对数据结构进行操作的一组过程D.管程外过程调用管程内数据结构的说明n某通信方式通过共享存储区来实现,其属于_。A. 消息通信 B. 低级通信C.高级通信 D.管道通信 第二十七页,共八十页。选择题6n下述关于管程的描述中错误的是_ 。 A管程是一种(y zhn)进程同步工具,解决了信

13、号量机制中大量同步操作分散问题 B管程每次只允许一个进程进入管程 C管程中的signal操作的作用和信号量机制中的signal操作相同 D管程是被进程调用的n在直接通信方式中,系统提供两条通信原语进行发送和接收,其中Send原语中参数应是_。A. receiver,mailbox B. sender,mailboxC. receiver,message D. sender,message 第二十八页,共八十页。选择题7n信箱通信是一种_通信方式(fngsh)。A.信号量 B.间接通信C. 低级通信 D.直接通信第二十九页,共八十页。填空题1n如果信号量的当前值为-4,则表示系统中在该信号量上有

14、 _ 个等待进程。n对于信号量可以做 操作和 操作, 操作用于阻塞(zs)进程, 操作用于释放进程。程序中的 和 操作应谨慎使用,以保证其使用的正确性,否则执行时可能发生死锁。n信号量的物理意义是:当信号量值大于0时表示 ;当信号量值小于0时,其绝对值为 。第三十页,共八十页。填空题2n有m个进程共享同一临界资源,若使用信号量机制实现对临界资源的互斥访问,则信号量值的变化(binhu)范围是 _ 。n访问临界资源的进程应该遵循的条件有: 、 、 、和 。n每个信箱可以包含 和 两部分。n为了实现消息缓冲通信,在PCB中应增加的数据项有 、 和 。第三十一页,共八十页。填空题3n临界资源是指_的

15、资源。n进程的高级通信方式(fngsh)有 、 和 。n管程由 、 和 三部分组成。第三十二页,共八十页。考研题1n三个进程P1、P2、P3互斥使用(shyng)一个包含N(N0)个单元的缓冲区,nP1每次用produce()生成一个正整数并用put()送入缓冲区某一空单元中;nP2每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;nP3每次用geteven()从该缓冲区中取出一个偶数并用counteven()统计偶数个数。n请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量含义。要求用伪代码编写。 09第三十三页,共八十页。考研题1答案(d

16、n)semaphore empty=N;semaphore odd=0,even=0;semaphore mutex=1;main()()cobegin Process P1() while(true) number=produce(); P(empty); P(mutex); put(); V(mutex); if (number % 2 = 0) V(even); else V(odd);第三十四页,共八十页。考研题1答案(d n)续Process P2() while(true) P(odd); P(mutex); getodd(); V(mutex); V(empty); counto

17、dd(); Process P3() while(true) P(even); P(mutex); geteven(); V(mutex); V(empty); counteven(); coend 第三十五页,共八十页。考研题2n单处理机系统(xtng)中,可并行的是 。09 . 进程与进程. 处理机与设备 . 处理机与通道 . 设备与设备A.、和B.、和C.、和D.、和n设与某资源相关联的信号量初值为3,当前值为1,若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是 。10A.0,1B.1,0C.1,2D.2,0第三十六页,共八十页。考研题3进程P0和P1的共享变量定义(d

18、ngy)及初值为:boolean flag2; int turn=0; flag0=false;flag1=false;进程P0和P1访问临界资源的类C代码实现如下:void P0 /进程P0while (TRUE) flag0=TRUE; turn=1;wile (flag1 & turn=1);临界区;flag0=FALSE; void P1/进程P1while (TRUE) flag1=TRUE; turn=0;wile (flag0 & turn=0); 临界区; flag1=FALSE; 则并发执行进程P0和P1时产生的情况是 。nA.不能保证进程互斥进入临界区,会出现(chxin)

19、“饥饿”现象nB.不能保证进程互斥进入临界区,不会出现“饥饿”现象nC.能保证进程互斥进入临界区,会出现“饥饿”现象nD.能保证进程互斥进入临界区,不会出现“饥饿”现象n注:本题为2010年全国考研题第三十七页,共八十页。考研题4n有两个并发执行的进程P1和P2,共享初值为1的变量(binling)x,P1对x加1,P2对x减1。加1和减1操作的指令序列分别如下所示。/加1操作 /减1操作load R1,x /取x到寄存器R1中 Load R2,xinc R1 dec R2store x,R1/将R1的内容存入x store x,R2n两个操作完成后,x的值_。 11A、可能为-1和3 B、只

20、能为1C、可能为0、1或2 D、可能为-1、0、1或2第三十八页,共八十页。考研题5n某银行提供一个服务(fw)窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一个顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务(fw)。顾客及营业员的活动描述如下:ncobeginn process 顾客n 从取号机获取一个号码;n 等待叫号;n 获得服务; 第三十九页,共八十页。考研题5-2process 营业员 while(TRUE) 叫号; 为顾客服务; coend请添加必要的信号量和P、V(或wait()、signal())操作,实

21、现上述(shngsh)过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。 11第四十页,共八十页。考研题5答案(d n)semaphore mutex=1; /互斥使用取号机semaphore empty=10; /空座位的数量semaphore full=0; /已占座位的数量semaphore service=0; /等待(dngdi)叫号cobegin process 顾客i P(empty); P(mutex); 从取号机获得一个号; V(mutex); V(full); P(service); / 等待叫号 第四十一页,共八十页。考研题5答案(d n)续 proces

22、s 营业员 while(TRUE) P(full); V(empty); V(service); /叫号 为顾客(gk)服务; coend第四十二页,共八十页。UNIX的进程同步与通信(tng xn)nUNIX的早期版本中,为进程的同步与通信提供了:n软中断信号n管道机制n在UNIX SYSTEM 中,推出了新的进程通信机构(jgu)IPC:n消息机制n共享存储区机制n信号量机制第四十三页,共八十页。软中断(zhngdun)信号n软中断信号(简称信号)是一种实现进程间简单(jindn)通信的设施,用于通知对方发生了异常事件。nUNIX SYSTEM 中,共有19个软中断信号。n软中断是对硬件中

23、断的一种模拟,接收进程在收到软中断信号后,将按照事先的规定去执行一个软中断处理程序。n软中断处理程序必须等到接收进程执行时才能生效。第四十四页,共八十页。信号信号(xnho)的发送的发送n信号的发送是指由发送进程把信号发送到指定进程信号域的某一位上。n如果目标(mbio)进程正在一个可被中断的优先级上睡眠,核心便将它唤醒,发送过程就此结束。n一个进程可能在其信号域中有多个位被置位,代表有多种类型的信号到达,但对于一类信号,进程却只能记住其中的一个。第四十五页,共八十页。发送(f sn)信号n系统(xtng)调用kill向一个进程或一组进程发送一个信号。该系统(xtng)调用的语法格式如下:in

24、t kill(pid,sig);int pid,sig;n其中,sig是要发送的信号,pid参数是进程标识号。 pid参数除了可以取进程标识号之外,还可以取下列一些特殊值:第四十六页,共八十页。pid参数(cnsh)特殊值npid为0:表示把信号发送给与发送进程同组的所有进程,也包括发送进程自己。npid为 -1且发送进程的有效用户标识符不是超级用户:表示把信号发送给其实际用户标识符与发送进程的有效用户标识符相同(xin tn)的所有进程,也包括发送进程本身在内。npid为-1且发送进程的有效用户标识符为超级用户:表示把信号发送给除了一些特殊系统进程之外的所有进程。npid是一个非-1的负数:

25、表示把信号发送给组号为pid绝对值的进程组中的所有进程。第四十七页,共八十页。设置设置(shzh)信号的处理方式信号的处理方式n系统调用signal用于设置信号的处理(chl)方式。其语法格式如下: void (* func)( ) signal(sig,func)n其中,func为收到软中断信号sig后进程希望调用函数的地址。n19类信号如表所示。 第四十八页,共八十页。func的取值情况(qngkung)nfunc的取值可以分成三种情况(qngkung):nfunc1时,进程对信号sig不予理睬。nfunc0时,即缺省处理,对大多数软中断信号的缺省处理是终止进程。nfunc为其他整数值时,

26、它的值是指向信号处理程序的指针。 第四十九页,共八十页。信号(xnho)的处理n检查软中断信号的时机:n进入(jnr)或退出低优先级睡眠状态n即将从核心态返回用户态n信号的处理方式:n忽略n缺省处理,即终止进程n执行用户设置的软中断处理程序第五十页,共八十页。管道(gundo)n管道是指能连接某些读进程(jnchng)和写进程(jnchng)的、专门用于进程(jnchng)通信的共享文件。n管道允许读/写进程按先进先出的方式传送数据,即写进程从管道的一端向管道写入数据,读进程从管道的另一端读出数据。第五十一页,共八十页。管道管道(gundo)的类型的类型n管道的类型有:n无名管道n有名管道n有

27、名管道和无名管道的读写方式(fngsh)是相同的。第五十二页,共八十页。无名无名(wmng)管道管道n无名管道是用系统调用pipe()建立(jinl)的无名文件,用该系统调用所返回的文件描述符来标识该文件。n只有调用pipe的进程及其子孙进程才能利用该管道文件进行通信。第五十三页,共八十页。有名有名(yu mng)管道管道n有名管道是利用(lyng)mknod系统调用建立的,是可以在文件系统中长期存在的具有路径名的文件,n其他进程可以知道有名管道的存在并能利用路径名来访问该文件。n对有名管道的访问方式象访问其他文件一样,都需先用open系统调用去打开它。第五十四页,共八十页。pipe文件文件(

28、wnjin)的建立的建立npipe系统调用(dioyng)建立一个无名管道。其语法格式如下:n int pipe(fdes);n int fdes2;n核心创建一个管道时须完成下述工作:n分配磁盘和内存索引节点。n为读进程和写进程分配文件表项。n分配用户文件描述符。在读进程和写进程的用户文件描述符表中,分别分配一个表项,并将文件描述符fdes0和fdes1分别返回给读进程和写进程。第五十五页,共八十页。Pipe涉及(shj)的数据结构读 进 程(jnchng)写 进 程(jnchng)用户文件描述符表文件表内存索引节点表外存fpfp文件指针文件指针索引节点PIPE文件第五十六页,共八十页。pi

29、pe文件文件(wnjin)的大小限制的大小限制npipe文件只使用索引(suyn)节点中的直接地址项。n核心将索引节点中的直接地址项作为一个循环队列来管理,为它设置一个读指针和一个写指针,按先进先出顺序进行读和写。第五十七页,共八十页。进程(jnchng)写管道n进程向管道写数据时,可能有以下两种情况:n管道中有足够的空间存放要写的数据,此时每写一数据块后核心便自动增加地址项的大小。写操作完成后,核心修改索引节点中的写指针,并唤醒所有因该管道空而睡眠等待的读进程。n管道中无足够的空间存放要写入的数据,此时核心对该索引节点作标记后让写进程睡眠,等待数据从管道中排出。上述情况的一个例外(lwi)是

30、,当进程写的数据量大于管道的容量时,核心将尽可能多的数据写到管道中,然后使进程睡眠,直到获得更多的空间。第五十八页,共八十页。进程(jnchng)读管道n当进程从管道读数据时,同样会有两种情况:n管道中有足够的数据供进程读。此时,进程便从读指针所指位置开始读数据,每读出一个数据块后,便增加地址项的大小。读操作结束(jish)后,核心修改索引节点中的读指针,并唤醒所有睡眠的写进程。n进程要读的数据比管道中的数据多。此时,读进程将返回管道中当前所有的数据。如果管道为空,进程一般将进入睡眠,直到一个写进程将数据写入管道,再将读进程唤醒。第五十九页,共八十页。消息(xio xi)n消息是一个格式化的可

31、变长的信息单元。消息机制允许进程(jnchng)向其他进程(jnchng)发送消息。当一个进程(jnchng)收到多个消息时,可将这些消息排成一个队列。n在UNIX中,消息机制向用户提供了四个系统调用,分别用于建立、发送、接收和管理消息。第六十页,共八十页。消息机制消息机制(jzh)的数据结构的数据结构nUNIX的消息机制中使用了两种数据结构:n消息首部:消息首部中记录消息的类型、大小、指向消息数据区的指针、消息队列(duli)的链接指针等。n消息队列头标:每个消息队列的消息头标中,包含了指向消息队列中第一个消息的指针和指向最后一个消息的指针,队列中消息的数目,队列中消息数据的总字节数,队列所

32、允许的消息数据的最大字节总数,还可以含有最近一次执行发送操作的进程标识号和时间等。第六十一页,共八十页。消息(xio xi)和消息(xio xi)队列示意图 消息(xio xi)队列头标消息(xio xi)首部数据区第六十二页,共八十页。消息队列的建立消息队列的建立(jinl)和描述符的获取和描述符的获取n在UNIX系统中,系统调用msgget用来建立(jinl)消息队列或者获取消息队列的描述符。该系统调用的语法格式如下:nint msgget(key,msgflg);nkey_t key;nint msgflg;n其中,key是用户指定的消息队列的名字;msgflg是用户设置的标志和访问方式

33、。如IPC_CREAT表示系统中若无以key命名的消息队列,则建立消息队列;若该队列已存在,则返回该消息队列的描述符。第六十三页,共八十页。消息消息(xio xi)的发送的发送n系统调用msgsnd( )向指定的消息队列发送一个消息,并将发送消息链接到该消息队列的尾部。系统调用的语法格式为:nint msgsnd(msgid,msgp,msgsz,msgflg);nint msgid,msgsz,msgflg;nstruct msgbuf *msgp;n其中,msgid是由msgget返回的消息队列描述符;msgp是指向用户消息缓冲区的指针。msgsz是消息的长度(chngd),msgflg规

34、定了当无内存空间存储消息时,进程是等待还是立即返回。第六十四页,共八十页。消息消息(xio xi)的接收的接收n系统调用msgrcv( ) 从指定消息队列中接收(jishu)指定类型的消息,其语法格式如下:nint msgrcv (msgid, msgp, msgsz, msgtyp, msgflg);nint msgid,msgsz,msgflg;nstruct msgbuf * msgp;nlong msgtyp;n其中,msgid、msgp、msgsz、msgflg与msgsnd中的对应参数相似,msgtyp是接收消息的类型。第六十五页,共八十页。msgtyp的取值的取值nmsgtyp的

35、取值有:nmsgtyp0时,核心寻找(xnzho)消息队列中的第一个消息,并将它返回给调用者;nmsgtyp为正整数时,核心返回给定消息类型的第一个消息;nmsgtyp为负整数时,核心应在其类型值小于或等于msgtyp绝对值的所有消息中,选出其类型值最低的一个消息返回。第六十六页,共八十页。消息队列消息队列(duli)的操纵的操纵n用户在建立了消息队列后,可以利用msgctl系统(xtng)调用来读取它的状态信息并进行修改,如查询消息队列描述符、修改消息队列的许可权等。msgctl的语法格式为:nint msgctl(msgid,cmd,buf);nint msgid,cmd;nstruct

36、msgid_ds *buf;n其中,buf是用户缓冲区地址,供用户存放控制参数和查询结果;cmd是规定的命令。 第六十七页,共八十页。共享存储(cn ch)区n共享存储区可使若干进程(jnchng)共享主存中的某一个区域,且使该区域出现在多个进程(jnchng)的虚地址空间中。n当进程间欲利用共享存储区进行通信时,必须首先在主存中建立一个共享存储区,然后将它附接到自己的虚地址空间上。n此后,进程对该区的访问操作,与对其虚地址空间中其他部分的操作完全相同。进程之间以后便可以通过对共享存储区中数据的读/写来进行直接通信。第六十八页,共八十页。两进程(jnchng)通过共享存储区通信的例子 进程A的

37、虚空间内 存 空间进程B的虚空间栈 共享存储区B正文数据栈正文数据AAB第六十九页,共八十页。共享存储共享存储(cn ch)区的建立区的建立n系统调用shmget建立一个共享存储区。如果该共享存储区已由其他进程建立,则返回其描述符shmid。shmget的语法说明如下:nint shmget(key,size,shmflg);nkey_t key;nint size,shmflg;n其中,key是共享存储区的名字;size是其大小(dxio);shmflg是用户设置的标志,如IPC_CREAT,表示若系统中尚无指名的共享存储区则由核心建立一个共享存储区;若系统中已有该共享存储区,便忽略IPC_

38、CREAT。第七十页,共八十页。共享存储共享存储(cn ch)区的附接区的附接n系统调用shmat( )将共享存储区附接到进程的虚地址空间(kngjin)上。该系统调用的语法格式如下:nchar *shmat(shmid,shmaddr,shmflg);nint shmid,shmflg;nchar *shmaddr;n其中,shmaddr是用户想要使共享存储区附接到的进程虚地址, shmflg是共享存储区的读写标志。n该系统调用的返回值是共享存储区所附接到的进程虚地址。第七十一页,共八十页。共享存储共享存储(cn ch)区的断接区的断接n系统调用shmdt( )将共享存储(cn ch)区与进

39、程断接。其语法格式如下:nint shmdt(shmaddr);nchar *shmaddr;n其中,shmaddr是要断接的虚地址,即以前由系统调用shmat( )所返回的虚地址。第七十二页,共八十页。共享存储共享存储(cn ch)区的操纵区的操纵n系统调用shmctl( ) 对共享存储区的状态信息进行读取和修改。当所有(suyu)进程都与共享存储区断接时,便可以删除该共享存储区。shmctl系统调用的语法格式为:nint shmctl(shmid,cmd,buf);nint shmid,cmd;nstruct shmid_ds, *buf;n其中,buf是用户缓冲区地址,cmd是操作命令。

40、第七十三页,共八十页。信号量nUNIX System 中采用的是信号量集机制,即由一组信号量构成的信号量数组。n传统的信号量机制是对信号量施加P和V操作,而UNIX System 中利用semop( )系统(xtng)调用来对指定信号量进行操作。第七十四页,共八十页。信号量集的建立信号量集的建立(jinl)n系统调用semget( )建立信号量集。其语法格式如下:n int semget(key,nsems,semflg);n key_t key;n int nsems,semflg;n其中(qzhng),key是信号量集的名字;nsems定义了信号量集中信号量的数目;而semflg的含义与m

41、sgget系统调用中的msgflg含义相同。系统调用的返回值是信号量集的描述符。 第七十五页,共八十页。信号量集的操纵信号量集的操纵(cozng)n系统调用semop( ) 对信号量数组进行操作。其语法格式(g shi)为:nint semop(semid,sops,nsops);nint semid;nstruct sembuf * *sops;nunsigned nsops;n其中,semid是semget( )返回的描述符;sops是指向信号量操作结构数组的指针;nsops是该数组的大小。第七十六页,共八十页。信号量操作(cozu)结构struct sembuf short sem_nu

42、m; short semop; short sem_flg;nsem_num是信号量的编号;nsem_op为所要进行的操作,可以为正值(相当于v)或负值(相当于p)nsem_flg为标志(biozh),如取值IPC_NOWAIT表示立即返回。第七十七页,共八十页。信号量的控制(kngzh)nLinux利用系统调用semctl()对信号量进行控制,其功能包括查询及设置信号量的状态(zhungti),删除信号量等。第七十八页,共八十页。semctlnsemctl的调用格式如下:int semctl(int semid, int semnum, int cmd, union semun arg);n

43、其中semid是信号量集描述符n semnum标识(biozh)待操作信号量序号n cmd是命令narg是命令参数n该函数执行成功时,返回相应的值;失败时,返回-1。 第七十九页,共八十页。内容(nirng)总结3.5 进程通信。基于共享数据结构的通信方式:诸进程通过公用某些数据结构交换信息(xnx)。互斥:诸进程互斥读写管道。存在:确定对方是否存在。C若控制这些并发进程互斥执行count加1操作,count中的值正确。D.管程外过程调用管程内数据结构的说明。临界资源是指_的资源。对有名管道的访问方式象访问其他文件一样,都需先用open系统调用去打开它。key_t key。失败时,返回-1第八十页,共八十页。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > pptx模板 > 企业培训

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁