OS-实验指导书

OS-实验指导书

ID:45757539

大小:217.78 KB

页数:51页

时间:2019-11-17

OS-实验指导书_第1页
OS-实验指导书_第2页
OS-实验指导书_第3页
OS-实验指导书_第4页
OS-实验指导书_第5页
资源描述:

《OS-实验指导书》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、操作系统原理实验指导书计算机科学学院实验一生产者和消费者问题一、实验目的1.掌握基本的同步互斥算法,理解生产者和消费者模型。2.了解Windows2000/XP屮多线程的并发执行机制,线程间的同步和互斥。3.学习使用Windows2000/XP中基本的同步对象,掌握相应的API。二、理论基础1.主产者和消费者模型。本实验所使用的牛产者和消费者模型具有如下特点:i.本实验的多个缓冲区不是坏形的,也不要求按顺序访问。生产者可以把产品放到目前某一个空缓冲区中。ii.消费者只消费指定生产者的产品。iii.在测试用例文件(test.tx

2、t)中指定了所佇生产者和消费者的需求,只有当共享缓冲区的数据满足了所有关于它的消费需求后,此共享缓冲区才可以作为空闲空间允许新的生产者使用。iv.本实验在为生产者分配缓冲区时各生产者间必须互斥,此后各个生产者的具体牛产活动可以并发。而消费者z间只有在对同一产品进行消费时才需要互斥,同时它们在消费过程结朿时需要判断消费对象是否已经消费完毕并消除该产品。1.同步对象。a)在Windows中,常见的同步对象有:信号量(semaphore)、互斥量(mutex)、临界段(criticalsection)和事件(event)等。本实验中

3、用到了前三个对象。b)使用这些对彖都分为三个步骤:i.一是创建或者初始化;ii.接着请求该同步对彖,随即进入临界区,这一步对应互斥量的上锁;iii.最后释放该同步对象,这对应于互斥量的解锁。c)这些同步对象在一个线程中创建,在其他线程中都可以使用,从而实现同步互斥。当然,在进程间使川这些同步对象实现同步的方法是类似的。三、实验要求1.创建生产者和消费者线程。a)在Windows环境下,创建一个控制台进程,在此进程中创建N个线程来模拟生产者和消费者。这些线程的信息由一个“测试用例文件”(test.txt)來指定。该文件的格式如下

4、:31P32P43C414P25C3124b)文件说明:i.第一•行说明程序中设置几个临界区,其余每行分別描述了一个生产者或者消费者线程的信息。ii.每一行的各字段间用Tab键隔开。iii.不管是生产者还是消费者,都有一个对应的线程号,即每一行开始字段的那个整数。iv.第二个字段用字母P或者c区分是牛产者(Producer)还是消费者(Consumer)ov.第三个字段衣示在进入相应线程后,在进行生产和消费动作前的休眠时间,以秒计吋;这样做的目的是可以通过调整这一列参数,控制开始进行生产和消费动作的吋间。Vi.如果是代表生产者

5、,则该行只有三个字段。Vii.如果是代表消费者,则该行后边述有若干字段,代表耍求消费的产品所对应的牛产者的线程号。所以务必确认这些对应的线程号存在并且该线程代表一个生产者。2.生产和消费的规则。在按照上述要求创建线程进行相应的读写操作时,还需要符合以下要求:i.共享缓冲区存在空闲空间时,生产者即可使川共享缓冲区。ii.从上边的测试数据文件例子可以看出,某一生产者生产一个产品后,可能不止一个消费者,或者一个消费者多次请求消费该产品。此时,只有当所有的消费需求都被满足以后,该产品所在的共享缓冲区才可以被解放,并作为空闲空间允许新的

6、生产者使用。iii.每个消费者线程的各个消费需求之间存在先后次序。例如上述测试川例文件包含一行信息“5C3124”,可知这代表一个消费者线程,该线程请求消费1、2、4号生产者线稈牛产的产品。而这种消费是有严格顺序的,消费1号线程产品的请求得到满足后才能继续往下请求2号生产者线程的产品。iv.耍求在每个线程发出读写操作巾请、开始读写操作和结束读写操作时分别显示一行提示信息。1.实验结束提交书血实验报告。四、实验环境1.运行Windows操作系统的PC机一台。2.PC机上安装VisualC++6.0开发工具软件。五、实验内容1.程

7、序的结构:a)程序包括一个主函数、一个模拟牛产者的函数、一个模拟消费者的函数和三个辅助性的函数。i.主函数用于初始化缓冲区和各个同步対象,并完成线程信息的读入和记录,最后根据该组线程记录丿1动模拟线程,并等待所有线程的运行结束后退出整个程序。ii.消费者和生产者函数运行于相应线程中完成对缓冲区的读写动作,根据此处牛产消费模型的特点,牛产者和消费者线程Z间通过同步对彖的使用实现了牛产和消费动作的同步与互斥,是本实验的核心所在。iii.另外三个辅助函数被生产者和消费者函数调用,是上述生产和消费函数中对缓冲区访问功能的一些包装。程序

8、的流程如图2-1所示。1.数据结构:a)川一个整型数组buffer_critical来代表缓冲区。不管是生产产品还是对已有产品的消费都需要访问该纟I[缓冲区。b)在程序中用一个自定义结构Threadinfo记录一条线程的信息,即将测试用例文件屮的一行信息记录下来,川于程序创建

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

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

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