《网络操作系统》课程实习指导_....docVIP

  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文档。上传文档
查看更多
《网络操作系统》课程实习指导_....doc

《网络操作系统》课程实习指导书 一、实习准备工作 1、熟悉实习任务,明确实习内容 根据实习任务书给定的或收集的原始数据和资料,结合实习要求,理清思路,明确实习内容。 2、规划实习方案,准备实验环境和工具 二、实习过程内容及方法、步骤 任务:生产者与消费者者问题应用—寄信人向邮箱投信和工作人员从邮箱中取信的多线程同步与互斥问题的模拟。 【任务描述】本系统会生成两个线程,一个是寄信人线程,模拟寄信人投信过程,它以随机时间间隔向邮箱中投信;一个是邮局工作人员线程,模拟工作人员取信的过程,它不定期地从邮箱中取信(之后,发往全国各地)。 【任务规格】 1、邮箱中总共有十个格子; 2、寄信人每次只能投一封信,每封投入信箱的信件单独占一个格子; 3、工作人员取信时,每次只能取一封信,取完信后,所有邮件向右移动一个格子; 4、当信箱中十个格子全空时,不能取信;(同步问题) 5、当邮箱中十个格子全满时,不能再向其中投信(同步问题) 6、寄信人线程和工作人员线程不能同时占用邮箱,即不能同时向邮箱中投信和取信(互斥问题) 说明:操作系统为了保证进程并发执行的可再现性,要求程序部分有序。这一部分有序的要求为并发进程间的相互制约关系。分同步与互斥两类 --同步关系:多个进程共同完成一个任务,它们之间必须协同动作, 互相配合,以达到同步。多个相关进程在执行速度上的制约,称为同步关系。 --互斥关系 :系统中互斥资源的使用具有排它性,因此进程间往往因竞争同一资源而受到其它进程的制约。互斥关系是同步关系的特例。 【任务要求】 1、在单文档/视图架下,使用多线程技术,在视图类中模拟寄信取信过程。 【过程指导】 1、在视图类的构造函数中,完成对邮箱变量、信号量变量等的初始化。 (1)邮箱。十个格子的邮箱用一个数组来实现。在头文件中声明变量:int mailbox[10]。数组中的每个元素表示一个格子,可以容纳一封信。mailbox[i] = -1 : 表示第i个格子中没有信件;mailbox[i] 的值大于等于0 : 表示第i个格子中已投放了信件。在构造函数中,该数组的所有元素的值为-1(没有信件)。 (2)邮箱与线程状态。 在头文件中声明int ID , 在构造函数中赋其值为0即:ID= 0; 表示当前处理信件的编号; 在头文件中声明: int front; // 可以存放邮件的起始位置 int rear; // 存放了邮件的终止位置 BOOL interruptPut; // 是否中断投信者线程 BOOL interruptGet; // 是否中断取信者线程 构造函数中,做如下的初始化: front =9; rear = 9; interruptPut = FALSE; interruptGet = FALSE; 邮箱示例: 上图front的值为7,rear的值为9,表示:可以放邮件的位置为7,最后一个邮件的编号为9。 若取了一封信后,第九的位置为空,所有邮件向右移动一个格子,front值变为8,状态如下图所示: 若投放了一封信后,第8号格子放信,front值减1变为7,状态如下图所示: (2)空信号量:empty。用来同步线程。其计数大于0时,可以向信箱中投信,等于0时,投信过程挂起(等待)。 在视图头文件中声明变量:HANDLE empty; 在视图类构造函数中创建创建该信号量: empty = CreateSemaphore(NULL,10,10,NULL); 注:函数CreateSemaphore原型: HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName ); lInitialCount表示信号量中起始资源的数目;lMaximumCount表示信号量中最大资源计数。 上例中,表示起始信号量资源计数为10,最大数资源数为10。 (2)满信号量:full。用来同步线程。其计数大于0时,可以从信箱中取信,等于0时,取信过程挂起(无信可取,等待)。 在视图头文件中声明变量:HANDLE full; 在视图类构造函数中创建创建该信号量: full = CreateSemaphore(NULL,0,10,NULL); 上例初值表示:有full信号量开始时没有资源(无信件),最大值为10。 (3)互斥信号量:mutex。用来线程互斥。即保证每一时刻只有一个线程占用邮箱。 在视图头文件中声明变量:HANDLE mutex; 在视图类构造函数中创建创建该信号量: mutex = CreateMutex( NULL,

文档评论(0)

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

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

1亿VIP精品文档

相关文档