操作系统与实验.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统与实验 第4章3 第4章 进程间通信 2 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() 使用下列头函数: #includesys/types.h #includelinux/sem.h 4.7.2 有关信号量的系统调用函数 1.创建一个新的信号量集或获取一个已经存在的信号量集 格式:int semget(key_t key, int nsems, int semflg); 功能:创建或获取一个新的信号量集 参数:key——信号量集的key值。可用户指定或IPC_PRIVATE。 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); 2.对信号量的P、V操作 格式: int semop(int semid, struct sembuf * sops, unsigned nsops); 功能: 对信号量进行P、V操作 参数说明: semid——信号量集的标识符,由semget()得到。 sops ——指向一个sembuf结构数组,该数组的每个元素对应一次信号 量操作。 nsops——是第二个参数所指向的sembuf结构数组中元素的个数,如果 只有一个信号量nsops值为1。 返回: 正确返回:0 错误返回:-1 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的绝对值: ②.如果sem_op为正数:此时相当于V操作,把它的值加到信号量中, 这也意味着该进程释放资源。如果是互斥则出临界区,释放临界资源。 ③.如果sem_op为0:则该进程将睡眠直到信号量的值也为0。 系统会按顺序检查信号量等待队列(sem_pending)中的每一个成员,查看在当前信号量的状态下,其请求的操作是否可以成功,如果可以,则将它从等待队列中唤醒,并插入到就绪队列中等待调度运行。 sem_flg指明操作的执行模式,它有两个标志位: IPC_NOWAIT:指明以非阻塞方式操作信号量。

文档评论(0)

you-you + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档