- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
山东大学软件学院操作系统实验报告
实验题目:进程互斥实验
实验目的:
进一步研究和实践操作系统中关于并发进程同步与互斥操作的一些经典问题的解法,加深对于非对称性互斥问题有关概念的理解。观察和体验非对称性互斥问题的并发控制方法。进一步了解Linux系统中IPC进程同步工具的用法,训练解决对该类问题的实际编程、调试和分析问题的能力。
实验要求:
理发店问题:假设理发店的理发室中有3个理发椅子和3个理发师,有一个可容纳4个顾客坐等理发的沙发。此外还有一间等候室,可容纳13位顾客等候进入理发室。顾客如果发现理发店中顾客已满(超过20人),就不进入理发店。
在理发店内,理发师一旦有空就为坐在沙发上等待时间最长的顾客理发,同时空出的沙发让在等候室中等待时间最长的的顾客就坐。顾客理完发后,可向任何一位理发师付款。但理发店只有一本现金登记册,在任一时刻只能记录一个顾客的付款。理发师在没有顾客的时候就坐在理发椅子上睡眠。理发师的时间就用在理发、收款、睡眠上。
请利用linux系统提供的IPC进程通信机制实验并实现理发店问题的一个解法。
总结和分析示例实验和独立实验中观察到的调试和运行信息,说明您对与解决非对称性互斥操作的算法有哪些新的理解和认识?为什么会出现进程饥饿现象?本实验的饥饿现象是怎样表现的?怎样解决并发进程间发生的饥饿现象?您对于并发进程间使用消息传递解决进程通信问题有哪些新的理解和认识?根据实验程序、调试过程和结果分析写出实验报告。
硬件环境:
CPU: P4/1.8MHz 内存:256MB 硬盘: 10GB
软件环境:
Ubuntu08.4-Linux 操作系统
Gnome 桌面 2.18.3
BASH_VERSION=3.2.33(1)-release
gcc version 4.1.2
vi 3.1.2
gedit 2.18.2
OpenOffice 2.3
实验步骤:
问题分析
假设理发店的理发室中有3个理发椅子和3个理发师,有一个可容纳4个顾客坐等理发的沙发。此外还有一间等候室,可容纳13位顾客等候进入理发室。顾客如果发现理发店中顾客已满(超过20人),就不进入理发店。
在理发店内,理发师一旦有空就为坐在沙发上等待时间最长的顾客理发,同时空出的沙发让在等候室中等待时间最长的的顾客就坐。顾客理完发后,可向任何一位理发师付款。但理发店只有一本现金登记册,在任一时刻只能记录一个顾客的付款。理发师在没有顾客的时候就坐在理发椅子上睡眠。理发师的时间就用在理发、收款、睡眠上。
算法设计说明
该解法利用消息队列的每条消息代表每个顾客,将进入等候室的顾客组织到一个队列,将坐入沙发的顾客组织到另一个队列。理发师从沙发队列请出顾客,空出的沙发位置再从等候室请入顾客进入沙发队列。三个理发师进程使用相同的程序段上下文,所有顾客使用同一个程序段上下文。这样可避免产生太多进程,以便节省系统资源。
int sem_p(int semid, int index, int ipc_nowait) { //P操作
struct sembuf buf = {0, -1, 0};
buf.sem_num = index;
buf.sem_flg = ipc_nowait ? IPC_NOWAIT : 0;
if(semop(semid, buf, 1) == -1) {
if(ipc_nowait errno == EAGAIN) {
return -2;
}else{
perror(a wrong operation to semaphore occured!);
return -1;
}
}
return 0;
}
int sem_v(int semid, int index, int ipc_nowait) { //V操作
struct sembuf buf = {0, 1, 0};
buf.sem_num = index;
buf.sem_flg = ipc_nowait ? IPC_NOWAIT : 0;
if(semop(semid, buf, 1) == -1) {
if(ipc_nowait errno == EAGAIN) {
return -2;
}else{
perror(a wrong operation to semaphore occured!);
return -1;
}
您可能关注的文档
最近下载
- 2电气火灾监控系统设计施工及验收规范.doc VIP
- 危险房屋鉴定报告(模板).doc VIP
- 浴池人员卫生知识培训课件.pptx VIP
- SIEMENS西门子 S7-1500作为Modbus TCP客户端访问多个设备的方法.pdf VIP
- JTGT 3832—2018公路工程预算定额.docx
- 甘肃省定西市2023-2024学年九年级上册11月月考数学试题(含解析).docx VIP
- power-electronics西班牙SD6K-1通用变频器操作手册.pdf
- 桥梁下部结构施工方案_四川_柱式墩_钢筋砼承台.docx VIP
- 配电箱安装工程施工方案.doc VIP
- 职业生涯人物访谈报告(采访教师)汇编.pdf VIP
原创力文档


文档评论(0)