山大操作系统实验四概要.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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: 本实验全部程序

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档