读者写着问题系统设计书_第1页
读者写着问题系统设计书_第2页
读者写着问题系统设计书_第3页
读者写着问题系统设计书_第4页
读者写着问题系统设计书_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0 读者写着问题系统设计书 1 引 言 题的提出 在 境 下,创建一个控制台进程,此进程包含 n 个线程。用这 n 个线程来表示 n 个读者或写者。每个线程按相应测试数据文件的要求进行读写操作。用信号量机制分别实现读者优先和写者优先问题。 务与分析 具体要求 : 读者 括读者优先和写者优先) 1) 写 能有两个写者同时进行写操作 2) 读 能同时有一个线程在读,而另一个线程在写。 3) 读 以有一个或多个读者在读。 读者优先的附加限制:如果读 者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。 写者优先的附加限制:如果一个读者申请进行读操作时已有另一个写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。 运行结果显示要求:要求在每个线程创建、发出读写申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。 测试数据文件格式: 测试数据文件包括 n 行测试数据,分别描述创建的 n 个线程是读者还是写者,以及读写操作的开始时间和持续时间。每行测试数据包括四个字段, 每个字段间用空格分隔。第 1 个字段为正整数,表示线程的序号。第 2 个字段表示线程的角色, R 表示读者, W 表示写者。第 3 个字段为一个正数,表示读写开始时间:线程创建后,延迟相应时间(单位为秒)后发出对共享资源的读写申请。第4 个字段为一个正数,表示读写操作的延迟时间。当线程读写申请成功后,开始 1 对共享资源进行读写操作,该操作持续相应时间后结束,释放该资源。 课程设计目的 : 通过 实现经典的读者写者问题,巩固对线程及其同步机制的学习效果,加深对相关基本概念的理解,并学习如何将基本原理和实际设计有机的结合。 课程设计内容 : 根据本设计书所提供的基础知识,分析相关代码得到相关的框图写出设计报告。 2 设计思路 可以将所有读者和所有写者分别存于一个读者等待队列和一个写者等待队列中,每当读允许时,就从读者队列中释放一个或多个读者线程进行读操作;每当写允许时,就从写者队列中释放一个写者线程进行写操作。 者优先 读者优先指的是除非有写者在写文件,否则读者不需要等待。所以可以用一个整数变量 录当前的读者数目,用于确定是否需要释放正在等待的写者进程(当 时,表明所有的读者读完,需要 释放写者等待队列中的一个写者)。每当一个读者开始读文件时,必须修改 量。因此需要一个互斥对象 实现对全局变量 改时的互斥。 另外,为了实现写 要增加一个临界区对象 写者发出写请求时,必须申请临界区对象的所有权。通过这种方法,可以实现读 时(即第一个读者到来时),读者线程也必须申请临界区对象的所有权。 当读者拥有临界区的所有权时,写者阻塞在临界区对象 。当写者拥有临界区的所有权时,第一个读者判断 完 ”1”后阻塞在 ,其余的读者由于等待对 判断,阻塞在 。 2 读者优先 者优先 写者优先与读者优先相类似。不同之处在于一旦一个写者到来,它应该尽快对文件进行写操作,如果有一个写者在等待,则新到来的读者不允许进行读操作。为此应当填加一个整形变量 于记录正在等待的写者的数目,当 时,才可以释放等待的读者线程队列。 为了对全局变量 现互斥,必须增加一个互斥对象 为了实现写者优先,应当填加一个临界区对象 有写者在写文件或等待时,读者必须阻塞在 。 读者线程除了要对全局变量 现操作上的互斥外,还必须有一个互斥对象对阻塞 一过程实现互斥。这两个互斥对象分别命名为 3 3 程序调试运行和使用平台 行平台 操作系统原理课程的实验环境如下: 硬件环境 : 微型计算机( 台 软件环境 : 000/作系统 , 以 成开发环境为 主要开发工具 。 体操作如下 : + 发环境 从“开始”菜单中选择“程序” | +示 + 发环境主窗口。 单击 单中的 项显示 建)对话框(如图 示)。 图 话框 单击 签,在 目)选项卡中,选择 在 置)文本框中指定一个路径,如 E: 目名称)文本框中为项目输入一个名字,最好是见名知意,如“ 单击 定)按钮,便可勇导创建应用程序,其步骤如下: 4 第一步 选择【 用类型,即单文档应用程序,其他使用默认值,单击【 钮。 第二步 让用户选择程序中是否加入数据库支持,在此使用默认值【 单击【 钮。 第三步 让用户选择在程序中加入复合文档,自 动化或 件的支持,在此使用默认值,单击【 钮。 5 第四步 让用户选择应用程序的一些特性,在此使用默认值,单击【 钮。 第五步 让用户选择应用程序主窗口的风格、在源文件中是否加入注释、使用怎样的库,在此使用默认值,单击【 钮。 6 第六步 用户可以对 供的缺省类名、基类名、头文件名、源文件名进行修改,使用默认值,单击【 钮。则会显示出用户在前面几个步骤中作出的选择内容,单击【 钮,系统开始创建应用程序,并 回到 + 主界面。 运行过的应用程序 以脱离 + 独运行,运行该文档可以双击“ E: E:的 件。和所有的 用程序一样, 包含标题栏、菜单栏、工具栏、状态栏等窗口元素。 7 选择菜单命令 闭工作空间。 8 4 课程设计理论基础 界区: ; 临界区( 一段独占对某些共享资源访问的代码,在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。 临界区在使用时以 构对象保护共享资源,并分别用和 函数去标识和释放一个临界区。所用到的 构对象必须经过 的初始化后才能使用,而且必须确保所有线程中的任何试图访问此共享资源的代码都处在此临界区的保护之下。否则临界区将不会起到应有的作用,共享资源依然有被破坏的可能。 定义线程结构 : ; 此结构用来存放线程的信息 ,四个成员变量依次表示 线程序号 、 线程类别 、 线程开始时间 、 线程读写持续时间 。 斥对象 创建互斥对象 ; 参数含义如下: 9 释放互斥信号 对资源具有访问权的线程不再需要访问此资源而要离开时,必须通过函数来释放其拥有的互斥对象 创建读者线程 ,( &i,0,& 参数含义如下: 0表示 新 读者 线程拥有自己的堆栈 , 使用缺省大小: 1 (示新 读者 线程执行的线程函数的地址 &i表示在线程启动执行时将该参数传递给 读者 线程函数。 0表示读者线程创建后可以立即进行调度 &给新读者线程的 I D 等待函数 1); 等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止 参数含义如下: 在所有线程对象变为已通知状态之前,该函数将不允许调用线程运行 参数 诉系统 ,调用线程愿意永远等待下去(无限时间量),直到该进程终止运行。 用消息队列的方式来实现消息传递。消息的发送方式是发送方不必等待,接收方检查它所收到的消息就可以继续工作下去。而接收方如果没有收到消息,也不需等待。这种通信机制相对简单,但是应用程序需要使用较复杂的方式来处理。 新的消息总是放在队列的末尾,接收时并不总是从头来接收,也可以从中间来接收。 序结构 10 5 运行结果 者优先结果 图 者优先结果 11 以下是实现方法 : (p);/处理读者优先读者线程 _p);/处理读者优先写者线程 _p); _p); 6 结论 本次操作系统课程设计完成的是 读者 通过学习对线程及其同步机制有了很的学习和掌握 . 并认识到 同步可以保证在一个时间内只有一个线程对某个资源有控制权。共享资源包括全局变量、公共数据成员或者句柄等。同步还可以使得有关联交互作用的代码按一定的顺序执行。 同时也掌握了实现线程同步的对象有 键段), 件), 斥对象), 号量) 并对这些对象理解如下: 对于 关键段对象 : 首先,定义一个关键段对象 ;然后,初始化该对象。初始化时把对象设置为 示允许线程使用资源:如果一段程序代码需要对某个资源进行同步保护,则这是一段关键段代码。在进入该关键段代码前调用 数,这样,其他线程都不能执行该段代码,若它 12 们试图执行就会被阻塞。完成关键段的执行之后,调用 他的线程就可以继续执行该段代码。如果该函数不被调用,则其他线程将无限期的等待。 对于 互斥对象 首先,调用 后,调用等待函数,可以的话利用关键资源;最后,调用 斥对象可以在进程间使用,但关键段对象只能用于同一进程的线程之间。 对于 等待函数 : 等待函数 有 : 数参数包括同步对象的句柄和等待时间等。如果等待时间不限制 (则只有同步对象获得信号才返回;如果等待时间为 0,则在测试了同步对象的状态之后马上返回。 数参数包括同步对象的句柄 ,等待时间,是等待一个还是多个同步对象等等 ,如果等待时间不限制 (则只有同步对象获得信号才返回;如果等待时间为 0,则在测试了同步对象的状态之后马上返回。 操作系统设计使我对 C+有了一个很好的复习和学习,对线程的创建及同步问题及其同步对象都有了很好的理解。并能初步进行简单的程序编程。并对程序的调式过程,也使我更好了解到线程同步的具体运行过程,使我更好的理解程序。 学习语言是一个漫长的过程,我想只有在不断的实践练习中,才能更好的掌握编程的技巧,提高自己的编程能力,通过此次课设也让我深深体会到 自己还有很多东西需要学习,还有很多课程需要复习。总之,此次课程设计使我收益匪浅。 致 谢 感谢 谭 老师本学期对我们的教导,给予了我们莫大的支柱。 感谢我的室友为我排忧解难。 如果没有你们的帮助,这次课程设计很难一个人完成,在此我致以衷心的谢意。 参考文献 1 孙钟秀 操作系统教程 M. 北京 13 2 陈建峰,张荣奇等 +用编程百例 M. 北京 3 黄维通,鲁明羽 +程序设计教程 M清华大学出版社 4 计算机职业教育联盟主编 + 础教程与上机指导 M清华大学出版社 5 陈天华 面向对象程序设计与 + 程 M清华大学出版社 录 #R /读者 #W /写者 #000 /每秒时钟中断的数目 #4 /最大线程数 #2 /最大文件数目数 #2 /字符串的长度 ; /读者数目 ; /写者数目 /临界资源 14 /线程序号 /线程类别 (判断是读者还是写者线程 ) /线程延迟时间 /线程读写操作时间 ; / / 读者优先 (p) /互斥变量 ; /* / / / to ;*/ /等待互斥变量所有权 /延迟时间 /读文件持续时间 /线程序号 15 / 从参数中获得信息 (p)- (p)- (p)- /延迟等待 读者线程 %d 发来读请求 .n, /等待互斥信号 ,保证对 访问 ,修改互斥 1); /读者数目增加 ; if(1) /第一个读者 ,等待资源 /释放互斥信号 /读文件 读者线程 %d 开始读文件 .n, (读者线程 %d 完成读文件 .n, /等待互斥信号 ,保证对 修改互斥 1); /读者数目减少 if(0) 16 /如果所有的读者读完 ,唤醒写者 /释放互斥信号 / /P:写者线程信息 p) /延迟时间 /写文件持续时间 /线程序号 / 从参数中获得信息 (p)- (p)- (p)- 写者线程 %d 发来写请求 .n, /等待资源 /写文件 写者线 程 %d 开始写文件 .n, /退出线程 写者线程 %d 完成写文件 .n, /释放资源 17 / /读者优先处理函数 /件名 ; /线程数目 /线程 /等待所有线程结束 /互斥对象 ; /*, / / to ;*/ /线程对象的数组 ; /初始化 /初始化临界区 读者优先 :nn); 18 /读入每一个读者 ,写者的信息 ; i=0; (p)- (p)- /延迟等待 读者线程 %d 发来读请求 .n, 20 1); /读者进去临界区 /阻塞互斥对象 证对 访问和修改互斥 1); /修改读 者的数目 ; if(1) / 如果是第 1个读者 ,等待写者写完 (& /读文件 读者线程 %d 开始读文件 .n, /退出线程 读者线程 %d 完成读操作 .n, /阻塞互斥对象 证对 访问 ,修改互斥 1); if(0) /最后一个读者 ,唤醒写者 21 /释放互斥信号 / /写者优先 (p) /互斥变量 /延迟时间 /读文件持续时间 /线程序号 ; /从参数中获得信息 (p)- (p)- (p)- /延迟等待 写者线程 %d 发来写请求 .n, 1); ; /修改写者数目 if(1) 22 写者线程 %d 开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论