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

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

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

1、课程设计任务书学院信息学院专业计算机科学与技术学生姓名学号题目读者与写者问题(进程同步问题)内容及要求:內容:读者与写者问题(进程同步问题)实验目的:了解进程同步的槪念,理解信号量机制的原理,掌握信号量解决同步 问题的方法,进而学会进程的同步与互斥。设计要求:编程模拟教材中讨论读者与写者的问题,要求能显示结果。任务交付:1。程序源代码;2课程设计论文及电子文档.进度安排:16周确定题目,查找资料,上机编程;20周一上机编程调试,验收答辩,提交课程序设计报告书。指导教师(签字):年 月日学院院长(签字):年 月日一、课程设计目的及要求1二、相关知识1三、题目分析2四、槪要设计5五、代码及流程6六

2、、运行结果12七、设计心得13八、参考文献13一、课程设计目的及要求读者与写者问题(进程同步问题)用n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求,进行读写 操作。请用信号量机制分别实现读者优先和写者优先的读者一写者问题。读者-写者问题的读写操作限制:1)写一写互斥:2)读-写互斥:3)读一读允许;写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资 源,则该读者必须等到没有写者处于等待状态后才能开始读操作。二、相关知识Windows API:在本实脸中涉及的API有:1线程控制:CreateThread完成线程创建.在调用进程的地址空间上创建一个线程,

3、以执行指定的 函数;它的返回值为所创建线程的句柄。HANDLE CreateThread (/ SD/ in itial stack size/ threadLPSECURITY_ATTRIBUTES IpThreadAttri butes,DWORD dwStackSize,LPTHREAD_START_ROUTINE IpStartAddress,funct i onLPVOID IpParameter, DWORD dwCreat ionF lags, LPDWORD IpThreadld):2 ExitThread用于结束当祈线程。VOID ExitThread (/ thread a

4、rgument/ creation option/ thread i dentifierDWORD dwExitCode/ exit code for this thread);3 Sleep可在指定的时间内挂是当前线程。VOID Sleep (DV/ORD dwMi I I i seconds / s I eep t ime);4信号量控制:WaitForSi ng I eObject可在指定的时间内等待指定对象为可用状态:DWORD WaitForSing I eObject (HANDLE hHandle,/ hand Ie to objectDV/ORD dwMi I I isecon

5、ds / t imeout interva IhHandle为等待的对象,也就是实现同步或者互斥的对象。该函数一执行,相应的信号 量就减去1,如果信号量小于等于0.那么他一直在循环.5实现信号量互斥和同步CreateSemaphore用于创建信号量,根据参数的不同可以利用它实现互斥和同步。ReleaseSemaphore用于释放信号量,使用后相应的信号量加1HANDLE CreateSemaphore (IpSemaphoreAttr i butes, /SDLPSECURITY.ATTRIBUTES/initial count/max imum countLONG, I InitiaICou

6、nt,LONG,IMaximumCount, LPCTSTR IpName /object name ):Re IeaseSemaphore (/handle to semaphore /cont increment amount /previous countHANDLE hSemaphore,LONG I Re IseaseCount, LPLONG IpPrev i ousCount ):三. 题目分析将所有的读者和所有的写者分别放进两个等待队列中,当读允许时就让读者队列释放一 个或多个读者,当写允许时,释放第一个写者揀作。(1) 构筑读者进程和写者进程间的临界区题目中说的一批数据被多个

7、读者、写者共享使用,允许多个读者同时访问这些数据,但 是如果有一个写者在访问数据时,就不允许其他读者或写者使用,所以.对这一批数据既要 保证读者和写者互斥使用,也要保证写者与写者互斥使用.也就是说,在读者进程程序中, 使用数据的程序段应该构成临界区;在写者进程程序中,使用数据的程序段应该构成临界区。(2) 判定是否是第一个读者根据上面的分析,希望在读者进程中有一个办法能判定请求进入临界区的是否是第一个 读者。如果是第一个读者,就对信号董wsem做P操作,以取得和写者的同步为此,设置一 个变# rfirst,初值为0任何一个读者运行时,都现在rfirst 加1,然后判定他是否取 值为1。如果是1

8、,則做P (wrt),否则不做.(3) 判定是否是第一个写者原理同(2)判定是否为第一个读者。(4) 写者优先问題的解决需要用到的如下的信号量和变量rsem:初值为1的互斥信号量,在至少有一个写者准备访问数据时就不允许随后来的读者访 问数据wserm:初值为1的互斥信号量,之后有一个写者访问数損时其他写者和读者就被阻止对数 据的访问ReadMutex:创建写者的互斥信号量,初值为1Wr iteMutex:创建读者的互斥信号量,初值为1 z:初值为1的互斥信号量,在至少有一个写着准备访问数据、且后面已经来一个读者时再来的读者将在这个信号量上等待 r ifrrst:读者计数变量,初值为0 wf i

9、 rst:写者计数变量,初值为0写者优先的PV原语:reader (i):P (z);P(rsem);P (ReadMutex):rfi rst=rfi rst+1:if (rf irst=1)P (wsem):V (ReadMutex);V(rsem):V (z);读取所需数据;P (ReadMutex):rfi rst=rfi rst-1;if (rfi rst=O)V (wsem);Writer ():P(Wr iteMutex); wfi rst=wfirst+1; if(wfirst=1)P (rsem):V(Wr itedMutex);P (wsem):改写所需数据;V (wsem

10、):P(Wr iteMutex): wfi rswfi rst1; if (wf i rst=O)V (rsem):V(Wr iteMutex);)V (ReadMutex):读老写者图3。1读者一写老的完整流程框图(5)读者优先与写者优先算法相反,有一个读者优先的算法,即只要有读者在读数据,写者被拒绝在临 界区外面,如果有源源不断的写者来,但是只要写者不是第一个,那么写者将会永远被拒绝 在临界区外面。wrt:初值为1的互斥信号董,只要有一个写者访问数据,则其他写者和读者就要被阻止对 数据的访问.mutex:保证读者互斥操作first的信号莹,初值为1first :读者计数变量,初值为0读者优

11、先的PV原语:P (mutex);fi rst = fi rst+1;if (fi rst = 1)P (wrt):P(wrt);对数据进行修改:V(wrt);V (mutex): 读取所需数据P(mutex);fi rst = first+1;if (fi rst = 0)V(wrt): V (mutex);四、概要设计(1) 控制流程用CheckPersonLi st (PersonLi sts)函数检查PersonLi sts中是否有为创建的进程(读 写者)如果有则创建相应的读写线程(2) 创建读写者用 bool CreateReader (int StartTime, int Work

12、Time)函数创建读者写者相应的线程, 其中由 windows 提供的函数为 CreateThread (NULL, 0, ReaderProc, (LPVOID) pPerson, 0, &dwThreadID);返回的是DWORD型变量。在CreateReader ( int StartTime, int V/orkTime)中还会初始化相应的读写者的基本信 息,例如何时申请数据何时读数据何时关闭线程等等。(3) 读写者进程参见图2. 1读者-写者的完整流程图。(4) 同步与互斥WaitForSingleOb ject (信号量名字,infinite)和 Re leaseSemaphore

13、 (信号量名字,1, nul I)用于实现同步于互斥,执fr WaitForSingleObjec t (信号量名字,infinite)信号量相 应的信号量减1 f执行Re IeaseSemaphore (信号量名字,1,nul I)恢复1 o五、代码及流程/写者优先算法# include(windows h#i nc1ude#i nc1udestdio. h)#i nc1udestr ingo h)# include! stdl ib. h# include#def ineMAX_PERSON10#def ineREADER0#defineWRITER1#defi neEND-1#defin

14、eRREADER#defineWWRITERtypedef struct _PersonHANDLEThread;intType;intStartTime;intWorkTime:intID; Person;PersonPersonsMAX_PERSON:intNumPerson = 0:longCurrentTime二 0;intPersonLi sts = R, 1,3,2, W, 2,5, /*读写互斥*/3, W, 5, 5, /*写写互斥*/4, R, 3, 5, /*写读互斥*/5, R, 15,2, /*读读不互斥*/END,;intrfirst = 0;intwf i rst = 0:intNumOfReaders = 0;intNumOfWr i ters = 0:HANDLE rsem;/*初值为1的互斥信号量,在至少有一个写者准备访问数摇时就不允许随后来 的读者访问数据*/HANDLE wsem: /*初值为1的互斥信号量,之后有一个写者访问数摇时其他写者和读者就被阻 止对数据的访问*/HANDLE z;/*初值为1的互斥信号量,在至少有一个写着准备访问数据、且后面已经来一个 读者时再

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

当前位置:首页 > 建筑/环境 > 施工组织

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