操作系统课程设计报告_第1页
操作系统课程设计报告_第2页
操作系统课程设计报告_第3页
操作系统课程设计报告_第4页
操作系统课程设计报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统课程设计报告操作系统课程设计报告班 级 软件1001 学 号 姓 名 指导老师 完成时间:2013年 1 月 9日一、 课程设计题目某银行提供10个服务窗口(7个对私服务窗口,3个对公服务窗口)和100个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用,有对公和对私两类号,每位顾客只能选取其中一个。当营业员空闲时,通过叫号选取一位顾客,并为其服务。请用p、v操作写出进程的同步算法。二、 课程设计目的熟练掌握pv操作的相关知识;认识信号量的相关含义;加深对线程(进程)的认识;三、 课程设计要求要求打印:a) 初始状态b) 中间变

2、化的状态信息c) 以及最终状态信息。四、 原理及算法 目前,在以银行营业大厅为代表的窗口业务,大量客户的拥挤排队已成为了这些企事业单位改善服务品质、提升企业形象的主要障碍。排队叫号系统的使用将成为改变这种情况的有力手段。排队系统完全模拟了人群排队的全过程,通过取票进队。排队等待、叫号服务等功能,很好的解决了客户在服务机构办理业务是所遇到的各种排队、拥挤和混乱现象,代替了人们站队的辛苦,把顾客等待的烦恼变成了一段难得的休闲时光,使客户拥有了一个自由的空间和一份美好的心情。 排队过程大致流程为:4、顾客到窗口办理 休息区的顾客听到呼叫就到响应窗口进行一对一服务。3、营业员按钮呼叫 窗口操作员按“下

3、一位”,当前窗口就显示顾客排队号并语音呼叫“请xx到x号窗口”2、顾客休息等待 取到排队号的顾客在休息区休息等待,注意大厅的提示信息1、 顾客取号需要办理业务的顾客到取票机前取号,并获得打印出的排队号票本次的银行叫号系统有pv操作来模拟实现。1) 实验中用到的相关知识介绍(windows环境下)1同步对象同步对象是指windows中用于实现同步与互斥的实体,包括信号量(semaphore)、互斥量(mutex)、临界区(critical section)和事件(events)等。本实验中使用到信号量、互斥量和临界区三个同步对象。同步对象的使用步骤:l 创建/初始化同步对象。l 请求同步对象,进

4、入临界区(互斥量上锁)。l 释放同步对象(互斥量解锁)。这些对象在一个线程中创建,在其他线程中都可以使用,实现同步与互斥。2相关api的功能及使用利用windows sdk提供的api编程实现实验题目要求,而vc中包含有windows sdk的所有工具和定义。要使用这些api,需要包含堆这些函数进行说明的sdk头文件最常见的是windows.h(特殊的api调用还需要包含其他头文件)下面给出的是本实验使用到的api的功能和使用方法简单介绍(1) createthread功能创建一个在调用进程的地址空间中执行的线程格式handle createthread( lpsecurity_attribu

5、tes lpthreadattributes, dword dwstacksize, lpthread_start_routine lpstartaddress, lpvoid lpparamiter, dword dwcreationflags, lpdword lpthread)参数说明lpthreadattributes指向一个lpsecurity_attributes(新线程的安全性描述符)。dwstacksize定义原始堆栈大小。lpstartaddress指向使lpthraed_start_routine类型定义的函数。lpparamiter定义一个给进程传递参数的指针。dwcre

6、ationflags定义控制线程创建的附加标志。lpthread保存线程标志符(32位)(2) createmutex功能创建一个命名或匿名的互斥量对象格式handle createmutex(lpsecurity_attributes lpmutexattributes, bool binitialowner, lpctstr lpname);参数说明lpmutexattributes必须取值null。binitialowner指示当前线程是否马上拥有该互斥量(即马上加锁)。lpname互斥量名称。(3) createsemaphore功能创建一个命名或匿名的信号量对象格式handle cr

7、eatesemaphore(lpsecurity_attributes lpsemaphoreattributes, long linitialcount, long lmaximumcount, lpctstr lpname );参数说明lpsemaphoreattributes必须取值null。linitialcount信号量的初始值。该值大于0,但小于lmaximumcount指定的最大值。lmaximumcount信号量的最大值。lpname信号量名称。(4) waitforsingleobject功能使程序处于等待状态,直到信号量hhandle出现(即其值大于等于1)或超过规定的等待

8、时间格式dword waitforsingleobject(handle hhandle, dword dwmilliseconds);参数说明hhandle信号量指针。dwmilliseconds等待的最长时间(infinite为无限等待)。(5) releasesemaphore功能对指定信号量加上一个指定大小的量。成功执行则返回非0值格式bool releasesemaphore(handle hsemaphore,long lreleasecount,lplong lppreviouscount );参数说明hsemaphore信号量指针。lreleasecount信号量的增量。lpp

9、reviouscount保存信号量当前值。(6) releasemutex功能打开互斥锁,即把互斥量加1。成功调用则返回0格式 bool releasemutex(handle hmutex);参数说明 hmutex互斥量指针。(7) initializecriticalsection功能初始化临界区对象格式void initializecriticalsection(lpcritical_section lpcriticalsection);参数说明 lpcriticalsection指向临界区对象的指针。(8) entercriticalsection功能等待指定临界区对象的所有权格式vo

10、id entercriticalsection(lpcritical_section lpcriticalsection);参数说明 lpcriticalsection指向临界区对象的指针。2) 实验中pv原语1. 实验中的信号量seats; /空座位信号量,初始值100cu1; /高级客户信号量,初始值0ser1; /对公服务窗口,初始值0cu2; /普通客户信号量,初始值0ser2; /对私服务窗口,初始值0h_mutex; /互斥量,初始值0五、 主要数据结构和流程:顾客到来,先看是否有空座等待对共窗口服务p(& ser1)得到服务v(& seats)p(& se

11、ats)p(& hmutex)到取号机取号v(& hmutex)有座zu对私服务客户对公服务客户等待对私窗口服务p(& ser2)得到服务v(& seats)普通客户线程高级客户线程创建线程while(true)p(& cu1)叫号服务v(& ser1)对私窗口线程while(true)p(& cu2)叫号服务v(& ser2)对公窗口线程六、 实验测试结果及分析七、 课程设计总结本次课程设计基本完成了银行较好系统问题的全部过程,结果满足设计要求,验证无误。我自己设计的是6个信号量,但是老师说只要4个信号量就行,我设计的多了两个队

12、共对私窗口的信号量,所以我的程序可能略显繁琐。实验中也遇到了一些错误,刚开始写的程序在执行main函数时,程序只能输出第一个高级(普通)客户的取号信息,然后程序就自动终止,我看了很久都没找到哪里错了,之后问了同学才想到,我的程序在输出第一个高级(普通)客户的取号信息已经结束,所以线程也就相应的终止了,所以就加了一句死循环的语句来解决。在程序能顺利执行的情况下也遇到了一些问题,如输出的客户号数大于我设置的最大值等,但问题都被我一一解决。由于时间紧促以及个人能力的不足,模拟系统在功能上尚存在一些问题, 在很多方面都有改进的空间。 但总体上是实现应有的功能。 对于巩固在操作系统 pv操作原理课上所学

13、的知识, 加深对操作系统中进程同步和互斥、 临界区管理等问题认识和理解,有着很好的效果,同时也初步体会了软件设计流程。八、 源程序清单#include<windows.h> /sdk头文件,提供api编程#include<string> /字符数组定义头文件#include<iostream>#include <time.h> /日期和时间头文件using namespace std;#define maxthreadnum 200 /每天来的顾客量handle seats; /空座位信号量handle cu1; /高级客户信号量handle s

14、er1; /对公服务窗口handle cu2; /普通客户信号量handle ser2; /对私服务窗口handle h_mutex; /互斥量handle shuzumaxthreadnum; /存储线程句柄的数组int g=1; /高级客户号数int p=1; /普通客户号数dword winapi customer1(pvoid cu1pv)/高级客户线程代码int n;dword waitforsemaphor,waitforsemaphor1,waitformutex,m_delay=997,n_dalay=7099;/等待状态,等待时间waitforsemaphor=waitfor

15、singleobject(seats,-1);/等待座位waitformutex= waitforsingleobject(h_mutex,-1);/等待取号cout<<g<<"号高级客户正在取号"<<endl; /取号n=g; g+;cout<<n<<"号高级客户取号成功,等待服务"<<endl; sleep(m_delay); / 等待服务releasemutex(h_mutex); /打开互斥锁releasesemaphore(cu1,1,null); /waitforsema

16、phor1=waitforsingleobject(ser1,-1);cout<<n<<"号高级客户得到服务"<<endl;sleep(n_dalay); /对高级客户进行服务时间releasesemaphore(seats,1,null);cout<<n<<"号高级客户已离开"<<endl;cout<<endl;return 0;dword winapi server1(pvoid ser1pv) /营业员(对共)线程代码while(true)dword waitfor

17、semaphor,m_delay=1000; waitforsemaphor=waitforsingleobject(cu1,-1);sleep(m_delay); /叫号服务releasesemaphore(ser1,1,null);/dword winapi customer2(pvoid cu2pv)/普通客户int m;dword waitforsemaphor,waitforsemaphor1,waitformutex,m_delay=997, n_dalay=6199;waitforsemaphor=waitforsingleobject(seats,-1);/等待座位waitfo

18、rmutex= waitforsingleobject(h_mutex,-1);/等待取号cout<<p<<"号普通客户正在取号"<<endl; /取号m=p;p+;cout<<m<<"号普通客户取号成功,等待服务"<<endl; sleep(m_delay); releasemutex(h_mutex); /打开互斥锁releasesemaphore(cu2,1,null);waitforsemaphor1=waitforsingleobject(ser2,-1);cout<

19、<m<<"号普通客户得到服务"<<endl;sleep(n_dalay); /对普通客户进行服务cout<<m<<"号普通客户已离开"<<endl;cout<<endl;releasesemaphore(seats,1,null);return 0;dword winapi server2(pvoid ser2pv) /营业员(对共)线程代码while(true)dword waitforsemaphor,m_delay=1003; waitforsemaphor=waitforsingleobject(cu2,-1);sleep(m_delay); /叫号服务releasesemaphore(ser2,1,null);/int main()seats=createsemaphore(null,100,100, null); /创建信号量cu1=createsemaphore(null,0,100,null);ser1=createsemaphore(null,0,100,nu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论