理发师问题课设说明书.docx
- 文档编号:533129
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:14
- 大小:224.01KB
理发师问题课设说明书.docx
《理发师问题课设说明书.docx》由会员分享,可在线阅读,更多相关《理发师问题课设说明书.docx(14页珍藏版)》请在冰豆网上搜索。
理发师问题课设说明书
前言
在早期的操作系统中一次只允许一个程序。
这种执行方式使得程序在执行期间对系统有完全的控制权,每个程序能访问系统中的所有资源。
随着多道批处理系统和分时系统的出现,程序在系统中的运行不再是独立的,作为资源分配和独立运行的基本单位是进程,而且操作系统所具有的基本特征也是基于进程而形成的,故应从进程的观点来研究操作系统。
随着操作系统的进一步发展,许多现代的操作系统为了提高并发力度和降低兵法开销,又引进了线程的概念。
由于进程具有动态性和异步性,以及各个进程对资源的共享和为完成一向共同的任务需要彼此合作等原因,产生了进程间的相互制约关系。
如果对进程的活动不加约束,就会使系统出现混乱,如多个进程的输出结果混在一起,数据处理的结果不一,系统中某些空闲的资源无法得到利用等问题。
为了保证系统中所有进程都能正常活动,是程序的执行具有可再现性,就必须提供进程同步机制。
操作系统中实现进程同步和互斥的机制都称为同步机制,通常采用某个标志实体来实现同步,如信号量机制,一个控制这些同步机构的程序被称为同步原语。
信号量被作为一种控制进程互斥和同步的物理变量,对信号量的操作,采用了一对严格设计的程序原语称为P,V原语。
信号量被定义为整形或记录型变量,当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,表示已无可用资源,其绝对值表示等待使用该资源的进程个数,即在该信号量队列上排队的进程数即每一个信号量有一个等待队列。
理发师问题是一个经典同步问题,本次课设采用信号量机制P,V原语描述,用C++实现算法。
摘要
理发师问题是经典进程同步问题,即一个理发店里有间配n个椅子的等候室和一个有理发椅的理发室,如果没有顾客,理发师就去睡觉,如果有顾客来时所有的椅子上都有人,顾客离去,如果等候室有空闲的椅子,顾客就会坐在其中一个椅子上,如果理发师在睡觉顾客会摇醒他。
本次设计采用信号量机制P、V原语来描述问题,并用C++编程实现P、V操作。
通过该题的设计过程,可以掌握理发师问题的原理,软件开发方法并解决实际问题的能力,以及理解进程同步概念学习如何分配资源。
关键字:
理发师问题,进程同步,信号量机制
正文
1.设计思想
1.1在此问题中可利用三个信号量和一个控制量来协调理发师,理发椅和顾客之间的活动,即:
。
(1),信号量customer用来记录正在等待理发的顾客数,并用作阻塞俩法师进程,初值为0;
(2),信号量barbers记录正在等候理发的顾客数,初值为0;并用作阻塞顾客进程。
(3),信号量waitting用来记录等候理发的顾客数,初值为0。
(4),信号量mutex用于互斥初值为1;
1.2此问题可抽象为n个生产者和1个消费者问题,顾客作为生产者每到来一个就使计数器count加1,以便让理发师理发(相当于消费)至最后一个顾客(产品),并且第一个到来的顾客负责唤醒理发师,而后到来的顾客在有空椅子的情况下坐下等待,否则离开。
在设计过程中用随机函数来产生进入理发店的顾客,定义理发师的理发函数用来实现理发操作,定义顾客被理发的函数来定义顾客被理发的操作,用顾客线程实现对顾客行为的控制,用理发师线程实现对理发师行为的控制。
定义主函数实现对两个线程的控制和执行操作。
1.3算法流程图
否
2.算法用到的主要数据结构(采用类c语言定义)
本程序用到了数据结构中的队列,理发的顾客由随机函数产生,顾客遵从先到先立法的原则,但队列的长度限制为理发店中椅子的个数,当理发店中没有空闲的椅子时,到来的顾客主动退出加入队列,理发师对队列中的顾客以先到先服务的原则理发。
while(true)
{
:
:
WaitForSingleObject(customers,INFINITE);//p(customers),等待顾客
:
:
WaitForSingleObject(Mutex,INFINITE);//等待互斥量
waiting--;//等待的人数减1
:
:
ReleaseSemaphore(barbers,1,NULL);//释放信号量
:
:
ResumeThread(barbers);//唤醒顾客进程
:
:
ReleaseMutex(Mutex);//v(mutex);
cuthair();//理发
finish++;//理发完毕的顾客数目加1
}
3.相关的各模块的伪码算法
(1)定义各种变量:
intlongwaiting(0);等待理发的顾客数
intchairs;店中的椅子数
intcount(0);顾客的序号
intfinish(0);已经理完发的顾客数
理发师理发函数voidcuthair();
顾客被理发函数voidgethaircut();
随机函数intrandom()产生顾客;
(2)实现进程的互斥及定义信号量来进行线程间的同步伪码:
DWORDa;
HANDLEMutex=:
:
CreateMutex(NULL,FALSE,”Mutex”);用来实现进程的互斥
HANDLEbarbers=:
:
CreateSemaphore(NULL,1,1,”barbers”);定义信号量来进行线程间的同步
HANDLEcustomer=:
:
CreateSemaphore;(NULL,0,3,”customers”);定义信号量来进行线程间的同步
(3)顾客线程伪码:
DWORDWINAPIcustomer(LPVOIDpParm2)
{:
:
WaitForSingleObject(Mutex,INFINITE);//P(mutex)来进行互斥操作
count++;//来的是第几个顾客
cout<<"顾客敲门!
第"< if(waiting { if(waiting! =0) {cout<<"现在有"< else cout<<"无人在等待理发"< waiting++; cout<<"剩余"< cout<<"有空位,顾客已坐下"< : : ReleaseSemaphore(customers,1,NULL);//V(customer) : : ResumeThread(customers);//唤醒理发师进程 : : ReleaseMutex(Mutex);//释放互斥量,以便其他线程使用 : : WaitForSingleObject(barbers,INFINITE);//等待理发 gethaircut();//理发并离开 } else { cout<<"没有空椅子,第"< : : ReleaseMutex(Mutex); } return0; } (4)理发师线程伪码: DWORDWINAPIbarber(LPVOIDpParm1) {while(true) { : : WaitForSingleObject(customers,INFINITE);//p(customers)等待顾客 : : WaitForSingleObject(Mutex,INFINITE);//等待互斥量 waiting--;//等待的人数减1 : : ReleaseSemaphore(barbers,1,NULL);//释放信号量 : : ResumeThread(barbers);//唤醒顾客进程 : : ReleaseMutex(Mutex);//v(mutex); cuthair();//理发 finish++;//理发完毕的顾客数目加1 } return0; } (5)主函数实现线程操作: intmain(intargc,char*argv[]) 4.调试分析 调试中遇到的问题及对问题的解决方法 (1)在运行过程中,头文件出错,头文件#include"stdafx.h"为MFC文件,此次设计未用MFC。 (2)P、V的操作要相互对应,P(Mutex)对应V(Mutex),P(customer)对应V(customer)。 5.测试结果 总结 进程的概念是操做系统中最基本,最重要的概念。 它是多道程序设计出现以后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律而引进的一个新概念,所有多道程序设计的操作系统都建立在进程的基础上。 操作系统中引进进程的概念,从理论角度讲,是对正在运行的程序活动规律的抽象;从实际角度讲,则是一种数据结构,目的在于清楚的刻画系统的动态规律,有效管理计算机系统中程序的运行。 在多道程序环境下,同一时刻可能有多个进程在计算机中运行,所以为了保证所有进程都正常活动就必须提供进程同步机制。 理发师问题是重要的进程同步问题,用于解决一个理发师和多个顾客之间的进程互斥和进程同步问题,理发师和顾客之间要协调工作,在本次课设中采用信号机制实现问题。 通过这次课设,我加深了对操作系统基础知识的理解,尤其是对进程、线程、进程同步内容的进一步掌握,以及学会了如何合理的分配系统资源。 总的来说,此次课设不但是我巩固了操作系统方面的知识,而且还是我收到了很多启发,懂得了怎样在今后更好的学习这门课程. 参考文献 1.汤子瀛,哲凤屏.《计算机操作系统》.西安电子科技大学学出版社. 2.王清,李光明.《计算机操作系统》.冶金工业出版社. 3.孙钟秀等.操作系统教程.高等教育出版社 4.曾明. Linux操作系统应用教程.陕西科学技术出版社. 5.张丽芬,刘利雄.《操作系统实验教程》.清华大学出版社. 6.孟静, 操作系统教程--原理和实例分析.高等教育出版社 7.周长林,计算机操作系统教程.高等教育出版社 8.张尧学,计算机操作系统教程,清华大学出版社 9.任满杰,操作系统原理实用教程,电子工业出版社 致谢 这次课设需要各方面的的基础知识,首先感谢王旭阳老师这一学期来不辞辛劳地给我们教授知识以及对课设的指导,在课设过程中,我不可避免的遇到了很多问题,这些问题在同学的帮助下才得以解决,在此感谢他们为这次课设提供了重要的建议 附件Ⅰ部分源程序代码 //babe.cpp: Definestheentrypointfortheconsoleapplication. #include"windows.h" #include"iostream.h" #include"math.h" intlongwaiting(0);//等待理发的顾客人数 intchairs;//店中椅子的总数目 charopen_door;//开门 charclose_door;//关门 intcount(0);//顾客的序号 intfinish(0);//已经理完发的顾客人数 DWORDa; HANDLEMutex=: : CreateMutex(NULL,FALSE,"Mutex");//用来实现进程的互斥 HANDLEbarbers=: : Cre
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 理发师 问题 说明书
![提示](https://static.bdocx.com/images/bang_tan.gif)