- 1、本文档共33页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux进程间通信ppt
操作系统与实验 第4章3 第4章 进程间通信 3 4.7 Linux信号量 4.7.1 Linux的信号量 作为IPC机制的一种,与上述其它通信方式类似,也要通过kern_ipc_perm结构中的key来唯一标识一个信号量集,并通过该结构设置并检查访问权限。 针对信号量集,系统中维护了一个由信号量集组成的数组,数组中的每个单元指向一个信号量集。每一个信号量集由一个sem_array结构来描述,该结构定义在文件/usr/src/linux-2.4/include/linux/sem.h中。 4.7.1 Linux的信号量 4.7.2 有关信号量的系统调用函数 Linux提供下列3个有关信号量的系统调用函数: semget() semop() semctl() 下面分别予以介绍。 4.7.2 有关信号量的系统调用函数 1.创建一个新的信号量集或获取一个已经存在的信号量集 命令格式: int semget(key_t key, int nsems, int semflg); 返回值: 正确返回:信号量集的标识符 错误返回:-1 1.创建一个新的信号量集或获取一个已经存在的信号量集 参数说明: key——信号量集的key值: ①.使用IPC_PRIVATE,由系统产生key值并返回标识符,或者返回key值已存在的信号量集的标识符。 ②. key值不为IPC_PRIVATE而是由用户指定一个非0整型数值,则对信号量集的打开或存取操作依赖于semflag参数的取值。 nsems——指定打开或者新创建的信号量集将包含的信号量的数目;如果该key值的信号量集已存在,而semflg只指定了IPC_CREAT标志,那么参数nsems必须与原来的值一致,否则也会返回错误信息。该参数最大值在linux/sem.h中被定义: #define SEMMSL 250 /* = 8 000 */ semflg——当key值不为IPC_PRIVATE: ①.若只设置semflag的IPC_CREAT位,则创建一个信号量集,如果该信号量集已经存在,则返回其标识符 ②.若设置semflag的IPC_CREAT|IPC_EXCL位,则创建一个新的信号量集,如果该key值的信号量集已经存在则返回错误信息 ③.只设置IPC_EXCL位而不设置IPC_CREAT位没有任何意义。 1.创建一个新的信号量集或获取一个已经存在的信号量集 实验中,使用该调用创建一个只含一个信号量的信号量集,格式为: semid=semget(IPC_PRIVATE,1, IPC_CREAT|0666); 其中的IPC_PRIVATE可以使用具体的整型数值取代。 2.对信号量的P、V操作 命令格式: int semop(int semid, struct sembuf * sops, unsigned nsops); 返回值: 正确返回:0 错误返回:-1 参数说明: semid——信号量集的标识符,由semget()得到。 sops——指向一个sembuf结构数组,该数组的每个元素对应一次信号量操作。 2.对信号量的P、V操作 其sembuf数据结构如下: struct sembuf { unsigned short sem_num; /* semaphore index in array */ short sem_op; /* semaphore operation */ short sem_flg; /* operation flags */ }; 其中的参数含义如下所示: 2.对信号量的P、V操作 ⑴.信号量的sem_num值标明它是信号量集的第几个元素,第一个信号量为0,第二个为1,依次类推。 ⑵.semop确定对sem_num指定的信号量采取何种操作,它可以为负数、正数和零。 ①.如果sem_op为负数:则相当于P操作,从信号量的值中减去sem_op的绝对值: ?????? 其差如果大于0,则表示该进程可以使用临界资源进入临界区; ????? 其差如果小于0,在没有指定IPC_NOWAIT的情况下,该进程睡眠,并插入sem_queues等待队列尾部,直到请求的条件得到满足;如果指定了IPC_NOWAIT,则出错返回。 ②.如果sem_op为正数:此时相当于V操作,把它的值加到信号量中,这也意味着该进程释放资源。如果是互斥则出临界区,释放临界资源。 ③.如果sem_op为0:则该进程将睡眠直到信号量的值也为0。 系统会按顺序检查信号量等待队列(sem_pending)中的每一个成员,查看在当前信号量的状态下,其请求的操作是否可以成功,如果可以,则将它从等待队列中唤醒,并插入到就绪队列中等待调度运行。 ⑶.sem_flg指明操
您可能关注的文档
最近下载
- 《适宜性教学与幼儿早期学习》教案.docx
- 英语作业设计Unit 5 What are the shirts made of.pdf VIP
- 水的秘密幼儿园课件.pptx
- 12-完整版班风学风建设主题班会PPT课件(3篇).pptx VIP
- 14S501-1_球墨铸铁单层井盖及踏步施工_给排水图集.pdf VIP
- 新课标人教版数学六年级上册全册各单元教材解读精品课件.pptx
- 13、电动机安装验收表.xlsx VIP
- 2024年《初级会计实务》核心考点介绍 (第六章).pdf VIP
- 中华优秀传统文化融入小学英语教学的研究——以赣州市C小学为例.docx VIP
- 2022年中小学校长招聘考试题库(含答案).pdf
文档评论(0)