- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
主要内容 进程间通信实验课主要内容 本周大课内容回顾 通过实验理解共享内存通信 通过实验理解Linux信号量 了解Linux信号量与消息缓冲通信、内存共享通信之间的差异 布置作业1 Linux信号量 Linux中系统是通过何种数据结构管理信号量集的? 在sembuf结构中semop0、semop0、semop==0分别表示什么含义? 对信号量赋值和普通变量赋值有区别吗? Linux共享内存通信 shmget(key,size,flag):创建或获取共享内存id shmat(int shmid,char *shmaddr,int msgflg,ulong *raddr) shmat(int shmid,int *shmaddr,int msgflg,ulong *raddr) :附接到共享内存 shmdt(viraddr):切断与共享内存的连接 shmctl(int shmid,int cmd,struct shmid_ds *buf):撤销共享内存 Linux信号量 主要系统调用函数: 创建或获取信号量集: int semget(key,nsems,semflg) 对信号量的P、V操作: int semop(semid, struct sembuf *sops,nsops) 实例:只有1个元素的PV操作 struct sembuf P,V; semop(semid,P,1); semop(semid,V,1); 对信号量集的控制函数: semctl(semid,semnum,cmd,arg) 有关头文件: linux/sem.h 进程间通信实验 利用信号量实现进程互斥 利用信号量实现父子进程对临界资源的互斥访问。每个进程进入该临界区3次。 父进程进入临界区后显示prnt in,出临界区则显示prnt out; 子进程进入临界区后显示chld in,出临界区则显示chld out; 目的:了解信号量实现进程互斥的编程实现 理解要点: semget()、semop()、semctl()函数的使用 修改程序,若不使用信号量,观察结果与使用信号量有何区别 利用信号量实现进程互斥 利用信号量实现进程互斥 进程间通信实验 利用信号量实现进程同步 由父进程创建一个子进程,父子进程共享一个存储区,子进程向共享存储区以覆盖方式写信息,父进程从共享存储区读信息并显示信息。父子进程轮流读写,即子进程写一个信息到共享内存中,父进程从中读信息输出;然后子进程再写第2个信息,父进程再读出第2个信息输出,当信息为end时读写进程结束。 父子进程利用信号量实现对共享内存的同步访问 目的:了解如何通过信号量来实现同步 利用信号量实现进程同步 PV操作实现同步的算法归纳如下:(1)分析每个进程的执行条件和释放条件,针对每个执行条件设置一个信号量,赋初值。比如子进程执行条件为单缓冲区有空(emptyid,表示缓冲区空,初值为1),父进程执行条件为单缓冲区有值(fullid,表示缓冲区满,初值为0)(2)对每个进程做如下处理:1、请求条件处执行P(子进程写数据,父进程读数据,所以需要子进程先写数据,父进程才能读,即首先对emptyid进行P操作,减1操作)2、释放条件处执行V操作(子进程一旦写入数据,缓冲区不为空,即应该对fullid(单缓冲区有值)进行V操作,加1操作) 进程间通信实验 利用信号量实现进程同步 父子进程利用信号量实现对共享内存的同步访问 目的:了解如何通过信号量来实现同步 分析: 单缓冲区的同步问题 需要2个信号量,子进程执行条件为单缓冲区有空,父进程执行条件为单缓冲区有数 emptyid,表示缓冲区空,初值为1; fullid,表示缓冲区满,初值为0; 涉及共享内存的访问,父进程创建,父子进程共享,父进程撤销 理解要点: semget()、semop()、semctl()函数的使用 理解通过信号量来实现同步与实现互斥的差异 #includestdio.h #includestdlib.h #includestring.h #includeunistd.h #includesys/types.h #includelinux/sem.h #includelinux/shm.h 利用信号量实现进程同步 利用信号量实现进程同步 本文观看结束!!! 实用操作系统 华软软件学院软件工程系 P* * 第六次小课 进程间通信 (下) 华软软件工程系 主要章节 第一部分 本周大课 内容回顾 进程间通信(下) 共享内存 Linux信号量 主要内容 第二部分 进程间通信 实验 进程间通信(下) 共享内存 信号量 主要内容 谢 谢 ! 认真完成本章小课实验 先预习再听课,否则跟不上 其他提醒…… 提
文档评论(0)