课 程 设 计
课程设计名称:操作系统原理课程设计
专 业 班 级 : 计科 2004
学 生 姓 名 : 许云龙
学 号 : 202016010402
指 导 教 师 : 左志斌
课程设计时间:2022.5.23—2022.6.3
I
计算机科学与技术 专业课程设计任务书
学生姓名
许云龙
专业班级
计科 2004
学号
202016010402
题 目
收银员与顾客问题
课题性质
其它
课题来源
自拟课题
指导教师
左志斌
同组姓名
无
主要内容
设计要求:编程模拟下面同步问题:在某超市有 m 个收银员,且同时最多
允许有 n 个顾客购物,我们可以将顾客和收银员看成是两类不同的进程,且工
作流程如下所示。为了利用 PV 操作正确地协调这两类进程之间的工作,设置
了三个信号量 S1、S2 和 Sn,S1 代表可进入超市的顾客数量,S2 代表收银员数
量,Sn 代表当前要出超市的顾客数量,初值分别为 m、n、和 0。设计要求:编
程模拟下面同步问题:
1) 在某超市有 m 个收银员,且同时最多允许有 n 个顾客购物;
2) 当顾客数少于收银员数时,顾客可以立即进行付款;当顾客数多于收银
员数时,顾客必须排队等待付款;
3) 需要将等待进入,进入,等待付款和出门看成四个不同的子进程,利用
PV 操作正确地协调这两类进程之间的工作。
任务要求
掌握信号量通信方式的一般方法,了解系统实现“阻塞”和“唤醒”功能
的方法和技巧。同时掌握进程同步和互斥的概念及实现技术。
掌握进程的创建方式,掌握进程通信。
参考文献
1、《操作系统原理实用教程》任满杰 电子工业出版社 2006
2、汤子瀛 《计算机操作系统》(修订版)西安电子科技大学出版社 2001
3、张尧学 史美林《计算机操作系统教程》实验指导 清华大学出版社 2000
4、罗宇等 《操作系统课程设计》机械工业出版社 2005
5、《计算机操作系统(第四版)》,汤小丹,西安:西安电子科技大学出
版社,2014
审查意见
指导教师签字:
教研室主任签字: 年 月 日
II
目 录
1 需求分析 .........................................................................................................................................1
2 概要设计 .........................................................................................................................................1
(1) 构筑顾客类型 .................................................................................................................1
(2)构筑等待队列,就绪队列,完成队列 ...........................................................................1
(3)判定是否可以出入队 .......................................................................................................2
(4)信号量设置 .......................................................................................................................2
(4)PV 控制 ..............................................................................................................................2
(5)控制流程 ...........................................................................................................................2
3 运行环境 .........................................................................................................................................7
(1)硬件环境 ...................................................................................................................................7
(2)软件环境 ...................................................................................................................................7
4 开发工具和编程语言 .....................................................................................................................8
(1)开发环境 ...................................................................................................................................8
(2)编程语言 ...................................................................................................................................8
5 详细设计 .........................................................................................................................................8
(1) 变量表 .............................................................................................................................8
(2) 初始化表 .........................................................................................................................9
(3) waitIn 子进程 ..............................................................................................................11
(4) getIn 子进程 ................................................................................................................11
(5) payMoney 子进程 ..........................................................................................................12
(6) getOut 子进程 ..............................................................................................................13
(7) 头文件一览表 ...............................................................................................................14
(8) 子进程启动顺序 ...........................................................................................................14
6 调试分析 .......................................................................................................................................17
7 测试结果 .......................................................................................................................................18
(1) 运行结果 .......................................................................................................................18
(2) 结束提醒 .......................................................................................................................21
(3) 特判处理 .......................................................................................................................22
参考文献 ...........................................................................................................................................23
心得体会 ...........................................................................................................................................24
1
1 需求分析
收银员与顾客问题类似于经典的生产者和消费者问题,属于经典的进程同步
问题。需要实现以下问题:
(1) 在某超市有 m 个收银员,且同时最多允许有 n 个顾客购物;
(2) 不断产生新顾客请求进入超市。
(3) 当顾客数少于顾客容量最大数时,顾客可以立即进入超市;当顾客数等
于顾客容量最大数时,顾客必须排队等待进入超市;
(4) 当顾客数少于收银员数时,顾客可以立即进行付款;当顾客数多于收银
员数时,顾客必须排队等待付款;
(5) 付款完成后走出超市。
经过分析可知:需要将等待进入,进入,等待付款和出门看成四个不同的子
进程,利用 PV 操作正确地协调这两类进程之间的工作。
2 概要设计
(1)构筑顾客类型。
num 用于存储顾客编号。
定义为全局变量,每个进程都有一个单独的 num 互不干涉,通过入队出队改
变数值。
(2)构筑等待队列,就绪队列,完成队列。
Int *waitIn;
int *waitPay;
int *waitOut;构建三个队列,来存储顾客信息。
等待队列用于存放等待进入超市的顾客的信息;就绪队列用于存放进入超市
等待付款的顾客信息;结束队列用于存放付款完毕等待出门的顾客。
setid1;代表等待队列的队尾,初始为 0;
getid1;代表等待队列的队首,初始为 0;
2
setid2;代表就绪队列的队尾,初始为 0;
getid2;代表就绪队列的队首,初始为 0;
setid3;代表完成队列的队尾,初始为 0;
getid3;代表完成队列的队首,初始为 0;
通过自增和取模操作实现循环缓冲队列。
(3)判定是否可以出入队。
void enque(List &l,int id) 对顾客进行插入操作,将顾客插入某一队列
int deque(List &L)对顾客进行删除操作,当顾客由等待到付款时,就从等待队
列里将顾客删除,例如当顾客等待到就绪时,就从等待队列里将顾客删除。
通过两种组合实现状态转换,例如等待队列出队,出队的顾客进入就绪队列
(4)信号量设置
maxCus 可进入的人数; empNum 收银员人数;endNum 付款完毕等待出门的人数;
信号量初值分别为 n,m,0;
(4)PV 控制
P 操作:对信号量进行减 1 操作,判断结果是否大于等于 0,如果大于等于 0,
则进入下一步操作,反之继续等待。
V 操作:对信号量进行加 1 操作,唤醒等待的进程。
(5)控制流程:
用 waitIn 这个进程产生新顾客并将之插入等待队列。
流程如图 2.1
评论0