网站大量收购独家精品文档,联系QQ:2885784924

04th _经典IPC问题.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
04th _经典IPC问题

2.3.4 信号量(Semaphore); P、V原语作为操作系统内核代码的一部分,是一 种不可分割的原子操作(atomic action),在其 运行时,不会被时钟中断所打断; P、V原语包含有进程的阻塞和唤醒机制,因此 在进程等待进入临界区时不会浪费CPU时间;;信号量和P、V原语的实现;P原语:申请一个资源; V原语:释放一个资源;Windows 2000 CreateSemaphore(创建信号量) WaitForSingleObject(P操作) ReleaseSemaphore(V操作) ?COS-II osSemCreate(创建信号量) osSemPend (P操作) osSemPost(V操作);利用信号量来实现进程互斥;2.3.5 进程的同步;如何实现A先执行,然后B执行?;while(1) { …. A; V(S); …. };【例子1】 合作进程的执行次序 用进程流图来描述各进程合作完成某一任务的次序,其规则如下:;用信号量及P、V操作来描述左图 1、说明进程的同步关系 进程P1、P2可并行执行,P3的执行必须等待P1、P2都完成后才能开始执行。 几个同步关系?;main() { //均初始化为0 semaphore S13, S23; cobegin P1; P2; P3; coend };【例子2】 司机与售票员;while(上班时间) { P(S_DoorClose); 发动汽车; 正常运行; 到站停车; V(S_Stop); };【例子3】共享缓冲区的合作进程的同步;buffer;1. 问题分析,弄清楚同步关系: 要保证打印结果的正确,Compute和Print进程必 须遵循以下同步规则: 当Compute把数据送入buffer后,Print才能从 buffer中取,否则它必须等待(先存后取); 当Print从buffer取走数据后,Compute才能将 新数据送buffer,否则也须等待(先取后存);semaphore S_Buffer; // 缓冲区是否有空间,初值1 semaphore S_Data; // 是否有数据需打印,初值0;2.4 经典的IPC问题;2.4.1 生产者—消费者问题;1;问题分析;semaphore S_Buffer_Num; // 空闲的缓冲区个数, // 初值为N semaphore S_Product_Num; // 缓冲区当中的产品个 // 数,初值为0 semaphore S_Mutex; // 用于互斥访问的信号 // 量,初值为1;void producer(void) { int item; while(TRUE) { item = produce_item( ); // 制造一个产品 P(S_Buffer_Num); // 是否有空闲缓冲区 P(S_Mutex); // 进入临界区 insert_item(item); // 产品放入缓冲区 V(S_Mutex); // 离开临界区 V(S_Product_Num); // 新增了一个产品 } };void consumer(void) { int item; while(TRUE) { P(S_Product_Num); // 缓冲区中有无产品 P(S_Mutex); // 进入临界区 item = remove_item( ) // 从缓冲区取产品 V(S_Mutex); // 离开临界区 V(S_Buffer_Num); // 新增一个空闲缓冲区 consume_item(item); // 使用该产品 } };void consumer(void) { int item; while(TRUE) { P(S_Product_Num); P(S_Mutex); item = remove_item( ) consume_item(item); V(S_Mutex); V(S_Bu

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档