- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实验四吸烟者问题201000130133计算机4班郑思雨
计算机科学与技术学院实验报告
?
实验题目:实验四 吸烟者问题 学号:201000130133 日期:2012-4-3 班级: 计算机4班 姓名: 郑思雨 Email:1412561943@
实验目的:
1、加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥操作的效果。
2、分析与研究经典进程同步与互斥问题的实际解决方案。
3、了解Linux系统中IPC进程同步工具的用法,练习并发协作进程的同步与互斥操作的编程与调试技术。
硬件环境:?
实验室计算机
软件环境:
语言编写。实验环境均为Linux操作系统
实验步骤:
1、了解实验的目的,了解并掌握与进程间通信IPC中的3个对象:共享内存、信号灯数组、
消息队列到呢个有关的系统调用,并能熟练的掌握。
2、阅读实验题目并分析实验的需求。
抽烟者问题。假设一个系统中有三个抽烟者进程,每个抽烟者不断地卷烟并抽烟,
抽烟者卷起并抽掉一颗烟需要有三种材料:烟草、纸和胶水。一个抽烟者有烟草,一个纸,
另一个有胶水。系统中还有两个供应者进程,它们无限地供应所有三种材料,但每次仅轮
流提供三种材料中的两种。得到缺失的两种材料的抽烟者在卷起并抽掉一颗烟后会发信号
通知供应者,让它继续提供另外的两种材料。这一过程重复进行。 请用以上介
绍的IPC同步机制编程,实现该问题要求的功能。
首先创建ipc.h文件,在里面定义生产者/消费者共用的IPC函数的原型和变量。
然后创建ipc.c文件,在里面定义生产者/消费者共用的IPC的具体的相应函数。
创建provider文件,在其中对生产者的一些行为进行定义,先利用系统调用创建共享内存区域,并设定他的长度并获取共享内存的首地址。
然后设定生产者互斥与同步的信号灯,并为他们设置相应的初值。当有生产者进程在运行而其他生产者请求时,相应的信号灯就会阻止他,当共享内存区域已满时,信号等也会提示生产者不能再往共享内存中放入内容。
三个生产者到底哪个应该运行,我们是采取选取随机数的方法进行的,通过随机数来确定应该有哪个进程运行,既有哪个生产者来进行生产。
创建smoker文件,在其中对消费者的一些行为进行定义,先利用系统调用来创建共享内存区域,并设定他的长度并获取共享内存的首地址。
然后设定消费者互斥与同步的信号灯,并为他们设置相应的初值。当有消费进程在运行而其他消费者请求时,相应的信号灯就会阻止它,当共享内存区域已空时,信号等也会提示生产者不能再从共享内存中取出相应的内容。
同样采取用随机数的方法来确定由哪个消费者来运行进程,但同时运行的消费者应该与相应的生产者对应起来,只有这样运行结果才会正确。
代码实现如下:
#include ipc.h
/*
* get_ipc_id() 从/proc/sysvipc/文件系统中获取 IPC 的 id 号
* pfile: 对应/proc/sysvipc/目录中的 IPC 文件分别为
*
msg-消息队列,sem-信号量,shm-共享内存
* key: 对应要获取的 IPC 的 id 号的键值
*/
int get_ipc_id(char *proc_file,key_t key)
{
FILE *pf;
int i,j;
char line[BUFSZ],colum[BUFSZ];
if((pf = fopen(proc_file,r)) == NULL){
perror(Proc file not open);
exit(EXIT_FAILURE);
}
fgets(line, BUFSZ,pf);
while(!feof(pf)){
i = j = 0;
fgets(line, BUFSZ,pf);
while(line[i] == ) i++;
while(line[i] != ) colum[j++] = line[i++];
colum[j] = \0;
if(atoi(colum) != key) continue;
j=0;
while(line[i] == ) i++;
while(line[i] != ) colum[j++] = line[i++];
colum[j] = \0;
i = atoi(colum);
fclose(pf);
return i;
}
fclose(pf);
return -1;
}
/*
* 信号灯上的 down/up 操作
* semid:信号灯数组标识符
* semnum:信号灯数组下标
* buf:操作信号灯的结构
*/
int down(int sem_id)
{
struct sembuf buf;
buf.sem_op =
您可能关注的文档
- 金色雅园站支架施工方案.doc
- 金属切削机床实践报告书.doc
- 计算机网络一tcpip协议与socket编程认识实验.doc
- 金融pos接入解决方案.doc
- 精品超市分析报告.docx
- 静电场和稳恒电场基本知识.doc
- 近三年全国高考生物试题分类汇编(稳态).doc
- 课程设计报告2 详细版 程昭 200904213009.doc
- 客运专线隧道接触网基础预留方案探讨.doc
- 控制系统仿真与cad课程设计报告.doc
- 山东高密大昌纺织有限公司校园招聘模拟试题附带答案详解最新.docx
- 山东高密大昌纺织有限公司校园招聘模拟试题附带答案详解1套.docx
- 北京市房屋租赁合同范本个人版6篇.docx
- 山东香驰豆业集团校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版含答案.docx
- 山东靖海实业集团有限公司校园招聘模拟试题附带答案详解完美版.docx
- 贴吧赞助合同10篇.docx
- 计算机网络与internet.ppt
- 2024年【煤炭生产经营单位(机电运输安全管理人员)】模拟考试及答案.pdf
- 山东雪花生物化工股份有限公司校园招聘模拟试题附带答案详解参考答案.docx
- q2025最新特许经营合同9篇.docx
最近下载
- 急诊与灾难医学-第二十二章 人为灾难的医学救援.pptx
- 030904《项目实施进度里程碑确认单》.xlsx VIP
- 治疗篇第六章骨伤科四肢病证推拿讲解.ppt
- 2025年广西机场管理集团有限责任公司人员招聘笔试备考题库及答案解析.docx
- 七年级下册英语课件Unit 3《Keep Fit》(Section A 1a-1d).pptx VIP
- 福特嘉年华说明书.pdf
- 医院医疗设备管理员及使用人员岗位职责.pptx VIP
- 江苏省小学科学实验知识竞赛题库附答案.pdf VIP
- 教科版(2017秋)四年级下册科学期末复习训练题(含答案).docx VIP
- 八年级下数学期中测试题(a卷).pdf VIP
文档评论(0)