欢迎来到天天文库
浏览记录
ID:37501951
大小:516.52 KB
页数:22页
时间:2019-05-24
《山东大学操作系统试验-5》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、软件学院实验报告实验题目:理发店问题假设理发店的理发室中有3个理发椅子和3个理发师,有一个可容纳4个顾客坐等理发的沙发。此外还有一间等候室,可容纳13位顾客等候进入理发室。顾客如果发现理发店中顾客已满(超过20人),就不进入理发店。在理发店内,理发师一旦有空就为坐在沙发上等待时间最长的顾客理发,同时空出的沙发让在等候室中等待时间最长的的顾客就坐。顾客理完发后,可向任何一位理发师付款。但理发店只有一本现金登记册,在任一时刻只能记录一个顾客的付款。理发师在没有顾客的时候就坐在理发椅子上睡眠。理发师的时
2、间就用在理发、收款、睡眠上。请利用linux系统提供的IPC进程通信机制实验并实现理发店问题的一个解法。学号:日期:2012年5月17日班级:5班Email:实验目的:进一步研究和实践操作系统中关于并发进程同步与互斥操作的一些经典问题的解法,加深对于非对称性互斥问题有关概念的理解。观察和体验非对称性互斥问题的并发控制方法。进一步了解Linux系统中IPC进程同步工具的用法,训练解决对该类问题的实际编程、调试和分析问题的能力。硬件环境:IBM实验室计算机软件环境:eclipsegcc编译器Ubunt
3、u-Linux操作系统Gnome桌面实验步骤:1.问题分析该解法利用消息队列的每条消息代表每个顾客,将进入等候室的顾客组织到一个队列,将坐入沙发的顾客组织到另一个队列。理发师从沙发队列请出顾客,空出的沙发位置再从等候室请入顾客进入沙发队列。三个理发师进程使用相同的程序段上下文,所有顾客使用同一个程序段上下文。这样可避免产生太多进程,以便节省系统资源。2.算法设计说明如下:理发师程序(Barber){建立一个互斥帐本信号量:s_account,初值=1;建立一个同步顾客信号量:s_customer,
4、初值=0;建立沙发消息队列:q_sofa;建立等候室消息队列:q_wait;建立3个理发师进程:b1_pid,b2_pid,b3_pid;每个理发师进程作:while(1){以阻塞方式从沙发队列接收一条消息,如果有消息,则消息出沙发队列(模拟一顾客理发);唤醒顾客进程(让下一顾客坐入沙发)。用进程休眠一个随机时间模拟理发过程。理完发,使用帐本信号量记账。互斥的获取账本记账唤醒用账本理发师者否则没有消息(沙发上无顾客)则理发师进程在沙发队列上睡眠;当沙发队列有消息时被唤醒(有顾客坐入沙发)。}}顾客
5、程序(customer){while(1){取沙发队列消息数(查沙发上顾客数);如果消息数小于4(沙发没座满)以非阻塞方式从等候室队列接收一条消息(查等候室有顾客否),如果有消息将接收到的消息发送到沙发队列(等候室顾客坐入沙发);否则发送一条消息到沙发队列(新来的顾客直接坐入沙发);否则(沙发坐满)取等候室队列消息数(查等候室顾客数);如果消息数小于13发送一条消息到等候室队列(等候室没满,新顾客进等候室);否则在顾客同步信号量上睡眠(等候室满暂不接待新顾客);用进程休眠一个随机时间模拟顾客到达的
6、时间间隔。}}3.开发调试过程:用eclipse新建一个名为test5-a的cproject。新建sourcefolder新建名为ipc.c的C语言程序再建立以下名为ipc.h的C语言头文件再建立以下名为barber.c的C语言程序build项目,产生可运行的二进制文件。对程序进行调试,排除bug。用eclipse新建一个名为test5-b的cproject。新建sourcefolder新建名为ipc.c的C语言程序再建立以下名为ipc.h的C语言头文件再建立以下名为consumer.c的C语言程
7、序build项目,产生可运行的二进制文件。对程序进行调试,排除bug。打开两个终端,首先先运行顾客程序,如下图:然后此时再运行理发师程序,如下图:反之,如果先运行理发师程序,如下图:然后再运行顾客程序:此时理发师程序会随之变化,理发师醒来开始理发:结论分析与体会:首先运行顾客程序的话,顾客程序首先向沙发队列发送消息,然后向等候室队列发送消息,当两个队列都满了之后,该进程会暂停,及停止在顾客同步信号量上。而随着理发师程序的开始运行,理发师进程会唤醒顾客进程,及在顾客同步信号量上进行up操作,并且从消
8、息队列中接受消息。反之,若理发师程序先运行,则三个理发师由于无法从沙发队列上接收到消息,而且由于是阻塞式接受,就会阻塞在这个消息队列上,只有当顾客程序运行时,向沙发队列发送消息后理发师进程才会继续。通过编写这个实验,是我更加熟练了信号量的使用,明白了消息队列的使用方法,进一步了解了Linux系统中IPC进程同步工具的用法。附录A:本实验全部程序源代码及注释Barber.c/**barber.c**Createdon:2012-5-16*Author:taburiss*/#inclu
此文档下载收益归作者所有