1、 计算机与信息学院 操作系统课程设计报告 一、一、 开题报告开题报告 (一) 该项课程设计的意义; 1. 更加深入的了解读者写者问题的算法; 2. 加深对线程,进程的理解; 3. 加深对“线程同步”概念的理解,理解并应用“信号量机制” ; 4. 熟悉计算机对处理机的管理,了解临界资源的访问方式; 5. 了解 C+中线程的实现方式,研读 API。 (二) 课程设计的任务 多进程/线程编程:读者-写者问题。 设置两类进程/线程,一类为读者,一类为写者; 随机启动读者或写者; 显示读者或写者执行状态; 随着进程/线程的执行,更新显示; (三) 相关原理及算法描述; 整体概况: 该程序从大体上来分只有
2、两个模块,即“读者优先”和“写者优先”模块. 读者优先: 如果没有写者正在操作,则读者不需要等待,用一个整型变量 readcount 记录 读者数目,用于确定是否释放读者线程,readcount 的初值为 0.当线程开始调入时. 每个读者准备读. 等待互斥信号,保证对readcount 的访问,修改互斥.即readcount+. 而当读者线程进行读操作时,则读者数目减少(readcount-).当 readcout=0 时, 说明所 有的读者都已经读完,离开临界区唤醒写者(LeaveCriticalSection(), 释 放互斥信号(ReleaseMutex(h_Mutex). 还需要一个互
3、斥对象 mutex 来实现对全局变量 Read_count 修改时的互斥. 另 外,为了实现写-写互斥,需要增加一个临界区对象 Write。当写者发出写请求时, 必须申请临界区对象的所有权。通过这种方法,可以实现读-写互斥,当 Read_count=1 时(即第一个读者到来时) ,读者线程也必须申请临界区对象的所有 权 写者优先: 写者优先与读者不同之处在于一旦一个写者到来,它应该尽快对文件进行写 操作,如果有一个写者在等待,则新到来的读者不允许进行读操作。为此应当填加 一个整形变量 write_count,用于记录正在等待的写者的数目,write_count 的初值 为 0.当线程开始调入时
4、.只允许一个写者准备读. 等待互斥信号,保证对 write_count 的访问,修改互斥.即 write_count+.而当写者线程进行读操作时,则相应写者数目减 少(write_count-).当 write_count=0 时, 说明所有的读者都已经读完, 离开临界区唤 醒读者,释放互斥信号. 为了实现写者优先, 应当填加一个临界区对象 read, 当有写者在写文件或等待 时,读者必须阻塞在 read 上。 (四) 开发环境; VC+6.0 (五) 预期设计目标; 读者-写者问题的读写操作限制(包括读者优先和写者优先) 1.写-写互斥:不能有两个写者同时进行写操作 2.读-写互斥:不能同时有一个线程在读,而另一个线程在写。 3.读-读允许:可以有一个或多个读者在读。 若读者的优先权比写者高, 如果读者申请进行读操作时已有另一个读者正在 进行读操作,则该读者可直接开始读操作.不必经过别的操件 若读者的优先权比写者高,如果第一个写者已经占有了文件的时候.则别的读 者必需等待该操作完成后.才能开始读操作. 若写者的优先权比读者高, 在