操作系统课程设计报告--读者与写者问题.doc
文本预览下载声明
目 录
一 课程问题描述 1
二 课程设计目的与要求 1
1.课程设计目的 1
2.课程设计要求 1
三 设计思想 1
四 系统结构 2
1.数据模块 2
2.程序总体框图 3
3.算法流程图 3
4.读者写者结构 4
5.读者写者线程状态 4
6.主要代码分析 5
五 实验环境 5
六 实验运行结果 5
七 课程设计总结 7
八 参考文献 8
九 附录(源代码) 8
读者与写者问题
姓名:彭芳芳 班级:08级计本(1)班 学号:200881010117
一 课程问题描述
以生产者消费者模型为基础,在Windows环境下创建一个控制台进程,在该进程中创建读者写者线程模拟生产者和消费者。写者线程写入数据,然后将数据放置在一个空缓冲区中供读者线程读取。读者线程从缓冲区中获得数据,然后释放缓冲区。当写者线程写入数据时,如果没有空缓冲区可用,那么写者线程必须等待读者线程释放出一个空缓冲区。当读者线程读取数据时,如果没有满的缓冲区,那么读入线程将被阻塞,直到新的数据被写进去。
二 课程设计目的
1.课程设计目的
(1)加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质。
(3)分析进程竞争资源现象,学习解决进程互斥的方法。
(4)了解Windows对进程管理的支持。
2.课程设计要求
通过Windows进程和线程创建方法实现一个简单的读者,写者程序,读者将1--10十个数字依次填入临界资源区gData,当且仅当gData被读者消费后,写者才可以写入下一个数。
读者-写者问题的读写操作限制:
1)写-写互斥,即不能有两个写者同时进行写操作2)读-写互斥,即不能同时有一个线程在读,而另一个线程在写3)读-读允许,即可以有一个或多个读者在读1、只有在缓冲池中至少有一个缓冲区已存入消息后,读者才能从中读取数据,否则读者必须等待;
2只有缓冲池中至少有一个缓冲区是空时,写者才能把消息放入缓冲区,否则写必须等待。Full,它代表的资源是缓冲区满。这个资源是写者类进程所拥有,同样为了满足第二个同步,设置另一个同步信号量Empty,它代表的资源是空缓冲区数量,设置整型变量:存入指针in和取出指针out。g_hReaderSemaphore表示,其初始值为有界缓冲区的大小size_of_buffer,另一个表示缓冲区中数据的数目,用g_hSemaphore表示,其初始值为0。另外,由于有界缓冲区是一个临界资源,必须互斥使用,所以还需要再设置一个互斥信号量g_hMutex。g_hReaderSemaphore和互斥信号量g_hMutex进行写入操作,申请资源。如果可以通过的话就写入一个数据,并把送入缓冲区。然后对g_hSemaphore信号量进行读取操作,释放资源。读者读取数据过程。 写者进程P2:
begin begin
P(mutex); P(write);
readnum=readnum+1; write file;
if readnum=1 then P(write); V(write);
V(mutex); end
read file
P(mutex);
readnum=readnum-1;
if readnum=0 then V(write);
V(mutex);
end
四 系统结构
1.数据模块
(1)读者模块:包括系统调用接口,读者活动描述主程序。系统接口的主要功能是通过管道向父进程发送系统调用命令,并读取父进程送来的返回值。
(2)写者模块:包括系统调用接口,写着活动藐视主程序。
读者与写者活动程序根据临界资源的共享,互斥原则编制。
(3)主控模块:包括信号量机制以及读者-写者活动过程记录与显示。
2.程序总体框图
3.算法流程图
写进程 读进程
输入数据
否
是
是 否 写者写入数据后被唤醒
4.读者写者结构
HANDLE m_hThread;//定义处理线程的句柄
int m_nType;//进程类型(读写)
int m_nStartTime;//开始时间
int m_nWorkTime;//运行时间
int m_nID;//进程号
int g_NumOfReading = 0;
int g_NumOfWriteRequest = 0;//申请写进程的个数
HANDLE g_hReadSema
显示全部