- 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: 本实验全部程序
您可能关注的文档
- 山东省2015年高中历史第7课古罗马的政制与法律课件5岳麓版必修1概要.ppt
- 山东省各市2014年中考数学分类解汇编专题12押轴1概要.doc
- 山东省临沂市2016届高三下学期教学质量检测(一模)地理试题概要.doc
- 山东省临沂市蒙阴县第四中学九年级语文下册《10那树》课件新人教版概要.ppt
- 山东省安全生产在线模拟考试题库概要.doc
- 山东省大教育联盟2016届高三上学期期末考试地理概要.doc
- 山东省安装工程消耗量定额解释(2003年)概要.doc
- 山东省安装消耗量定额手记概要.doc
- 山东省威海市2016届高三上学期期末考试物理试卷概要.doc
- 山东省市政工程绿色施工考评标准概要.doc
文档评论(0)