




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统课程设计操作系统课程设计 信息科学与工程学院软件实践实训报告 2 目目 录录 1.1. 课程设计目的课程设计目的 3 3 2.2. 设计要求设计要求 3 3 3.3. 问题具体描述问题具体描述 3 3 4.4. 设计分析设计分析 3 3 5 5. . 设计分工设计分工 4 4 6.6. 数据结构说明数据结构说明 4 4 7 7. . 系统结构说明系统结构说明 4 4 8 8. . 系统调用说明系统调用说明 4 4 9 9. . 分工设计说明分工设计说明 5 5 1010. . 算法流程图算法流程图 5 5 1111. . 分工代码分工代码 6 6 1212. . 整体代码整体代码 7 7 1313. . 程序运行程序运行 1 10 0 1414. . 总结总结 1 11 1 信息科学与工程学院软件实践实训报告 3 1. 课程设计目的课程设计目的 1.内容围绕操作系统原理中最重要的基本概念和基本原理展开 2.巩固对原理知识的学习效果 3.加深对基本概念的理解 4.学习如何将基本原理和实际设计、应用有机结合 5.锻炼本专业的基本能力 2. 设计要求设计要求 1: 进程间通信、并发(同步/互斥)、文件读写 2: 内存管理、Dll、Windows 消息机制、IO (尚未最终定型) 3. 问题具体描述问题具体描述 1.完成 N 个生产者和 M 个消费者之间的并发控制,N、M 不低于 5,数据发送和接收缓冲 区 大小不小于 10 个。 2.某个生产者进程生产的消息供 K 个消费者进程消费。K=M。某些消费进程消费多个生 产者生产的消息。生产者和消费者之间的对应关系可以在程序开始有一个文件中读入,也 可以动态调整。 3.每个生产进程生产 M 个消息后结束运行。如果一个消费者进程没有对应的生产者进程在 运行后,也结束运行。 4. 设计分析设计分析 课程设计的主要目的是了解并且掌握进程之间的同步互斥,和进程之间的通信问题。 结合课本上的生产者与消费者问题可以从这方面来实现一个多进程的小系统,并且解决多 个进程之间的通信,并发等问题,以此来达到课程设计的目的。理发师问题是将顾客看做 生产者,将理发师作为消费者。设置一定数量的椅子的数目来作为缓存区的大小。顾客来 到的时候坐在椅子上,将自己作为“产品” ,理发师理发的时候从椅子上叫走顾客,相当于 消费“产品” ,从而达到了课程设计要求的前一个要求。 顾客作为生产者,每到来一个就使计数器 count 增加 1,以便让理发师理发(相当于消 费)至最后一个顾客(相当于产品) 。并且,第 1 个到来的顾客应负责唤醒理发师;如果不 是第 1 个到达的顾客,则在有空椅子的情况下坐下等待,否则离开理发店(该消息可由计 数器 count 获得) 。主要有以下一些函数来实现整个问题的实现过程: (1)用随机函数 random()来产生进入理发店的顾客。 (2)定义理发师的理发函数 cuthair()用来实现理发操作。 (3)定义顾客被理发的函数 gethaircut()用来实现顾客被理发的操作。 (4)用顾客线程 customer 实现对顾客行为的控制。 (5)用理发师线程 barber 实现对理发师行为的控制。 (6)定义主函数 main 实现对两个线程的控制和执行操作。 信息科学与工程学院软件实践实训报告 4 5. 设计分工设计分工 成员:李宁 侯绍立 分工: 理发师进程、信号量的设置、理发师函数 :xxx 顾客进程、顾客函数、主函数:xx 6. 数据结构说明数据结构说明 本程序用到了数据结构中的队列,理发的顾客由随机函数产生,顾客遵从先到先理发 的原则,但队列的长度限制为输入的理发店中的椅子的个数,当理发店的椅子没有空位的 时候,到来的顾客主动退出加入队列。理发师对队列中的顾客进行先到先服务的原则理发。 7. 系统结构说明系统结构说明 (一)头文件声明 #include “windows.h“ #include “iostream.h“ #include “math.h“ (二)定义各种变量 int long waiting(0); int chairs; char open_door; char close_door; int count(0); int finish(0); (三)信号量的定义 HANDLE Mutex =:CreateMutex(NULL, FALSE, “Mutex“); HANDLE barbers =:CreateSemaphore(NULL, 1,1, “barbers“); HANDLE customers =:CreateSemaphore(NULL,0,3,“customers“); 8. 系统调用说明系统调用说明 (1)CreateThread():创建线程 (2)CreateMutex():找出当前系统是否已经存在指定进程的实例。如果没有则创 建一个互斥体 ,用来同步。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程 将被挂起,直到第一个线程释放该互斥体。CreateMutex()函数可用来创建一个有名或 无名的互斥量对象 (3)CreateSemaphore():CreateSemaphore() 是系统提供的 API,包含在 Windows.h 中, 应用在同步的处理中。作用是创建一个新的信号机,执行成功,返回信号机对象的句柄; 信息科学与工程学院软件实践实训报告 5 零表示出错。一旦不再需要,一定记住用 CloseHandle 关闭信号机的句柄。它的所有句柄 都关闭以后,对象自己也会删除。一旦值大于零,信号机就会触发(发出信号)。 Semaphore 是一个同步问题机制,不论是 Event 或 Mutex,其他 Process 在执 WaitForSingleObject 时,就看当时的物件是 Signal 或 UnSignal 而决定是否等待,而 Semaphore 也相同,但是它要变成 Signal /UnSignal 的状态,却有些不同,它是提供一个计 数值,它允许在这个计数值之内,任何执行到 WaitForSingleObject 的 Thread 都不会停下来, 而且每执行 WaitForSingleObject 一次,计数值就减一,当计数值变成 0 时,该 Semaphore 才会处於 UnSignal 的状态,而某个 Thread ReleaseSemaphore 时,便会将计数值增加,以便 其他的 Thread 或本身可得 Signal 的讯号,而使 WaitForSingleObject 停止等待。 (4)ReleaseSemaphore():ReleaseSemaphore()函数的作用是增加信号机的计数。如 果成功,就调用信号机上的一个等待函数来减少它的计数。 (5)WaitForSingleObject():函数用来检测 hHandle 事件的信号状态,在某一线程中调 用该函数时,线程暂时挂起,如果在挂起的 dwMilliseconds 毫秒内,线程所等待的对象变 为有信号状态,则该函数立即返回;如果超时时间已经到达 dwMilliseconds 毫秒,但 hHandle 所指向的对象还没有变成有信号状态,函数照样返回。参数 dwMilliseconds 有两个 具有特殊意义的值:0 和 INFINITE。若为 0,则该函数立即返回;若为 INFINITE,则线程 一直被挂起,直到 hHandle 所指向的对象变为有信号状态时为止。 (6)ResumeThread():线程恢复函数,使用该函数能激活线程的运行,使 CPU 分配资源 让线程恢复运行。 (7)ReleaseMutex():释放由线程拥有的一个互斥体 (8)Sleep():睡眠等待 9. 分工设计说明分工设计说明 需要用到的信号量: HANDLE Mutex =:CreateMutex(NULL, FALSE, “Mutex“); 实现顾客与理发师对公用缓存区的互斥操作 HANDLE barbers =:CreateSemaphore(NULL, 1,1, “barbers“); HANDLE customers =:CreateSemaphore(NULL,0,3,“customers“); :WaitForSingleObject(customers,INFINITE); 等待顾客进程的 V(customer)操作 :WaitForSingleObject(Mutex,INFINITE); 申请操作顾客与理发师公用的缓存区 :ReleaseSemaphore(barbers,1,NULL); 释放信号量 barbers :ReleaseMutex(Mutex); 释放信号量 Mutex,允许顾客操作缓存区 10. 算法流程图算法流程图 程序开始 键入店中 的椅子数 信息科学与工程学院软件实践实训报告 6 尚未营 业 Mutex 理发师 线程 True 顾客 线程 False 椅 等待 是 离开 有顾客等待休息 否 理发师在睡觉则唤醒理发,否则 继续 是 11. 分工代码分工代码 #include “windows.h“ #include “iostream.h“ #include “math.h“ int long waiting(0); /等待理发的顾客人数 int chairs; /店中椅子的总数目 char open_door; /开门 char close_door; /关门 int count(0); /顾客的序号 int finish(0); /已经理完发的顾客人数 DWORD a; HANDLE Mutex =:CreateMutex(NULL, FALSE, “Mutex“); /用来实现进程的互斥 HANDLE barbers =:CreateSemaphore(NULL, 1,1, “barbers“); /定义信号量来进行线程间的 是否开始接 待顾客 信息科学与工程学院软件实践实训报告 7 同步 HANDLE customers =:CreateSemaphore(NULL,0,3,“customers“); /定义信号量来进行线程间 的同步 int random() /定义随机函数来产生顾客,并使两个顾客间的时间少于 15 秒 return (rand()*15000)/RAND_MAX; void cuthair() /理发师的理发函数,用时 15 秒 :Sleep (15000); coutchairs; coutopen_door; while (open_door!=y) coutopen_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); cout=8 return close_door; if (close_door=y) cout“暂停营业!欢迎下次光临!“endl; return 0; return 0; 13. 程序运行程序运行 开始 信息科学与工程学院软件实践实训报告 11 输入椅子数目 选择是否接待顾客 接待顾客 信息科学与工程学院软件实践实训报告 12 理发完毕 14. 总结总结 通过这个课程设计,对于课本上的关于进程之间的同步、互斥有了更深层的认识,而 且有了具体上直观上的理解。虽然对于第二个课程设计要求没有达到,但我也学到了许多。 进程作为系统的基本的操作单位,其之间的互斥、同步是非常重要的。生产者与消费者这 一个问题中,生产者与消费者公用一个缓存区,这就涉及到了两个进程对缓存区的互斥操 作,否者将会产生许多不切实际的问题,这也就失去的系统操作的实际意义。而通过一个 互斥信号量 Mutex 便很好的解决了这一个问题,两个进程在操作缓存区之前必须先申请使 用,如果信号量表示已有进程正在对缓存区进行操作则必须等待其完成方可。在做这个设 计的时候也遇到了许多问题,例如信号量的设置。由于这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肿瘤护理直播试题及答案
- 富马酸替诺福韦二吡呋酯片临床应用考核试题
- 2021届河北省保定市高三一模历史试题
- 肿瘤内科的试题及答案
- 2025年消防安全培训考试题库:消防隐患排查与现场安全
- 2025年室内设计师职业资格考试真题模拟卷-室内设计色彩心理学与情感表达试题
- 2025年乡村医生执业资格考试:农村常用药物使用与药物剂量试题
- 2025年初中学业水平考试地理模拟卷:区域地理专项试题及解析答案
- 2025年大学辅导员招聘考试题库:如何学生进行职业规划自我激励与支持试题
- 江西省赣州市寻乌中学2017-2018学年高二上学期期末考试数学(文)试题
- 临床医学循环系统试题及答案2025年版
- 水磨钻施工安全教育培训课件
- 中国资源循环集团招聘笔试题库2025
- 新版2026统编版小学道德与法治三年级上册 第4课《 科技力量大》第1课时 科技改变生活和科技改变观念 教学课件
- 实验室生物安全管理制度及流程
- 国内外新能源现状及发展趋势课件
- 临床常见护理技术操作常见并发症的预防与处理课件
- 高速公路改扩建桥梁拼宽施工技术及质量控制
- 双台110kV主变短路电流计算书
- 你不懂咖啡课件
- 危险物品储存安全隐患排查整治表
评论
0/150
提交评论