操作系统课程设计(江苏大学2012最新版)
更新时间:2024-06-22 13:02:01 阅读量: 综合文库 文档下载
- 操作系统 江苏大学出版社推荐度:
- 相关推荐
操作系统课程设计
题目:进程通信与进程同步机制实践
所在学院:计算机学院 所在班级:软件1001 学生姓名:张建彬 学生学号:3100608024 指导教师:薛安荣
2013年 1 月
一、题目
某银行提供10个服务窗口(7个对私服务窗口,3个对公服务窗口)和100个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用,有对公和对私两类号,每位顾客只能选取其中一个。当营业员空闲时,通过叫号选取一位顾客,并为其服务。请用P、V操作写出进程的同步算法。
二、目的
1、 掌握基本的同步与互斥算法 。
2、学习使用 Windows 2000/XP 中基本的同步对象,掌握相关 API 的使用方法。
3、了解 Windows 2000/XP 中多线程的并发执行机制,实现进程的同步与互斥 。
三、要求
1、当有顾客取号的时候,不允许其他顾客取号。 2、当服务窗口满的情况下,其他人必须等待。 3、当等待者没有的情况下,服务窗口必须等待。 4、打印:A、 初始状态
B、 中间变化的状态信息
C、以及最终状态信息。
四、原理及算法
顾客来了先取号,取号之后等待叫号,通知叫号之后去服务,营业员服务之后,继续叫号。定义五个同步信号量 座位信号量,通知等待营业员对私信号量,通知等待营业员对公信号量,通知对私叫号信号量,通知对公叫号信号量。在设置一个互斥信号量用于取号。再设计一个全局量来统计来的号码。
五、主要数据结构和流程
1、主要数据结构
定义一个全局变量统计顾客的号码,定义四个线程句柄数组,定义一个座位信号量来通知可分配的座位资源,通知等待营业员对私信号量通知可分配的等待对私资源,通知等待营业员对公信号量等待对公资源,通知对私叫号信号量通知可分配的等待通知对私服务资源,通知对公叫号信号量通知等待对公服务资源。在设置一个互斥信号量用于取号。
2、流程 主程序 P(&cs1 ) 服务 V(&s1 ) 创建服务员窗口线程(对私和对公服务) P(&cs2) 服务 V(&s2) 创建信号量,和互斥信号量 P(&seat) P(&mutex) 取号 V(&mutex) V(&cs1) 等待叫号 P(&s1) 服务 V(seat) 离开 来了顾客产生随机数,对私对公随机,确定是对公对私服务 P(&seat) P(&mutex) 取号 V(&mutex) V(&cs2) 等待叫号 P(&s2) 服务 V(seat) 离开
等待所有线程完成,程序结束
六、源程序清单
#include\#include \#include
#define CUSTOMER_COME_ADAY 200//一天来的顾客量
#define CUSTOMER_COMING_TIME 1000//相邻顾客最大间隔时间 int number = 0;//取号号码
HANDLE seat,s1,s2,cs1,cs2;//seat 桌位量cs1,cs2等待叫号量s1,s2通知顾客量 HANDLE mutex;//互斥量
HANDLE c1[CUSTOMER],c2[CUSTOMER],ss1[SERVER1],ss2[SERVER2];//顾客,营业员线程 DWORD WINAPI server1(PVOID s1pv) //营业员(对私)线程代码 { }
DWORD WINAPI server2(PVOID s2pv) //营业员(对公)线程代码 { }
DWORD WINAPI consumer1(PVOID c1pv)//顾客对私线程代码 {
WaitForSingleObject(seat,INFINITE);//p(&seat) while(true) { } return 0;
WaitForSingleObject(cs2,INFINITE);//p(&cs2) Sleep(SERVE_TIME);
cout<<\对公窗口叫号!\< ReleaseSemaphore(s2,1,NULL);//v(&s2) while(true) { } return 0; WaitForSingleObject(cs1,INFINITE);//p(&cs1) Sleep(SERVE_TIME); cout<<\对私窗口叫号!\< ReleaseSemaphore(s1,1,NULL);//v(&s1) } WaitForSingleObject(mutex,INFINITE);//p(&mutex) number++; int temp=number; cout<<\顾客\< cout<<\顾客\< ReleaseSemaphore(seat,1,NULL);//v(&seat) cout<<\顾客\< WaitForSingleObject(s1,INFINITE);//p(&s1) DWORD WINAPI consumer2(PVOID c2pv)//顾客对公线程代码 { } int main(void)//主程序 {//创建信号量和线程 cout<<\顾客您好,欢迎来到我行,很高兴为您服务!\< for(n=0;n WaitForSingleObject(seat,INFINITE);//p(&seat) WaitForSingleObject(mutex,INFINITE);//p(&mutex) number++; int temp=number; cout<<\顾客\< cout<<\顾客\< ReleaseSemaphore(seat,1,NULL);//v(&seat) cout<<\顾客\< WaitForSingleObject(s2,INFINITE);//p(&s2) } ss1[n]=CreateThread(NULL,0,server1,NULL,0,NULL); ss2[n]=CreateThread(NULL,0,server2,NULL,0,NULL); for(n=0;n srand( (unsigned)time( NULL ) ); n=0;n1=0; for(;number Sleep(20000); cout<<\银行结束服务,祝您愉快!\< int m=rand()%CUSTOMER_COMING_TIME; Sleep(m); int i=rand()%2; if(i==0) { } else { } c2[n1]=CreateThread(NULL,0,consumer2,NULL,0,NULL); n1++; c1[n]=CreateThread(NULL,0,consumer1,NULL,0,NULL); n++; 七、实验结果及程序分析 1、实验结果: (中间部分省略) 2、结果分析: 当顾客来了,首先查看是否有桌位,有桌位就去取号,取完号之后等 待服务,当营业员叫号以后开始被服务,服务完了之后离开。当所有线程执行完了之后程序结束。由于线程之间的同步执行,导致输出有点重叠。 八、课设总结 课程设计是一项复杂的工作,在程序设计的过程中,许多我们认为应该是正确的代码,往往不能运行我们想要的结果。这就需要我们的耐心与细心,去纠正任何一个可能的细小错误。此次操作系统课程设计,在指导教师的精心教导下,我们学会了如何采用系统调用中的信号量、P、V操作,编程解决银行窗口服务的功能。在编程的过程中,首先我们要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。计算机是一台聪明又笨拙的机器,只有我们的代码完全正确时,它才能准确地运行。 总的来说,通过这次课程设计,我将所学到的知识运用到了实践中,虽然在设计过程中遇到很大的困难,但是在老师和同学的 帮助下我克服了很多困难,并且最终获得了成功。从程序设计的过程中,我熟悉了 VC6.0 的运行环境,也熟悉了 Windows2000 的操作系统,学到了很多的知识,这些都令我受益匪浅。因此,在以后的 学习中,我可以学会自己编写一些类似的简单程序,将学到的东西加以实际的运用。
正在阅读:
庆祝改革开放40年主题征文范文精选10篇02-22
推荐下载 同志在先进表彰及新党员入党宣誓会上的讲话-最新12-29
电大审计学 形考 材料成本差异长期挂账牵出偷税大案案例分析 答案08-24
长春版七下语文古诗词曲默写集中训练10-14
锤击桩与静压机比较04-14
地佐辛剂量与芬太尼静脉全麻腹腔镜术后苏醒期关系探讨08-14
化学药物杂质研究的技术指导原则06-22
对外投资所得税问题概述10-05
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 江苏大学
- 最新版
- 操作系统
- 课程
- 设计
- 2012
- 2016年湖南省衡阳市初中毕业学业水平考试数学试题
- 高考时态真题87道(带详细讲解)
- 温度测量系统设计--毕业论文 - 图文
- 外电防护安全技术交底
- 【中考模拟】襄阳市襄城区2017年中考适应性考试数学试卷含答案
- 110402-1(西)底板抽放钻床抽放设计 - 图文
- 关于“厂务公开民主管理理论与实践征文”
- 立井外壁作业规程
- 二级同轴减速器课程设计设计说明书
- 高中数学组卷(2)
- 2017年山东省德州市中考政治试卷
- 大学英语四六级考试万能作文模板good
- 国际上销售阻燃剂商品牌号 表
- 妈妈俱乐部活动策划书
- 山东省济南市2014届高三三模(英语)1
- 新浙美版五年级下册全册美术教案 含教材分析
- 纸制品制品加工安全风险辨识分级管控指南
- 2018-2019学年海淀区高三英语期中考试试题(2018.11终稿 )
- 脚手架搭设安全施工方案
- 《甲骨文献集成》目录