操作系统读者与写者问题课程设计报告

上传人:cn****1 文档编号:564689581 上传时间:2023-03-23 格式:DOCX 页数:9 大小:88.51KB
返回 下载 相关 举报
操作系统读者与写者问题课程设计报告_第1页
第1页 / 共9页
操作系统读者与写者问题课程设计报告_第2页
第2页 / 共9页
操作系统读者与写者问题课程设计报告_第3页
第3页 / 共9页
操作系统读者与写者问题课程设计报告_第4页
第4页 / 共9页
操作系统读者与写者问题课程设计报告_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《操作系统读者与写者问题课程设计报告》由会员分享,可在线阅读,更多相关《操作系统读者与写者问题课程设计报告(9页珍藏版)》请在金锄头文库上搜索。

1、课程设计任务书学院信息学院专业计算机科学与技术学生姓名学号!题目读者与写者问题(进程同步问题)内容及要求:内容:读者与写者问题(进程同步问题)实验目的:了解进程同步的概念,理解信号量机制的原理,掌握信号量解决同步 问题的方法,进而学会进程的同步与互斥。#设计要求:编程模拟教材中讨论读者与写者的问题,要求能显示结果。任务交付:1程序源代码;2课程设计论文及电子文档。学院院长(签字):年 月日年 月日目录一、课程设计目的及要求1二、相关知识1三、题目分析2四、概要设计4五、代码及流程5六、运行结果11七、设计心得12八、参考文献12、课程设计目的及要求读者与写者问题(进程同步问题)用n个线程来表示

2、n个读者或写者。每个线程按相应测试数据文件的要求,进行读写 操作。请用信号量机制分别实现读者优先和写者优先的读者-写者问题。读者-写者问题的读写操作限制:1)写-写互斥;2)读-写互斥;3)读-读允许;写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资 源,则该读者必须等到没有写者处于等待状态后才能开始读操作。二、相关知识Windows API:在本实验中涉及的API有:1线程控制:CreateThread完成线程创建,在调用进程的地址空间上创建一个线程,以执行指定的 函数;它的返回值为所创建线程的句柄。HANDLE CreateThread(LPSECURITY_A

3、TTRIBUTES lpThreadAttributes,何一个读者运行时,都现在 rfirst 上加1,然后判定他是否取值为1如果是1,则做P(wrt),否则不做。(3)判定是否是第一个写者原理同(2)判定是否为第一个读者。(4)写者优先问题的解决需要用到的如下的信号量和变量rsem:初值为1的互斥信号量,在至少有一个写者准备访问数据时就不允许随后来的读者访 问数据wserm:初值为1的互斥信号量,之后有一个写者访问数据时其他写者和读者就被阻止对数 据的访问ReadMutex:创建写者的互斥信号量,初值为1Wri te Mu tex:创建读者的互斥信号量,初值为1z:初值为1的互斥信号量,在

4、至少有一个写着准备访问数据、且后面已经来一个读者时再 来的读者将在这个信号量上等待rifrrst:读者计数变量,初值为0wfirst:写者计数变量,初值为0P(ReadMutex); rfirst=rfirst+1; if(rfirst=1) P(wsem);写者优先的PV原语:reader(i):P(z);P(rsem);V(ReadMutex);V(rsem);V(z); 读取所需数据; P(ReadMutex);rfirst=rfirst-1; if(rfirst=0)V(wsem);V(ReadMutex);Writer():P(WriteMutex); wfirst=wfirst+1

5、;if(wfirst=1)P(rsem); V(WritedMutex); P(wsem); 改写所需数据; V(wsem); P(WriteMutex); wfirst=wfirst-1; if(wfirst=0)V(rsem); V(WriteMutex);读者写者(5)读者优先 与写者优先算法相反,有一个读者优先的算法,即只要有读者在读数据,写者被拒绝在 临界区外面,如果有源源不断的写者来,但是只要写者不是第一个,那么写者将会永远被拒 绝在临界区外面。wr t:初值为1的互斥信号量,只要有一个写者访问数据,则其他写者和读者就要被阻止 对数据的访问。mutex:保证读者互斥操作first的

6、信号量,初值为1first :读者计数变量,初值为0读者优先的PV原语:write():P(wrt);对数据进行修改V(wrt);read():P(mutex); first = first+1; if(first = 1)P(wrt);V(mutex); 读取所需数据 P(mutex);first = first+1;if(first = 0)V(wrt);V(mutex);四、概要设计(1)控制流程用CheckPersonLis t(PersonLis ts)函数检查PersonLis ts中是否有为创建的进程(读 写者)。如果有则创建相应的读写线程(2)创建读写者用 bool Crea

7、teReader(in t St ar tTime,in t WorkTime)函数创建读者写者相应的线程, 其 中 由windows提 供 的 函 数 为CreateThread(NULL,0,ReaderProc,(LPV0ID)pPerson,0,&dwThreadID);返回的是 DWORD 型 变量。在Crea teReader(in t St ar tTime,in t WorkTime)中还会初始化相应的读写者的基本信 息,例如何时申请数据何时读数据何时关闭线程等等。(3)读写者进程 参见图读者-写者的完整流程图。(4)同步与互斥WaitForSingleObject (信号量名

8、字,infinite)和 ReleaseSemaphore(信号量名 字,1,null)用于实现同步于互斥,执行WaitForSingleObject(信号量名字,infinite)信号 量相应的信号量减1,执行ReleaseSemaphore(信号量名字,1,null)恢复1。五、代码及流程.n,pPerson-ID);WaitForSingleObject(rsem,INFINITE);.n,pPerson-ID); WaitForSingleObject(ReadMutex,INFINITE);.n,pPerson-ID); while(CurrentTime StartTime + p

9、Person-WorkTime) .n,pPerson-ID); WaitForSingleObject(WriteMutex,INFINITE);.n,pPerson-ID); while(CurrentTime StartTime + pPerson-WorkTime) 当前时间=1:当前时间=2 =当前时间-3:当前时问=4 =当前时间=5:读者1读者1读者1写者1读者2读苕1写者1写者2由请谆数扌艮申请成功正在谆数扌艮 正在由请写数扌居- 由请谆数扌启 旗完数据退出正在写数- 正在由请写数扌居-m_m -m_m. I.1.1 u -UU H -UU _1_L_目目.目目 当当当当当前时

10、间 当前时间 当前时问 当前时间 当前时间If 21311121314当前时间=15:-m. -n- .1.1 寸寸 _H日 前前 当当写者2 读者2 2 -j/- n 读洁2读苕3I臥右3写完数据退出 由请成功 止在读教扌后-由请谆数需. 由请成功 正在谆数拆-1617B B前前当当_m -m.1B1?十七 J-L读苕3険完数据退出十,七 n读苕2旗完数据退出械工业出版社,20042 美Abraham Silberschatz, Peter Baer Galvin, Greg Gagne 著.郑扣根 译.操作 系统概念(第六版). 北京:高等教育出版社,20043 陈向群,向勇等.Windows操作系统原理(第二版).北京:机械工业出版社,2004.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号