- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
山东大学软件学院操作系统实验报告
实验题目:进程同步实验
实验目的:
加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥操作的效果,分析与研究经典进程同步与互斥问题的实际解决方案。了解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: 本实验全部程序
您可能关注的文档
最近下载
- 麻醉中水电解质平衡管理.pptx
- 2025年新高考天津卷语文真题(解析版-).pdf VIP
- 腾势-腾势X-产品使用说明书-经典版(插混)-QCJ6490ST6HEV-腾势X插电式混动SUV用户手册20191212.pdf VIP
- 艾灸疗法ppt课件.ppt
- SHT 3225-2024 石油化工安全仪表系统安全完整性等级设计规范.docx VIP
- 装饰装修工装饰装修工试题二十二.doc VIP
- 装饰装修工装饰装修工试题六.doc VIP
- 三年级 上 音乐 苏教版.doc VIP
- 装饰装修工装饰装修工试题五.doc VIP
- 2024江西南昌凤凰城上海外国语学校教师招聘笔试模拟试题及答案解析.docx VIP
文档评论(0)