- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、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);
三个吸烟者所执行的操作差不多,通过不同的键值来区别三个吸烟者
实验收获
通过本次试验,理解了进程同步的一种设计方案,通过信号量来控制不同进程之间的相互关系。加深了对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥操作的效果,理解了经典进程同步与互斥问题的实际解决方案。
实验过程中遇到了许多问题,初期一时难以下手,主要原因是不清楚进程互斥的内部机理。在结束本实验后,对进程互斥了解加深,利于对操作系统的学习。
附录 A: 本实验全部程序源代码及注释
Ipc.c
#inc
您可能关注的文档
- 山东省各市2014年中考数学分类解汇编专题12押轴1分析.doc
- 山东省安全生产在线模拟考试题库分析.doc
- 山东省大教育联盟2016届高三地理期末考试试题分析.doc
- 屋顶绿化设计与施工要点(北京)分析.ppt
- 山东省安装工程消耗量定额综合解释1分析.doc
- 山东省威海市2016届高三上学期期末考试物理试卷分析.doc
- 山东省大教育联盟2016届高三上学期期末考试地理分析.doc
- 山东省安装工程消耗量定额解释(2003年)分析.doc
- 山东省威海市2016届高三上学期期末考试物理试题分析.doc
- 山东省实验中学2016届高三第四次诊断性考试文科综合历史试题Word版含答案分析.doc
- 农业碳汇项目经济效益评估与2025年市场潜力预测报告.docx
- 人教版高中英语必修第一册期末复习各单元必背作文范文.pdf
- 2025年跨境电商平台供应链数字化优化策略研究.docx
- 2025年社区旧家电回收拆解产业园废弃物处理技术进展报告.docx
- 2025年社区嵌入式养老驿站服务模式创新报告.docx
- 2025年食品工业节能减排技术改造项目质量管理报告.docx
- 环境监测智能化技术在数据质量控制中的应用前景与挑战报告.docx
- 2025年社区嵌入式养老服务设施设备维护与更新策略研究报告.docx
- 2025年社区嵌入式养老驿站运营成本分析与效益评估报告.docx
- 跨境电商办公用品电商仓储物流仓储物流配送网络规划报告2025.docx
文档评论(0)