




免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计课程设计名称: P、V操作及进程同步的实现1 专 业 班 级 : 计科0801 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计时间: 2010/12/22 计算机科学 专业课程设计任务书学生姓名专业班级学号题 目P、V操作及进程同步的实现课题性质其它课题来源自拟课题指导教师同组姓名主要内容1)用语言编程实现P、V原语并用P、V原语描述如下生产者-消费者问题:有一个理发师,一把理发椅和n把提供给等候理发的顾客座的椅子。如果没有顾客,则理发师便在理发椅子上睡觉;当第一个顾客到来时,必须唤醒该理发师进行理发;如果理发师正在理发时又有顾客到来,则如果有空椅子可坐,他就坐下来等待,如果没有空椅子,他就离开理发店。为理发师和顾客各编一段程序描述他们的行为,要求不能带有竞争条件,试用P、V操作实现。任务要求 定义信号量并将P、V操作定义为带参数 以输出字符串的形式表示理发师和顾客的行为。 设计适当的数据结构和函数描述顾客等待队列和“唤醒”理发师理发过程,以及没有顾客时的“阻塞”理发师过程。 编程时需考虑理发师和顾客对应的程序是并发操作的。提示:可利用随机函数模拟并发操作。 理发师和顾客两个进程各自调用一个函数模拟生产及消费的操作。消费者进程开始时首先测试生产者是否存在,若不存在,则循环测试直到生产者出现为止。消费者如果是第一次执行即转为睡眠状态,则直到生产者完成产品后再唤醒消费者,然后两者协调地工作下去。参考文献任满杰等操作系统原理实用教程 电子工业出版社 2006汤子瀛 计算机操作系统(修订版)西安电子科技大学出版社 2001张尧学 史美林计算机操作系统教程实验指导 清华大学出版社 2000 罗宇等 操作系统课程设计机械工业出版社 2005审查意见指导教师签字:教研室主任签字: 年 月 日 1 需求分析打瞌睡的理发师问题是一种同步问题的抽象描述。计算机系统中的每个进程都可以消费或生产某类资源,当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。而当某个进程释放资源时,则它就相当一个生产者。因此此题可看作是n个生产者和1个消费者问题。顾客作为生产者,每到来一个就使计数器count增加1,以便让理发师理发(相当于消费)至最后一个顾客(相当于产品)。并且,第1个到来的顾客应负责唤醒理发师;如果不是第1个到达的顾客,则在有空椅子的情况下坐下等待,否则离开理发店(该消息可由计数器count获得)。所以可以通过一个有界缓冲区把理发师和顾客联系起来。而其中的信号也具有两种功能:一是跟踪资源的理发师和顾客的计数器;二是协调资源的理发师和顾客之间的同步器。通过对信号进行P、V操作来实现有关问题和相关描述。2 概要设计PV操作代码:int waiting=0 ; /等候理发的顾客数 int chairs=n; /为顾客准备的椅子数 semaphore customers=0, barbers=0,mutex=1; barber() while(TRUE); /理完一人,还有顾客吗? P(cutomers); /若无顾客,理发师睡眠 P(mutex); /进程互斥 waiting := waiting 1; /等候顾客数少一个 V(barbers); /理发师去为一个顾客理发 V(mutex); /开放临界区 cut-hair( ); /正在理发 customer() P(mutex); /进程互斥 if (waiting) waiting := waiting+1; / 等候顾客数加1 V(customers); /必要的话唤醒理发师 V(mutex); /开放临界区 P(barbers); /无理发师, 顾客坐着养神 get-haircut( ); /一个顾客坐下等理/ else V(mutex); /人满了,离开 主要函数说明:include include random ();随机产生顾客的函数 cuthair(); 理发师的理发函数 gethaircut() 顾客被理发的函数 Barber();理发师线程 Customer();顾客线程 Main();实现线程的操作输入椅子数目是否开门?理发师是否有顾客? 睡觉有空椅子?顾客下次再来理发顾客进入理完?顾客离开Finish+1顾客数是否大于0理完的顾客数4关门?关门休息正在理发,其他顾客等待输入椅子数目是否开门?理发师是否有顾客?睡觉有空椅子?顾客下次再来理发顾客进入理完?顾客离开Finish+1顾客数是否大于0理完的顾客数4关门?关门休息正在理发,其他顾客等待 FTT T F FFTTTT F FFFT 3 运行环境硬件环境基于Xp的PC软件环境Windows XP4 开发工具和编程语言开发工具Microsoft Visual C# 2008 Express Edition编程语言编程语言Visual C# 和数据库语言Sql server5 详细设计#include windows.h #include iostream.h #include math.h#define random (rand()*10000)/RAND_MAX /定义一个随机函数来产生顾客,并且使个顾客间的时间少于10秒 int long waiting(0); /正在等待的顾客的数目 int chairs; /椅子的总数目 char open_door; /开门 char close_door; /关门 int count(0); /顾客的号码数 int finish(0); /理发完毕的顾客数目 DWORD a; void cuthair() :Sleep (1000); cout理发完成 !endl; /理发师理发函数,用时10秒 void gethaircut() :Sleep (1001); /顾客被理发的函数,为了和理发师之间有所区别,比理发师理发时间长0.001秒。 cout第finish个顾客理发完毕,离开 endl; HANDLE Mutex=:CreateMutex(NULL, FALSE, Mutex); /用来实现进程的互斥 HANDLE barbers=:CreateSemaphore(NULL, 1,1, barbers);/定义信号量来进行线程间的同步 HANDLE customers=:CreateSemaphore(NULL,0,3,customers); DWORD WINAPI customer(LPVOID pParm2) /顾客的线程 :WaitForSingleObject(Mutex ,INFINITE); /p(mutex)来进行互斥操作 count+; /来的是第几个顾客 cout叮咚!第 count 个顾客来了 endl; / if (waitingchairs) /如果还有椅子可以坐 if (waiting!=0) cout此时有waiting 个人在等待理发endl; else cout没有人在等待endl; /输出有多少人在等待 waiting+; cout还有chairs-waiting+1个座位endl; cout有座位,顾客已经坐下endl; :ReleaseSemaphore(customers,1,NULL);/v(customer) :ResumeThread(customers);/唤醒理发师进程 :ReleaseMutex(Mutex);/释放互斥量,以便其他线程使用 :WaitForSingleObject(barbers,INFINITE);/等待理发 gethaircut(); /理发并离开 else cout座位已满,第count个顾客离开endl; /没有椅子,顾客直接离开 :ReleaseMutex(Mutex); return 0; DWORD WINAPI barber(LPVOID pParm1) /理发师的线程 while(true) /一直执行 :WaitForSingleObject(customers,INFINITE);/p(customers),等待顾客 :WaitForSingleObject(Mutex,INFINITE); /等待互斥量 waiting-; /等待的人数减一 :ReleaseSemaphore(barbers,1,NULL); /释放信号量 :ResumeThread(barbers); /唤醒顾客进程 :ReleaseMutex(Mutex); /v(mutex); cuthair(); /理发 finish+; /理发完毕的顾客数目加一 return 0; int main(int argc, char* argv) coutchairs; cout理发店共有chairs把椅子endl; /设置椅子数目 cout开门接待顾客吗?Y/Nopen_door; /while (open_door!=y) coutendl*对不起,尚未开门!*endl; cout开门接待顾客吗?Y/Nopen_door; /开门接待顾客/HANDLE hThread1; HANDLE hThread2; hThread2=:CreateThread (NULL,0,barber,NULL,0,NULL); /产生一个理发师进程 /顾客到来/while(close_door!=y) /不关门,顾客继续到来 :Sleep(random); /顾客随机到来 /产生一个顾客进程/hThread1=:CreateThread(NULL,0,customer,NULL,a,NULL); /产生一个顾客进程 coutendl*营业中,欢迎光临!*=4&waiting=0) /如果完成数超过4并且没有人等待 cout已经为finish个顾客理发了,要关门下班吗?Y/Nclose_door; return close_door; else ; if (close_door=y) cout*对不起,暂停营业!*endl; 6 调试分析程序启动后,首先出现输入椅子总数目的界面,如下图所示,在输入椅子数目以后,会提示让你输入Y或N来决定是否开门,如下图所示:在上述过程都做完以后,因为程序中的顾客是随机产生的,所以在理发和顾客来和等的过程系统会自动运行,当理发师为4个以上顾客理发完成并且没有人在等待时,可以决定是否关门休息.此时会提示是否关门,如下图:7 测试结果运行程序显示出字符界面,按照提示设置椅子数目,并决定是否开门营业,若不开门,则一直提示,开门则开始营业,顾客随机到来,程序自动运行.若理发完成数超过4并且没有人等待,则理发师可以决定是否关门休息.界面如下:参考文献1任满杰等,操作系统原理实用教程, 电子工业出版社 , 20062汪国安 周星 侯秀红等,计算机操作系统课程辅导,机械工业出版社,2004,4 12133汤子瀛 汤小丹 梁红兵等,计算机操作系统(修订版),西安电子科技大学出版社 ,20014张尧学 史美林,计算机操作系统教程实验指导 ,清华大学出版社 ,2000 5罗宇等 ,操作系统课程设计,机械工业出版社 , 2005心得体会虽然在上课时就对进程之间的运转有了一个全面的了解,但那都局限在一个理论的层次上,好多的细节部分还不是太了解。那些东西的详细说明在我们的教材上是没有的。后来,我就在网上和图书馆大量的找资料。先对那些算法和打瞌睡的理发师问题有一个大致全面的了解。然后就开始编程和不断的修改以使代码达到要求。在编写程序的时候我们不可能一次就成功,往往一段代码要修改甚至是十几次代码后,才能得到预期的结果。因此在编写程序的时候一定不能急躁,要耐心地检测输入的数据和输出的结果,在没达到预期目的的情况下,要及时修改数据进行下一次的检测,只有这样才能成功地用C+语言编写出需要的程序。在刚开始调试和运行程序的过程中遇到了不少问题,后来经过请教同学和查证大量相关资料,使大多数问题都解决了。而本来想让理发师理完4个以上的人并且没有人在等待的时候可以决定是否关门下班,但是由于顾客线程是受随机函数控制的,时间上不容易满足该条件,程序运行中没有看到该功能的实现,所以有待进一步解决。而且通过此次的学习,感觉自己学的东西还很浅显,而且实际实践能力很有限,所以对于自己专业方面的技能素质还有实际动手能力方面有待进一步的加强。信息科学与工程 学院课程设计成绩评价表课程名称:操作系统系统原理设计题目:处理机调度程序专业:计算机科学与技术 班级: 姓名: 学号 序号评审项目分 数满分标准说明1内
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药店日常活动方案
- 构造艺术考试题及答案
- 高中水平考试题及答案
- 幼儿园教学教案设计:病菌快走开卫生习惯情景模拟课
- 妇幼健康考试题及答案
- 物流运输计划模板含成本分析与时间规划
- 企业安全培训计划实施与记录表单安全生产标准规范版
- (正式版)DB15∕T 3666-2024 《灌木发酵饲料生产技术规程》
- (正式版)DB15∕T 3400-2024 《沿黄灌区盐碱地种植耐盐碱植物技术规程》
- (正式版)DB15∕T 3360-2024 《饲草大麦裹包青贮技术规程》
- 2025年社工工作者考试真题及答案
- 同城理发店转租合同范本
- 2021-2025年高考地理真题知识点分类汇编之地球的运动
- 医院反诈宣传课件
- 2025年日本n4试题及答案
- 2025年秋期人教版3年级上册数学核心素养教案(第2单元)(教学反思有内容+二次备课版)
- 2025乡村医生培训考试试题库及参考答案
- 智慧工业园区AI大模型数字化平台建设方案
- 雨水监测管理办法
- 驾驶员职业健康管理制度
- 腺样体肥大切除病例分析
评论
0/150
提交评论