资源预览内容
第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
第9页 / 共28页
第10页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
哈哈 尔尔 滨滨 理理 工工 大大 学学课课 程程 设设 计计( 操操 作作 系系 统统 )题 目: 设备的分配与回收班 级: 计算机科学与技术学院 计算机系 10-8 班姓 名: 陈俊鸣 1004010820指导教师: 高雪瑶系主任: 林克正 2013 年 03 月 01 日- II-目目 录录1 生产者消费者问题课程设计.1 1.1 题目分析.1 1.2 数据结构.1 1.3 流程图.1 1.4 实现技术.2 1.5 设计结论和心得.2 2 Linux 代码分析.4 2.1 功能说明.4 2.2 接口说明.4 2.3 局部数据结构.4 2.4 流程图.4 2.5 以实例说明运行过程.5哈尔滨理工大学课程设计报告- 1-1 设备的分配与回收设备的分配与回收课程设计1.1 题目分析在多到程序环境下,系统中的设备供所有进程共享。为防止进程对系统资源的无序 竞争,特规定系统设备不允许用户自行使用,必须由系统统一分配。每当进程项系统提 出 I/O 请求时,只要是可能和安全带,设备分配程序编按照一定的策略,吧设备分配给 请求用户。在有的系统中,为了确保在 CPU 与设备之间能进行通信,还应分配相应的控 制器和通道。为了实现设备分配,必须在系统中设置相应的数据结构。1.2 数据结构设计中用到了 Map(映射)的数据结构,Map 结构包括了 key 和 value 两部分,通过 key 的匹配来查询 value 的值,符合次涉及到的要求,解决了四张表之间的关系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 Mythread3;/允许申请 3 个进程,可根据需要做相应更改以上 4 个映射用于存放对应表的信息,设计为全局静态是为了能存储文件和添加的设备 、控制器、通道信息。1.3 流程图实现设计中主程序和其他子模块的算法,以流程图的形式表示,需画出函数和过程 的调用关系图。哈尔滨理工大学课程设计报告- 2-开始输入初始 化文件地 址按行读文件, 读一行文件是 否结束将相应信息保存 到相应的 Map 中结束否是文件读取 Fileread(初始化)类哈尔滨理工大学课程设计报告- 3-开始将界面的信息读 入并赋给字符串 变量新建 4 张表分别将对应信息 添加到 4 张表中将 4 张表分别保 存到各自的映射 中(Map)结束添加设备 increase 类哈尔滨理工大学课程设计报告- 4-开始将界面信息读入 并赋给字符串变 量变量新建用户定义的 进程类 Mythread 类分别将对应信息 赋给进程类中的 属性,产生新的 进程 将新的进程类保 存到用户定义的 进程类数组中并 记录当前进程数 目结束申请新进程 increaseP 类哈尔滨理工大学课程设计报告- 5-开始遍历设备表的 Map该进程 申请的 设备是 否存在进程调用 sleep()方法 睡眠并在 jTextArea 显 示不存在该设 备否进程调用 sleep 方 法睡眠一个进程 开始时间判断暂停 标识是否 为 1(暂 停 30S)进程调用 sleep 方法睡眠 30s是在主界面的 jTextArea 显示: 进程阻塞调用 sleep 方法睡 眠一个阻塞时间哈尔滨理工大学课程设计报告- 6-判断暂 停标识 是否为 1进程调用 sleep 方法睡 眠 30s是向主界面 jTextArea 中显 示进程开始分 配的信息否进程调用 sleep 方法睡眠一个 执行时间判断暂 停标识 是否为 1进程调用 sleep 方法睡眠 30s是向主界面 jTextArea 中显 示进程释放资 源信息结束否Mythread 类:进程执行的方法哈尔滨理工大学课程设计报告- 7-开始定义 4 个全局 静态类型的 Map定义全局静态 的进程类型数 组定义全局静态 变量 ii,signal 分别记录进程 个数和暂停标 记是否点击 按钮“初 始化”调用 Fileread 类的 构造方法并将文 件信息显示是是否点 击“申 请新进 程”否调用 increaseP 类中方法申请是是否点 击“添 加设备”否调用 increase 类方法添加是是否点击 “开始”否通过冒 泡法将 进程数 组中的 进程按 开始时 间升序 排好否是当进程数 在 2 个或 2 个以上 时哈尔滨理工大学课程设计报告- 8-判断进程 申请的设 备是否为 同一类同一类 的进程 是否阻 塞决定阻塞进程 的阻塞时间调用 Mythread 类 start 方法是是否否结束是否点 击“暂 停”重新判断选 择按钮否是将暂停信号 signal 置 1MainF 类哈尔滨理工大学课程设计报告- 9-1.4 实现技术在这次编程中,选择使用的是 java 是 MyEclipse8.6 拥有窗口的框架,但同时,由于 ja va 中没有指针的概念,使得 SDT、DCT、COCT、CHCT 之间的练习让我很头疼,所以我选择 了使用映射 map,映射中包含 key 和 value,而 key 就好像 C+中的指针的 next,能将 4 张表练习到一起。随后,在对进程的 void 方法中的设计令我认识到自己对 java 进程知 识的掌握还很匮乏,现在还不能很好的运用 sleep(),wait(),yield()等方法,也不清楚 其之间的区别,因此设计要求中的暂停无法很好的实现。1.5 设计结论和心得这次编程,是我对设备的分配有了更进一步的了解,也是我的编译能力得到了锻炼。 通过本次课程设计,加深了对所学的操作系统的知识的理解,并且提高了自已的编程水 平,也让自已认识到了自已编程中存在的问题,例如:没有对系统做全面分析的习惯, 以致于自已的程序没有把全部可能出现的情况考虑进内,以致于对于某一些特别的值, 不能给出正确的运行结果,本次课程序设计认自已体会到了全面系统的分析问题的重要 性和必要性。多实践,多进行一些编程锻炼,这将成为我今后的一项课程,自己的编程 水平还是太水,今后必须更加努力才行。哈尔滨理工大学课程设计报告- 10-2 .1Linux 代码分析为了进一步了解操作系统内核,学习了 Linux 操作系统的进程同步程序,主要程序 源代码如下: package jframe;import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader;import map.CHCTmap; import map.COCTmap; import map.DCTmap; import map.SDTmap;import table.CHCT; import table.COCT; import table.DCT; import table.SDT;/*文件读取代码* */public class Fileread String file=“f:/aa.txt“; /文件的地址String next=null;/用来存放文件每行的信息String s=new String7;/将 next 值按空格分开后存到 S 数组中SDTmap sm=new SDTmap();DCTmap dm=new DCTmap();COCTmap com=new COCTmap();哈尔滨理工大学课程设计报告- 11-CHCTmap chm=new CHCTmap(); MainF mf=new MainF(); public Fileread() public Fileread(int i) throws NumberFormatException, IOException try BufferedReader input =new BufferedReader(new InputStreamReader(new FileInputStream(file);/读文件while(next=inpu
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号