文档详情

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

发布:2018-05-14约1.03万字共14页下载文档
文本预览下载声明
目 录 一 课程问题描述 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
显示全部
相似文档