1、 课程设计说明书 操作系统 题目:多道程序缓冲区协调操作多道程序缓冲区协调操作 1.1. 概述概述 1.1 课程设计目的 本次课程设计的主要目的是通过模拟多道程序缓冲区协调操作, 充分理解操作系统中进 程、线程及线程间同步和互斥的概念;并通过自己编写程序了解软件开发流程,锻炼自己的 编程能力,充分提高自己的综合能力。 1.2 主要完成任务 模拟设定 PUT、 GET、 Move 操作的如下图所示, 有多个 PUT 操作要不断循环地向 Buffer1 送数据,有 Move1 操作和 Move2 操作要不断地将 Buffer1 的数据取到 Buffer2 和 Buffer3, 有多个 GET 操作
2、要不断地从 Buff2 和 Buffer3 中取数据。PUT、 MOVE、 GET 每次操作一 个数据,为了在操作的过程中要保证数据不丢失, 每个 Buffer 每次只能接受一个 PUT 或一 个 Move 或一个 Get,多个操作不能同时操作同一 BUFFER。 PUT MOVE GET 软件能显示各个 Buffer 的操作过程和每个 Buffer 中的现有数据, 放入、 取出的总数据, 可以设置 Buffer 的容量及放入、取出数据的速度 ,设置 put、move、get 操作的线程数和操 作速度,软件结束运行时可以显示汇总数据,并能将统计结果保存到任意的路径下。 1.3 解决的主要问题
3、在本次课程设计中解决的重要问题有线程间的同步和互斥问题,java 语言软件设计中 面向对象思想各个类的创建方法及类之间互相操作问题,软件界面设计问题。 2.2. 设计使用的基本概念和原理设计使用的基本概念和原理 2.1 多道程序 多道程序设计技术是在计算机内存中同时存放几道相互独立的程序, 使他们在管理程 序控制下,相互穿插运行。 Get2 Put Move2 Buff1 Buff2 Buff3 Move1 Get1 2.2 进程 进程是并发程序的执行,是多道程序系统中程序的执行过程。 2.3 线程 线程是进程中的一个实体, 是被系统独立调度和分派的基本单位。 线程自己基本上不 拥有系统资源,
4、 只拥有一点运行中必不可少的资源, 但它可与同属一个进程的其他线程共享 进程所拥有的资源。 2.4 同步和互斥 相互合作的进程需要在某些点上协调, 先到达某点的进程需要等待后到达的进程, 进 程间的这种协调关系叫同步。 互斥是一种特殊的同步方式。 当多个进程需要使用相同的资源, 而次资源在任意时刻却只能供一个进程使用。 获得资源的进程可以继续执行, 没有获得资源 的进程必须等待。进程间的这种相互排斥关系叫做互斥。 2.5 基本原理 设计的基本理念是运用面向对象技术,设计三个缓冲区类 Buffer1, Buffer2,Buffer3,主要属性有容量,当前数据量,放入、取出数据量,放入、 取出速度
5、等, 主要方法有放入、 取出等; 然后设计线程类 Producer, Transporter1, Transporter2,Consumer1,Consumer2,主要属性有线程个数,线程操作速度, 主要方法是重新 run()方法,调用相应 Buffer 的 put 和 get 方法,执行对 Buffer 的操作。利用信号量机制,对线程进行等待,唤醒操作,实现线程间的同步和互 斥;利用线程的休眠时间来模拟放入,取出的速度以及各个线程操作的速度。 3.3.总体设计总体设计 3.1 基本技术路线 本程序主要利用面向对象编程方法,采用 java 提供的多线程技术,来模拟 实现 P、V 操作。 3.2
6、 总体结构、模块关系 本程序中Producer线程可以调用Buffer1的put方法向 Buffer1中放入数据; Transporter1 线程可以调用 Buffer1 的 get 方法,调用 Buffer2 的 put 方法,将数据从 Buffer1 中取出放入 Buffer2 中;Transporter2 线程可以调用 Buffer1 的 get 方法,调用 Buffer3 的 put 方法,将数 据从 Buffer1 中取出数据放入 Buffer3 中;Consumer1 线程可以调用 Buffer2 的 get 方法,从 Buffer2 中取出数据;Consumer2 线程调用 Buffer3 的 get 方法,从 Buffer3 中取数据。 程序运行前可以在设置中设置各个参数的值;程序运行中会在主界面显示各个 Buffer 中的操作,以及各个 Buffer 中的数据信息,包括现有数据,放入数据和取出数据,还能显 示程序运行时间;程序运行结束后可以在菜单中点击统计按钮,查看所有数据的统计结果, 并能保存结