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

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

ID:35618083

大小:153.50 KB

页数:14页

时间:2019-04-02

操作系统课程设计报告--读者与写者问题_第1页
操作系统课程设计报告--读者与写者问题_第2页
操作系统课程设计报告--读者与写者问题_第3页
操作系统课程设计报告--读者与写者问题_第4页
操作系统课程设计报告--读者与写者问题_第5页
资源描述:

《操作系统课程设计报告--读者与写者问题》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、目录一课程问题描述1二课程设计目的与要求11.课程设计目的12.课程设计要求1三设计思想1四系统结构21.数据模块22.程序总体框图33.算法流程图34.读者写者结构45.读者写者线程状态46.主要代码分析5五实验环境5六实验运行结果5七课程设计总结7八参考文献8九附录(源代码)813读者与写者问题姓名:彭芳芳班级:08级计本(1)班学号:200881010117一课程问题描述以生产者消费者模型为基础,在Windows环境下创建一个控制台进程,在该进程中创建读者写者线程模拟生产者和消费者。写者线程写入数据,然后将数据放置在一个空缓冲区中供读者线程读取。读

2、者线程从缓冲区中获得数据,然后释放缓冲区。当写者线程写入数据时,如果没有空缓冲区可用,那么写者线程必须等待读者线程释放出一个空缓冲区。当读者线程读取数据时,如果没有满的缓冲区,那么读入线程将被阻塞,直到新的数据被写进去。二课程设计目的与要求1.课程设计目的(1)加深对进程概念的理解,明确进程和程序的区别。(2)进一步认识并发执行的实质。(3)分析进程竞争资源现象,学习解决进程互斥的方法。(4)了解Windows对进程管理的支持。2.课程设计要求通过Windows进程和线程创建方法实现一个简单的读者,写者程序,读者将1--10十个数字依次填入临界资源区gD

3、ata,当且仅当gData被读者消费后,写者才可以写入下一个数。读者-写者问题的读写操作限制:(1)写-写互斥,即不能有两个写者同时进行写操作;(2)读-写互斥,即不能同时有一个线程在读,而另一个线程在写;(3)读-读允许,即可以有一个或多个读者在读;三设计思想该课程设计主要是通过信号量机制来实现的。通过一个有界缓冲区(用数组来实现,类似循环队列)把读者和写者联系起来,假定读者和写者的优先级是相同的,只要缓冲区未满,写者就可以写入数据并将数据送入缓冲区。类似的,只要缓冲区未空,读者就可以从缓冲区中去读取数据。应该禁止写者向满的缓冲区送入数据,同时也应该禁

4、止读者从空的缓冲区中读取数据,这一机制有读者线程和写者线程之间的互斥关系来实现,与计算机打印两进程同步关系相同,读者和写者两类进程之间应满足下列两个同步条件:1、只有在缓冲池中至少有一个缓冲区已存入消息后,读者才能从中读取数据,否则读者必须等待;2、13只有缓冲池中至少有一个缓冲区是空时,写者才能把消息放入缓冲区,否则写者必须等待。为了满足第一个同步条件,设置一个同步信号量Full,它代表的资源是缓冲区满。这个资源是写者类进程所拥有,同样为了满足第二个同步条件,设置另一个同步信号量Empty,它代表的资源是空缓冲区数量,设置整型变量:存入指针in和取出指

5、针out。为解决读者写者问题,应该设置两个资源信号量,其中一个表示缓冲区的数目,用g_hReaderSemaphore表示,其初始值为有界缓冲区的大小size_of_buffer,另一个表示缓冲区中数据的数目,用g_hWriterSemaphore表示,其初始值为0。另外,由于有界缓冲区是一个临界资源,必须互斥使用,所以还需要再设置一个互斥信号量g_hMutex。在写者读者问题中,信号量实现两种功能。首先,它是写入数据和读取数据的计数器,计数器的初始值是可利用的资源数目(有界缓冲区的长度)。其次,它是确保数据的写入和读入之间动作同步的同步器。写者要写入一

6、个数据时,首先对资源信号量g_hReaderSemaphore和互斥信号量g_hMutex进行写入操作,申请资源。如果可以通过的话就写入一个数据,并把数据送入缓冲区。然后对g_hWriterSemaphore信号量进行读取操作,释放资源。读者读取数据过程与写入过程类似。当有读进程在读时,写进程被迫等待,其他读进程允许并发执行。使用readnum对读者计数,其初始值为0,mutex是对变量readnum进行互斥操作的信号量(这是因为readnum是共享变量,属于临界资源,必须互斥操作)故设mutex的初始值为1;writer是写信号量,其初始值为1.具体算

7、法如下:读者进程P1:写者进程P2:beginbeginP(mutex);P(write);readnum=readnum+1;writefile;ifreadnum=1thenP(write);V(write);V(mutex);endreadfileP(mutex);readnum=readnum-1;ifreadnum=0thenV(write);V(mutex);end四系统结构1.数据模块(1)读者模块:包括系统调用接口,读者活动描述主程序。系统接口的主要功能是通过管道向父进程发送系统调用命令,并读取父进程送来的返回值。(2)写者模块:包括系统

8、调用接口,写着活动藐视主程序。读者与写者活动程序根据临界资源的共享,互斥原则编制

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。