1、 操作系统课程设计操作系统课程设计 信息科学与工程学院软件实践实训报告 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. . 整体代码整体
2、代码 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
3、 不低于 5,数据发送和接收缓冲区 大小不小于 10 个。 2.某个生产者进程生产的消息供 K 个消费者进程消费。K=M。某些消费进程消费多个生 产者生产的消息。 生产者和消费者之间的对应关系可以在程序开始有一个文件中读入, 也可 以动态调整。 3.每个生产进程生产 M 个消息后结束运行。如果一个消费者进程没有对应的生产者进程在 运行后,也结束运行。 4. 设计分析设计分析 课程设计的主要目的是了解并且掌握进程之间的同步互斥, 和进程之间的通信问题。 结 合课本上的生产者与消费者问题可以从这方面来实现一个多进程的小系统, 并且解决多个进 程之间的通信, 并发等问题, 以此来达到课程设计的目的。
4、 理发师问题是将顾客看做生产者, 将理发师作为消费者。 设置一定数量的椅子的数目来作为缓存区的大小。 顾客来到的时候坐 在椅子上, 将自己作为 “产品” , 理发师理发的时候从椅子上叫走顾客, 相当于消费 “产品” , 从而达到了课程设计要求的前一个要求。 顾客作为生产者,每到来一个就使计数器 count 增加 1,以便让理发师理发(相当于消 费)至最后一个顾客(相当于产品) 。并且,第 1 个到来的顾客应负责唤醒理发师;如果不 是第 1 个到达的顾客,则在有空椅子的情况下坐下等待,否则离开理发店(该消息可由计数 器 count 获得) 。主要有以下一些函数来实现整个问题的实现过程: (1)用
5、随机函数 random()来产生进入理发店的顾客。 (2)定义理发师的理发函数 cuthair()用来实现理发操作。 (3)定义顾客被理发的函数 gethaircut()用来实现顾客被理发的操作。 (4)用顾客线程 customer 实现对顾客行为的控制。 (5)用理发师线程 barber 实现对理发师行为的控制。 (6)定义主函数 main 实现对两个线程的控制和执行操作。 信息科学与工程学院软件实践实训报告 4 5. 设计分工设计分工 成员:李宁 侯绍立 分工: 理发师进程、信号量的设置、理发师函数 :xxx 顾客进程、顾客函数、主函数:xx 6. 数据结构说明数据结构说明 本程序用到了数
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