- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
山大操作系统实验四选编
山东大学软件学院操作系统实验报告
实验题目:进程同步实验
实验目的:
加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥操作的效果,分析与研究经典进程同步与互斥问题的实际解决方案。了解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
实验步骤:
问题分析
实验要求提供者不断循环提供三种材料中的两种,而每个吸烟者拥有三种材料中的一种,当每个吸烟者拥有三种材料时才可吸烟。首先对于提供者来说,因为其要不断循环提供两种材料,所以在设置信号量时应该要使其一直运行,因此其信号量设置为,而吸烟者应该设置其信号量为0,等待提供者的唤醒
算法设计说明
sem_val=1; //提供者信号量设置
prod_sem=set_sem(prod_key,sem_val,sem_flg);
sem_val=0;//吸烟者信号量设置
cig_sem=set_sem(cig_key,sem_val,sem_flg);
pap_sem=set_sem(pap_key,sem_val,sem_flg);
glu_sem=set_sem(glu_key,sem_val,sem_flg);
在缓冲区中,提供者分别向其中存入C,P,G来识别其提供的三种材料,每次提供其中的两种,同时唤醒需要其提供的材料的吸烟者,
while(1){
down(prod_sem);
提供者不能同时进行提供材料,所以要设置互斥锁使其不能同时进行执行
down(pmtx_sem);
if(con_val%3==0){
sleep(rate);
buff_ptr[*pput_ptr]=C;
//向缓冲区存入数据,同时缓冲区指针指向下一个地址
*pput_ptr=(*pput_ptr+1)%buff_num;
buff_ptr[*pput_ptr]=P;
sleep(rate);
}
else if(con_val%3==1){
sleep(rate);
buff_ptr[*pput_ptr]=C;
*pput_ptr=(*pput_ptr+1)%buff_num;
buff_ptr[*pput_ptr]=G;
sleep(rate);
}
else{ sleep(rate);
buff_ptr[*pput_ptr]=P;
*pput_ptr=(*pput_ptr+1)%buff_num;
buff_ptr[*pput_ptr]=G;
sleep(rate);
}
*pput_ptr=(*pput_ptr+1)%buff_num;
up(pmtx_sem);
if(con_val%3==0) up(glu_sem);
else if(con_val%3==1) up(pap_sem);
else up(cig_sem);
con_val=(con_val+1)%3;
而对于吸烟者来说,其要做的是在刚开始时等待,等待提供者的唤醒,设置其最初的信号量为0,使其最初等待,同时还要设置互斥锁防止吸烟者同时进行吸烟,并从缓冲区间读取所需要的数据
sem_val=0;//设置吸烟者信号量
cig_sem=set_sem(cig_key,sem_val,sem_flg); down(cig_sem);
sem_val=1;//设置互斥锁
prod_sem=set_sem(prod_key,sem_val,sem_flg);
down(smtx_sem);
*cig_get_ptr=(*cig_get_ptr+2)%buff_num;
在其完成吸烟后,此时唤醒其他的吸烟者并且对互斥锁进行解锁。
up(smtx_sem);
up(prod_sem);
三个吸烟者所执行的操作差不多,通过不同的键值来区别三个吸烟者
实验收获
通过本次试验,理解了进程同步的一种设计方案
您可能关注的文档
- 山东省日照市2017中考物理复习-第十三章复习内能(共26张PPT)选编.ppt
- 山东省成武一中高中物理13.7光的色散课件选编.ppt
- 山东省日照市东港实验学校八年级数学下册16二次根式回顾与复习课件(新版)新人教版选编.ppt
- 山东省日照市2017届高三10月政治一轮复习-必修2第五课我国的人民代表大会制度(课件)(共24张PPT)选编.ppt
- 山东省日照市2017中考物理复习-第十六章复习电压电阻(共14张PPT)选编.ppt
- 山东省日照市东港实验学校八年级数学下册17勾股定理复习课件1(新版)新人教版选编.ppt
- 山东省兖州一中2017年地理复习备考策略《分析近几年高考新课标卷明确必修一备考方向》(共98张PPT)选编.ppt
- 山东省日照市东港实验学校八年级数学下册19.2.1正比例函数课件1(新版)新人教版选编.ppt
- 山东省德州市2016年中考语文试题及答案选编.doc
- 山东省日照市东港实验学校八年级数学下册19.2.1正比例函数课件2(新版)新人教版选编.ppt
最近下载
- FSSC22000 V6食品安全管理体系管理手册 .pdf VIP
- 建筑工程图集 16J914-1:公用建筑卫生间.pdf VIP
- 2025中级保育师资格考试题库资料及答案(浓缩400题).pdf VIP
- 外研版(2021)中职英语基础模块1 Unit 5 We Have Only One Earth For Better Performance 教案.docx VIP
- 07J912-1变配电所图集.pdf VIP
- 耳鼻咽喉科专科护士授权理论考试试题.docx VIP
- 关于辐向磁场的几处疑难问题释疑.pdf VIP
- 工程项目保修期的工作安排措施.doc VIP
- 一种便于穿脱的套头衣.pdf VIP
- 《尝试创作》教学设计.doc VIP
文档评论(0)