- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计报告之和尚喝水孟衡
课程设计报告课程名称:操作系统课程设计设计题目:进程同步P、V操作模拟—和尚喝水学院:管理工程学院专业:信息管理与信息系统组别:第组学生姓名:孟衡学号:1141807103 指导教师:张正伟目录1需求分析21.1需求概述21.2需求设计32功能设计32.1 实现方案42.2模块说明52.3 操作的流程图63开发环境及源程序的主要部分73.1开发环境83.2源程序94测试用例,测试过程及情况分析104.1测试用例134.2测试过程及情况分析145心得体会15进程P、V操作模拟设计 ——和尚喝水1需求分析1.1需求概述一个寺庙里有小老和尚若干,有一口水井由小和尚挑水入缸给老和尚饮用。水缸可以装10桶水,水取自同一口井,水井口较窄,每次只可容纳一只桶取水,寺庙里一共有3只水桶,每次倒入取用缸中水的量均为1桶,且二者不可同时进行。用P,V操作实现老和尚、小和尚、取水、用水喝水的同步进程控制,水缸水量用semaphore表示,水桶用pail表示,水缸容量用empty表示。1.2需求设计以上问题是进程同步的模拟,可以把井中取水、倒水入缸、用水喝水的过程可以看作是一个个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。通过实际编程时来看,就是随机调用其中一个进程的操作,而这些进程的操作相当于程序中的函数调用。而计算机在执行的每一个时刻只能执行一个操作,这就默认了互斥。还有同步模拟是实现函数调用的前提关系,即先决条件。所以这样进程同步模拟就完全能够通过函数的调用来实现。具体每一个操作对应的函数变量关系:水井取水:semaphore小和尚准备取水:mutex1=1水缸喝水:empty老和尚用桶喝水mutex2=1水缸初始量:full=0(最大值10)水桶数量:pail=32功能设计2.1 实现方案(1)用一个变量full表示没水,初始值为0,当取水时full加1,用水时full减1。变量full=10是最大值,当值为10时表示水缸已经满,此时若进行装水操作,则将处于等待状态;为0时表示水缸无水,此时若进行用水喝水操作,则操作将处于等待状态。(2)变量mutex1和mutex2分别表示小和尚取水和老和尚喝水,初始都为1,semaphore=mutex1+mutex2。(3)用6个bool型的变量full_lag,semaphore_lag,mutex1_lag,mutex2_lag empty_lag,psil_lag表示六个进程是否处于等待状态。处于等待时,变量值为true。(4)若取水、喝水的进程同时处于等待状态时,用水的操作将自动执行等待取水的操作,执行按等待的先后顺序;若水缸满了、桶全用去喝水了的进程同时候处于等待状态时,取水的操作将自动执行等待喝水的操作,按等待的先后顺序进行。(5)用一个随机的函数产生0—5的6个整数,分别对应六个进程的调用。2.2模块说明2.2.1 main函数用一个随机的函数产生0—5的6个整数,分别对应六个进程的调用,调用时程序自动输入,本程序共产生了10次随机的调用进程。.2.2.2 6个进程函数水井取水:semaphore小和尚准备取水:mutex1=1水缸喝水:empty老和尚用桶喝水mutex2=1水缸初始量:full=0(最大值10)水桶数量:pail=3﹒ 2.2.3 Print函数 用于输出取水用水的情况和有哪些进程处于等待状态。2.3 操作的流程图2.3.1取水操作小和尚水井取水进程的操作流程图:2.3.2用水操作老和尚用水喝水操作流程图:3开发环境及p、v操作语句的主要部分3.1开发环境(1)使用系统:Windows 7(2)使用语言:C + +(3)开发工具:VC 6.03.2进程p、v操作原语Main()?{cobegin???get();??use();??coend?}??Get()??//小和尚取水?{while?(true)???{??p(empty)?????????p(count)????????P(mutex1)????????????????????从井中取水;v(mutex1)?;P(mutex2)?;?将水倒入缸中;?v?(mutex2)?;?v?(full)?;v?(pail)?;?}?}?Use()?//老和尚?{???while(true)?????{?p?(full)????????p(count)????????P(mutex2)????????从缸中取水;??v?(mutex2);?v(empty);?????喝水;??????v?(count)?;?????}?}?3.2.1C + + 源代码为了便捷地编写程序,特地把水缸水量semaphore、小和尚准备取水mutex1、从水井中取水mutex2、水缸容量empty、水缸无
文档评论(0)