资源描述:
《进程经典,读者写者问题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、操作系统实验报告实验一进程同步问题读者数限定的读者写者问题学号:09141109班级:计科0904姓名:汤佳成绩:一实验目的用信号量实现读者数限定的读者写者问题。三实验步骤将所有的读者和写者分别放进两个等待序列中,当读允许时就让读者队列释放一个或多个读者,当写允许时,释放第一个写者操作。程序由三部分组成:1,读者模块:包括系统调用接口,读者活动描述主程序。系统接口主要功能是通过管道向父进程发送系统调用命令,并读取父进程送来的返回值。2,写者模块:包括系统调用接口,写者活动描述主程序。读者一一写者活动程序根据临界资源的共享,互斥原则编制。3,主控模块:主控
2、模块实现系统初始化系统调用命令接收与解释执行,系统调用功能的实现(包括信号量机制),及读者一一写者活动过程记录与显示。技术难点及解决方案与记录型信号量解决读者一一写着问题不同,信号量机制增加了一个限制,即最多允许RN个读者同吋读。为此,又引入了一个信号量L,并赋予初值为RN,通过执行wait(L,l,l)操作,来控制读者数目,每当有一个读者进入时,就要执行此操作,使L的值减1•当有RN个读者进入读后,L便减为0,第RN+1个读者耍进入读时,必然会因wait(Lzl,l)操作失败而堵塞。VarRNinteger;L,mx:semaphore:=RN,l;B
3、eginParbeginReader:beginRepeatSwait(L,l,l);Swait(mxU);Performreaderoperation;Ssignal(L,l);Untilfalse;EndWriter:beginRepeatSwait(mxzl/l,l,RNzO);Performwriteroperation;Ssignal(mx,l);Untilfalse;EndParendEnd其中,Swait(mx,l,O)语句起着开关作用,只要无writer进程进入些,mx=l,reader进程就都可以进入读。但是要一旦有writer进程进入
4、写时,其mx=O,则任何reader进程就都无法进入读。Swait(mx/1,1,RN,O)语句表示仅当既无Write进程在写(mx=l),又无reader进程在读(L=RN)吋,writer进程才能进入临界区写。五关键数据和算法流程数据:下面是一个测试数据文件的例子:1,W,3,5,2,W,16,5,3,R,5,2,4,W,6,5,5,R,4,3,6,R,17,7,流程:六测试方案与过程进程1是W操作,在吋间3吋进入队列,运行吋间是5,在它进入时没有进程占用资源,它既占用资源;知道它释放资源,等候的进程有3,4,5;进程2是R操作,在时间16时进入队列
5、,运行时间是5,在它进入时进程4占用资源,它等待资源,当4释放时占用资源;进程3是R操作,在时间5时进入队列,运行时间是2,在它进入时进程1占用资源,它等待资源,当进程1释放资源后,由于读者优先,进程3,5同吋调运资源;进程4是W操作,在时间6时进入队列,运行时间是5,在它进入时进程1占用资源,它等待资源,当进程1释放资源后,由于读者优先,进程3,5占用资源,它依然等待,直到进程3,5都结束;进程5是R操作,在时间4时进入队列,运行时间是3,在它进入时进程1占用资源,它等待资源,当进程1释放资源后,由于读者优先,进程3,5同吋调运资源;进程6是R操作,在
6、时间17时进入队列,运行时间是7,在它进入时进程2占用资源,它等待进程2释放后最后调用资源。七运行结果CreatedallthereaderandwriterCurrentTine=1CurrentTime=2Writer1isRequestingX■”X・XMXMXMXMXM*X-*X-*XXWriter1isWrittingtheSharedBuffer・■■CurrentTine=3Reader5isRequestingCurrentTine=4Reader3isRequesting买・XX・XX・XXXl€X・>€・MXXXX>€X・>€XX・X
7、XXXXXX・>€X・>€X・>€X・>€X・>€XX・>Oe・X*X*X*)tCurrentTine=5Writer4isRequestingCurrentTineCurrentTineCurrentTineWriter1is=6=?=8ExitReader5isReadingtheSharedBufferReader5isReadingtheSharedBufferReader3isReadingtheSharedBufferCurrentTine=9CurrentTine=10CurrentTine=11CurrentTin>e=9CurrentT
8、ine=10CurrentTine=11Reader3isExit.••XXMM