当前位置:首页 > 操作系统课程设计报告之和尚喝水 孟衡
学院:专业:
课程设计报告
课程名称:操作系统课程设计
设计题目:进程同步P、V操作模拟—和尚喝水
管理工程学院 信息管理与信息系统
组别:第组
学生姓名:孟衡学号:1141807103 指导教师:张正伟
目录
1需求分析 .................................................................................................. 3 1.1需求概述 ....................................................................................... 3 1.2需求设计 ....................................................................................... 3 2功能设计 .................................................................................................. 4 2.1 实现方案 ...................................................................................... 4 2.2模块说明 ....................................................................................... 5 2.3 操作的流程图 .............................................................................. 6 3开发环境及源程序的主要部分 ............................................................. 7 3.1开发环境 ....................................................................................... 8 3.2源程序............................................................................................ 9 4测试用例,测试过程及情况分析 ....................................................... 10 4.1测试用例 ..................................................................................... 13 4.2测试过程及情况分析 ................................................................. 14 5心得体会 ................................................................................................ 15
2
进程P、V操作模拟设计
——和尚喝水
1需求分析
1.1需求概述
一个寺庙里有小老和尚若干,有一口水井由小和尚挑水入缸给老和尚饮用。水缸可以装10桶水,水取自同一口井,水井口较窄,每次只可容纳一只桶取水,寺庙里一共有3只水桶,每次倒入取用缸中水的量均为1桶,且二者不可同时进行。用P,V操作实现老和尚、小和尚、取水、用水喝水的同步进程控制,水缸水量用semaphore表示,水桶用pail表示,水缸容量用empty表示。
1.2需求设计
以上问题是进程同步的模拟,可以把井中取水、倒水入缸、用水喝水的过程可以看作是一个个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。通过实际编程时来看,就是随机调用其中一个进程的操作,而这些进程的操作相当于程序中的函数调用。而计算机在执行的每一个时刻只能执行一个操作,这就默认了互斥。还有同步模拟是实现函数调用的前提关系,即先决条件。所以这样进程同步模拟就完全能够通过函数的调用来实现。
具体每一个操作对应的函数变量关系: 水井取水:semaphore
小和尚准备取水:mutex1=1
水缸喝水:empty
老和尚用桶喝水mutex2=1 水缸初始量:full=0(最大值10)
3
水桶数量:pail=3
2功能设计
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
4
共分享92篇相关文档