OS课程设计报告.doc
《OS课程设计报告.doc》由会员分享,可在线阅读,更多相关《OS课程设计报告.doc(15页珍藏版)》请在课桌文档上搜索。
1、-. z.交通大学操作系统课程设计课程:计算机操作系统题目:进程同步(读者-写者)目录目录1 1题目题目1 12 2设计概述设计概述1 12.1问题描述12.2采用信号量机制13 3课程设计目的及功能课程设计目的及功能1 13.1设计目的13.2设计功能14 4总体设计思想概述总体设计思想概述2 24.1功能流程图24.2开发平台及源程序的主要局部34.3数据构造34.4模块说明3-. z.4.5源程序35 5测试用例,运行结果与运行情况分析测试用例,运行结果与运行情况分析12125.1测试用例125.2运行结果125.3运行结果分析146 6总结与心得总结与心得1515-. z.1 1题目题
2、目进程同步模拟设计读者和写者问题2 2设计概述设计概述2.12.1问题描述问题描述模拟用信号量机制实现读者和写者问题,即有两组并发进程:读者和写者,共享一组数据区,进展读写操作,要求任一时刻“写者最多只允许一个,而“读者则允许多个。2.1.12.1.1要求要求允许多个读者同时执行读操作;不允许读者、写者同时操作;不允许多个写者同时操作。2.1.22.1.2读者和写者的相互关系:读者和写者的相互关系:2.22.2采用信号量机制采用信号量机制1Wmute*表示读写的互斥信号量,初值: Wmute* =1;2公共变量Rcount表示“正在读的进程数,初值:Rcount =0;3Rmute*:表示对R
3、count的互斥操作,初值:Rmute*=1。3 3课程设计目的及功能课程设计目的及功能3.13.1设计目的设计目的通过实验模拟读者和写者之间的关系,了解并掌握他们之间的关系及其原理。由此增加对进程同步的问题的了解。具体如下:1掌握根本的同步互斥算法,理解读者和写者模型;2了解windows中多线程多进程的并发执行机制,线程进程间的同步和互斥;3学习使用windows中根本的同步对象,掌握相应的API。3.23.2设计功能设计功能利用模拟用信号量机制实现读者和写者问题:通过用户控制读进程和写进程,反响读者和写者问题中所涉及的进程的同步与互斥。-. z.4 4总体设计思想概述总体设计思想概述4.
4、14.1功能流程图功能流程图开场输入读者和写者个数用户进展选择操作操作运行进程读者进程同时进展读操作,写者依次进入等待第一个写者进展写操作,后面进程依次进入等待状态多进程.NNo.1写者.YY用户进展选择操作操作结 束N-. z.4.24.2开发平台及源程序的主要局部开发平台及源程序的主要局部本实验用C+语言在Visual C+6.0中编程。4.34.3数据构造数据构造int r_num;/读者个数int w_num;/写者个数int Wmute*=1;/表示允许写或允许读int Rcount=0;/表示正在读的进程数int Rmute*=1;/表示对Rcount的互斥操作int r10=0,
5、0,0,0,0,0,0,0,0,0;/表示读者的状态,1表示正在读int w10=0,0,0,0,0,0,0,0,0,0;/表示写者的状态,1表示正在写/表示等待队列,0-9表示写者,10时需引入读者的等待队列,-1表示空int w_wait11=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1;/读者的等待队列,0-9表示对应的读者,-1为空int r_wait11=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1;4.44.4模块说明模块说明四组P、V函数:1写者进程由3个函数组成void write_p(int i)/模拟写者对Wmute*的P操作,同时也
6、作为写者进程的入口void write(int i)/开场写操作void write_v(int i)/模拟写者对Wmute*的V操作,写操作完成的时候调用2读者进程由8个函数组成void radd_p(int i)/模拟读之前对Rmute*的P操作,同时也作为读者进程的入口void radd(int i)/Rcount加1void read_p(int i)/模拟读者对Wmute*的P操作void radd_v(int i)/模拟读之前对Rmute*的V操作void read(int i)/读void rsub_p(int i)/模拟读之后对Rmute*的P操作,读操作完成的时候调用void
7、 rsub(int i)/Rcount减1void read_v(int i)/模拟读者对Wmute*的V操作void rsub_v(int i)/模拟读之后对Rmute*的V操作4.54.5源程序源程序*include *include *include -. z.*include using namespace std;int r_num; /读者个数int w_num; /写者个数int Wmute*=1; /表示允许写或允许读int Rcount=0; /表示正在读的进程数int Rmute*=1; /表示对Rcount的互斥操作int r10=0,0,0,0,0,0,0,0,0,0;
8、 /表示读者的状态,1表示正在读int w10=0,0,0,0,0,0,0,0,0,0; /表示写者的状态,1表示正在写int w_wait11=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1; /表示等待队列,0-9表示写者,10时需引入读者的等待队列,-1表示空int r_wait11=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1;/读者的等待队列,0-9表示对应的读者,-1为空void write_p(int i); /模拟写者对Wmute*的P操作,同时也作为写者进程的入口void write(int i); /开场写操作void write_v(
9、int i); /模拟写者对Wmute*的V操作,写操作完成的时候调用void radd_p(int i); /模拟读之前对Rmute*的P操作,同时也作为读者进程的入口void radd(int i); /Rcount加1void read_p(int i); /模拟读者对Wmute*的P操作void radd_v(int i); /模拟读之前对Rmute*的V操作void read(int i); /读void rsub_p(int i); /模拟读之后对Rmute*的P操作,读操作完成的时候调用void rsub(int i); /Rcount减1void read_v(int i);
10、/模拟读者对Wmute*的V操作void rsub_v(int i); /模拟读之后对Rmute*的V操作/模拟写者对Wmute*的P操作,同时为写者进程也作写的入口void write_p(int i)Wmute*-;if(Wmute*0) /表示如果Wmute*0,则该写者进入等待队列w_wait-Wmute*-1=i;elsewrite(i);/进展写操作void write(int i)-. z.wi=1;/模拟写者对Wmute*的V操作,写操作完成的时候调用void write_v(int i)wi=0;Wmute*+;if(Wmute*=0) /表示如果Wmute*=0)&(w_w
11、ait0w_num)j=w_wait0;for(k=0;kw_num;k+) w_waitk=w_waitk+1;write(j);elsej=r_wait0;for(k=0;kw_num;k+) w_waitk=w_waitk+1;for(k=0;kr_num;k+) r_waitk=r_waitk+1;radd_v(j);/模拟读之前对Rmute*的P操作,同时也作为读者进程的入口void radd_p(int i) Rmute*-;if(Rmute*0) /表示如果Rmute*0,则进入等待队列r_wait-Rmute*=i;elseradd(i);-. z./对于Rcount加1的控制
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OS 课程设计 报告
链接地址:https://www.desk33.com/p-12528.html