1、 课课 程程 设设 计计 ( 操 作 系 统 )( 操 作 系 统 ) 题 目: 设备的分配与回收 班 级: 计算机科学与技术学院 计算机系 10-8 班 姓 名: 指导教师: 系 主 任 : 2013 年 03 月 01 日 - II- 目目 录录 1 生产者消费者问题课程设计 1 1.1 题目分析.1 1.2 数据结构.1 1.3 流程图 .1 1.4 实现技术.9 1.5 设计结论和心得 9 2 Linux 代码分析 10 2.1 功能说明.19 2.2 接口说明.19 2.3 局部数据结构 20 2.4 流程图 .20 2.5 以实例说明运行过程 23 - 1- 1 设备的分配与回收设
2、备的分配与回收课程设计 1.1 题目分析 在多到程序环境下,系统中的设备供所有进程共享。为防止进程对系统资源的无序竞 争,特规定系统设备不允许用户自行使用,必须由系统统一分配。每当进程项系统提出 I/O 请求时,只要是可能和安全带,设备分配程序编按照一定的策略,吧设备分配给请求 用户。在有的系统中,为了确保在 CPU 与设备之间能进行通信,还应分配相应的控制器和 通道。为了实现设备分配,必须在系统中设置相应的数据结构。 1.2 数据结构 设计中用到了 Map(映射)的数据结构,Map 结构包括了key和 value 两部分,通过 key的匹配来查询 value 的值,符合次涉及到的要求,解决了
3、四张表之间的关系 public static Map mapD = new HashMap(); /对应DCT表的映射,key值为设备类型 public static Map mapS = new HashMap(); /对用SDT的映射,key值为设备类型 public static Map mapCO = new HashMap(); /对应COCT的映射,key值为控制器标识符 public static Map mapCH = new HashMap(); /对应 CHCT 的映射,key 值为通道标识符 public static Mythread mt = new Mythread
4、3; /允许申请 3 个进程,可根据需要做相应更改 以上 4 个映射用于存放对应表的信息,设计为全局静态是为了能存储文件和添加的设备、 控制器、通道信息。 1.3 流程图 实现设计中主程序和其他子模块的算法,以流程图的形式表示,需画出函数和过程的 调用关系图。 - 2- 文件读取 Fileread(初始化)类 开始 输 入初 始 化 文件 地 按行读文件, 读一行 文 件 是 否结束 将相应信息保存 到相应的 Map 中 结束 否 是 - 3- 添加设备 increase 类 开始 将界面的信息读 入并赋给字符串 变量 新建 4 张表 分别将对应信息 添加到 4 张表中 将 4 张表分别保 存
5、到各自的映射 中(Map) 结束 - 4- 申请新进程 increaseP 类 开始 将界面信息读入 并赋给字符串变 新建用户定义的 进程类 Mythread 分别将对应信息 赋给进程类中的 属性,产生新的 将新的进程类保 存到用户定义的 进程类数组中并 记录当前进程数 结束 - 5- 开始 遍 历 设 备 表 的 该 进 程 申 请 的 设 备 是 进程调用 sleep ()方法睡眠 并在 jTextArea 显示不存在该 否 进程调用 sleep 方 法睡眠一个进程 开始时间 判断暂停 标识是否 为 1(暂 停 30S) 进程调用 sleep 方法睡眠 30s 是 在 主 界 面 的 jT
6、extArea 显示: 进程阻塞 调用 sleep 方法睡 眠一个阻塞时间 - 6- Mythread 类:进程执行的方法 判断暂 停标识 是否为 进 程 调 用 sleep 方法睡 是 向主界面 jTextArea 中 显 示进程开始分 否 进程调用 sleep 方法睡眠一个 判 断 暂 停 标 识 是否为 进程调用 sleep 方 法睡眠 30s 是 向主界面 jTextArea 中 显 示进程释放资 结束 否 - 7- 开始 定义 4 个全局 静 态 类 型 的 定义全局静态 的进程类型数 定义全局静态 变量 ii,signal 分别记录进程 个数和暂停标 是否点击 按钮“初 始化” 调用 Fileread 类的 构造方法并将文 件信息显示 是 是 否 点 击 “ 申 请 新 进 否 调用 increaseP 类中方法申请 是 是 否 点 击 “ 添 加设 否 调用 increase 类方法添加 是 是否点击 “开始” 否 通过冒 泡法将 进程数 组中的 进程按 开始时 间升序 排好 否 是 当进程数 在 2 个或 2 个以