下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.专业整理 .操作系统课程设计报告院(系):专业:学 生 :班级:学号 :题目:独占设备的分配与回收起迄日期 :设计地点 :实验中心指导教师:2011 2012 年度第 2学期完成日期:2012年7月10日一、课程设计目的在多到程序环境下, 系统中的设备供所有进程共享。为防止进程对系统资源的无序竞争,.学习帮手 .专业整理 .特规定系统设备不允许用户自行使用,必须由系统统一分配。每当进程项系统提出I/O 请求时,只要是可能和安全带,设备分配程序编按照一定的策略,吧设备分配给请求用户。在有的系统中, 为了确保在CPU与设备之间能进行通信,还应分配相应的控制器和通道。为了实现设备分配,必须在系统中
2、设置相应的数据结构。掌握独占设备的分配流程,会使用安全性算法检查设备分配是否安全二、课程设计容与要求1) 合理设计 SDT、 DCT、 COCT、CHCT的数据结构2) 独占设备、控制器与通道的数目可在界面进行设置3) 进程申请使用独占设备时至少要求包括申请时间与使用时间4) 可读取样例数据(要求存放在外部文件中)进行独占设备、控制器与通道数目的初始化,进行进程申请设备的初始化5) 点击开始运行后,系统自动根据初始设定的数据进行设备分配与回收,所有状态信息需动态地显示出来:设备、控制器、通道数目,阻塞队列情况等6) 运行中可动态增加申请设备的进程,可随时暂停,查看当前状态7) 使用可视化界面进
3、行演示三、系统分析与设计1、系统分析( 1)信息:此系统中包括了SDT、 DCT、 COCT、 CHCT表,其中SDT包括了设备的类型,设备标识符 ;DCT 包括设备类型、设备标识符、设备状态、该设备指向的控制器;COCT包括控制器标识符、控制器状态、与控制器相连的通道;CHCT包括通道标识符、通道状态、与通道相连的控制器。( 2)行为:某进程在某时间申请某设备,系统通过查看申请设备的状态和控制器、通道来判断该进程能否申请成功、 是否阻塞等并动态的显示出进程申请的时间和使用时间等信息。( 3)表示:系统包括 3 个界面:主界面、申请进程界面和添加设备界面。主界面包含了初始化按钮、开始按钮、添加
4、设备、申请新进程、暂停按钮。其中添加设备和申请新进程按钮分别于添加设备界面和申请进程界面接口。申请进程界面需要输入新进程名,申请设备的类型、标识符和进程开始时间和执行时间;添加设备界面需要输入设备的类型、标识符、控制器和通道。2、系统设计:2.1 、模块设计:次程序包括 3 个包,分别为 table 包、 map包、 jframe 包。 table 包中有 SDT、DCT、 C OCT、CHCT表的结构; map包包括了分别对应 SDT、 DCT、COCT、CHCT的表的映射的写入和读的方法; jframe 包包括界面和主要函数( MainF 类、 Mythread 类、 increase 类
5、、 increase P 类、 Fileread 类)。MainF 类能调用 Mythread 类、 Fileread 类,申请进程界面调用 increaseP 类,添加设备界面调用increase类.学习帮手 .专业整理 .MainF 模块Mythread 模Fileread 模块申请新进程添加设备块界面界面进程类及进incraseP 模incrase 模程运行方法初始化块块申请新进程添加设备2.2 、数据结构说明:设计中用到了 Map(映射)的数据结构, Map结构包括了 key 和 value 两部分,通过 ke y 的匹配来查询 value 的值,符合次涉及到的要求,解决了四表之间的关
6、系publicstaticMap mapD=new HashMap();/ 对应 DCT表的映射, key 值为设备类型publicstaticMap mapS=new HashMap();/ 对用 SDT的映射, key值为设备类型publicstaticMap mapCO=new HashMap();/ 对应 COCT的映射, key 值为控制器标识符publicstaticMap mapCH=new HashMap();/ 对应 CHCT的映射, key 值为通道标识符publicstaticMythreadmt =new Mythread3;/ 允许申请 3 个进程,可根据需要做相应更
7、改以上 4 个映射用于存放对应表的信息,设计为全局静态是为了能存储文件和添加的设备、控制器、通道信息。2.3 、算法流程图:实现设计中主程序和其他子模块的算法, 以流程图的形式表示, 需画出函数和过程的调用关系图。.学习帮手 .专业整理 .开始输入初始化文件地址按行读文件,读一行将相应信息保存到相应的 Map 中否文 件 是否结束是结束文件读取Fileread(初始化)类开始将界面的信息读入并赋给字符串变量新建 4张表分别将对应信息添加到 4 张表中添加设备increase类将 4 张表分别保存到各自的映射中( Map )结束.学习帮手 .专业整理 .开始将界面信息读入并赋给字符串变量变新建用
8、户定义的进程类 Mythread 类分别将对应信息赋给进程类中的属性,产生新的进程将新的进程类保存到用户定义的进程类数组中并记录当前进程数目结束申请新进程increaseP类.学习帮手 .专业整理 .开始遍历设备表的Map该进程申否请的设备是否存在进程调用sleep 方法睡眠一个进程开始时间进 程 调 用sleep()方法睡眠并在 jTextArea 显示不存在该设备判断暂停是进程调用 sleep 方标识是否法睡眠 30s为 1(暂停30S)在主界面的jTextArea 显示:进程阻塞调用 sleep 方法睡眠一个阻塞时间.学习帮手 .专业整理 .判 断 暂是停 标 识是否为 1否向主界面jT
9、extArea中显示进程开始分配的信息进程调用sleep 方法睡眠一个执行时间判断暂停标识是否为 1否向主界面jTextArea中显示进程释放资源信息进 程 调 用sleep方法睡眠30s是进程调用sleep 方法睡眠 30s结束Mythread 类:进程执行的方法.学习帮手 .专业整理 .开始定义 4 个全局静态类型的Map定义全局静态的进程类型数组定义全局静态变量 ii ,signal 分别记录进程个数和暂停标记是否点击按钮“初始化”否是 否 点击“申请新进程”否是否点击“添加设备”否是否点击“开始”是通 过 冒泡 法 将进 程 数组 中 的进 程 按开 始 时间 升 序排好是调用 Fil
10、eread 类的构当进程数造方法并将文件信在2个或2息显示个以上时否是调用 increaseP类中方法申请是调 用increase类方法添加.学习帮手 .专业整理 .否是否点击重新判断选择判断进程申“暂停”按钮请的设备是否否为同一类是将暂停信号signal 置是1同一类的进程是否否阻塞是决定阻塞进程的阻塞时间调 用Mythread类 start 方法结束MainF类四、系统测试与调试分析1、系统测试测试方法: 黑盒测试技术: 功能测试测试数据: 包括正确的输入及其输出结果和含有错误的输入及其输出结果。测试报告: 必须包含最终测试结果:列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严
11、格。.学习帮手 .专业整理 .功能测试应用背景: 它是从使用者的角度来编写的,它关注系统提供的功能特征及其不同的处理条件;测试功能的不同处理流程(包括正常处理的和异常处理);一个功能测试用测测试名称独占设备的分配与回收试测试目的验证系统初始化的成功与否说测试技术功能测试明测试方法黑盒测试法测试容从指定文件读入所需信息并显示测测试步骤从正确文件读入正确格从正确的文件读入错误的信从错误的文件读入错误式的信息息的信息试测试数据f:/aa.txt读格式正确f:/aa.txt读格式错误的信从 f:/b.txt读格式错用的信息息误信息例预期结果正常显示系统提示错误系统提示错误测试结果与预期相符与预期相符与
12、预期相符例仅用于测试一个功能,一个功能可能需要多个功能测试用例来覆盖。测测试名称独占设备的分配与回收试测试目的验证进程申请资源的成功与否说测试技术功能测试明测试方法黑盒测试法测试容进程申请设备并显示信息测试步骤不同进程申请不同资源不同的进程申请相同进程申请不存在的设备测的资源测试数据process1申请 print 资源process1 、process2 、 Process1 申请 xxx 资源试process2申请 keyword 资源 process3申请 print用process3申请 io 资源资源例预期结果各进程单独执行显示根据先来先服务申请显示没有该设备释放资源并显示测试结果与
13、预期相符与预期相符与预期相符测测试名称独占设备的分配与回收试测试目的验证暂停功能能否实现说测试技术功能测试明测试方法黑盒测试法测试容点击暂停按钮看 MainF 信息是否暂停更新测测试步骤点击暂停按钮观察信息不点击暂停按钮观察信息试测试数据Process1 申请 print资源的信息Process1 申请 print资源的信息动态显示为用动态显示为“阻塞中 ”“阻塞中 ”例预期结果信息不改变信息更新为其他信息测试结果与预期相符与预期相符.学习帮手 .专业整理 .2、调试分析:文件读入是系统报错是因为读入的格式错误或文件的某一行没有数据导致,因此在这严格限制了初始化文件的格式;在将设备信息和进程信
14、息存储到相应的数据结构中时,发生了信息覆盖的问题,这是因为没有在每读一行的时候都新建了新的进程Mythread 和 4 表;在进程执行的时候当发现没有要申请的设备时会报错,因此用try catch语句将错误信息遮蔽。编程中的难点在于如何动态显示信息容,尤其是发生阻塞时不好控制,“暂停”按钮的实现也比较难, 现在只能让系统暂停一定的时间无法根据用户的意志进行暂停和继续,对进程的知识储备还不够。五、用户手册1、使用平台: Myeclipse8.6 ;下载网址: http:/downloads.myeclipseide./downloads/p roducts/eworkbench/galileo/
15、myeclipse-8.6.0-win32.exe 2、不需要安装3、程序使用手册( 1)主窗口( 2)有两种选项:初始化或添加设备和申请进程初始化.学习帮手 .专业整理 .点击开始,程序运行点击暂停可使系统暂停之心30s.学习帮手 .专业整理 .添加新设备.学习帮手 .专业整理 .申请新进程(申请的设备存在).学习帮手 .专业整理 .申请进程(申请的设备不存在)六、程序清单列出主要 / 关键算法的程序清单, 要求加上详细的程序注释 (函数体 / 过程注释, 与语句行注释)package jframe;import java.io.BufferedReader;import java.io.F
16、ileInputStream;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;/* 文件
17、读取代码*/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 =new COCTmap();CHCTmap chm=new CHCTmap();MainF mf=new MainF();public Fileread()public Fileread(int i) throws NumberFo
18、rmatException, IOException try BufferedReader input =new BufferedReader(new InputStreamReader(newFileInputStream(file);/读文件while(next=input.readLine()!=null)Mythread myt=new Mythread();SDT sdt=new SDT();DCT dct=new DCT();COCT coct=new COCT();CHCT chct=new CHCT();s=next.split( );sdt.settypeS(s0);sdt.
19、setdeS(s1);dct.set(s0, s1, s2);coct.set(s2, s3);chct.set(s3, s2);myt.set(s4, s0, s1, Double.valueOf(s5), Double.valueOf(s6);mf.mtmf.ii+=myt;sm.setmapS(s0, sdt);dm.setmapD(s0, dct);.setmapCO(s2, coct);chm.setmapCH(s3, chct);/ 将读到的信息写入 4 表对应的映射和进程数组中 catch (FileNotFoundException e) / TODO Auto-generat
20、ed catch block e.printStackTrace();.学习帮手 .专业整理 ./ 添加设备的代码String str1=jTextField1.getText();/获得 jTextField1中的信息String str2=jTextField2.getText();String str3=jTextField3.getText();String str4=jTextField4.getText();SDT sdt= new SDT();DCT dct= new DCT();COCT coct= new COCT();CHCT chct= new CHCT();sdt.se
21、ttypeS(str1);sdt.setdeS(str2);dct.set(str1, str2, str3);coct.set(str3, str4);chct.set(str4, str3);MainF.put(str1, sdt);mapSMainF. mapD.put(str1, dct);MainF.put(str3, coct);mapCOMainF. mapCH.put(str4, chct);this .dispose();/当前的窗口关闭/ 申请新进程代码String str1=jTextField1.getText();String str2=jTextField2.get
22、Text();String str3=jTextField3.getText();String str4=jTextField4.getText();String str5=jTextField5.getText();doubled1=Double.valueOf (str4);doubled2=Double.valueOf (str5);Mythread mtt= new Mythread();mtt.set(str1, str2, str3, d1, d2);MainF. mtMainF. ii+=mtt;this .dispose();/ 进程代码package jframe;impor
23、t java.io.IOException;import java.util.Iterator;import java.util.Map;import javax.swing.JTextArea;import table.CHCT;import table.COCT;.学习帮手 .专业整理 .import table.DCT;import map.CHCTmap;import map.COCTmap;import map.DCTmap;import map.SDTmap;public class Mythread extends Thread SDTmap sm=new SDTmap();St
24、ring con=null;/用来记录当前进程申请设备的控制器String ch=null;/用来记录当前进程申请设备的通道DCT dct=new DCT();COCT coct=new COCT();CHCT chct=new CHCT();Fileread filr=new Fileread();String name;/记录进程名double starttime,runtime;/记录进程的开始时间(会变)和执行时间double time,use;/time用来记录进程的起始时间,use 记录使用时间String apptype;/记录进程要申请的设备类型String appde;/设备
25、标识符String ss=;/记录 jtextArea要显示的信息JTextArea text;public void set(String name,String apptype,String appde,double starttime,double runtime)=name;this.apptype=apptype;this.appde=appde;this.starttime=starttime;this.runtime=runtime;public void JT(JTextArea text)this.text=text;public void settime(
26、double time)this.time=time;public void setut(double d)this.use=d;public void run()/ 判断要申请的设备是否存在,不存在进程沉睡999.999strydct=(DCT)filr.dm.getmapD().get(apptype);con=dct.get();coct=(COCT)filr.getmapCO().get(con);ch=coct.get();.学习帮手 .专业整理 .catch(Exception e)text.setText(无该类设备);try Thread.sleep(999999); catc
27、h (InterruptedException e1) / TODO Auto-generated catch blocke1.printStackTrace();try Thread.sleep(long)time*1000);/进程在开始前睡眠if(MainF.signal=1)/signal 为暂停标识符,为 1是暂停 30s Thread.sleep(30000);MainF.signal=0;text.setText(阻塞中 .);Thread.sleep(long)(starttime-time)*1000);/阻塞时间if(MainF.signal=1)Thread.sleep(
28、30000);MainF.signal=0;ss= 进程 +name+ 向 + 设备 +apptype+ +appde+提出申请+n+通过控制器: +con+ 通道: +ch+n+ 开始执行时间:+starttime+t+执行中 .;text.setText(ss);/jtextArea显示 ss 的信息Thread.sleep(long)runtime*1000);/睡眠执行时间if(MainF.signal=1)Thread.sleep(30000);MainF.signal=0;ss= 执行结束 , 使用时间 +use+ +释放资源 ;text.setText(ss); catch (I
29、nterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();public String getname()return name;/ 主界面开始函数inti = 0;.学习帮手 .专业整理 .intj = 0;intk =ii ;/ii为全局静态变量,存储申请的进程数目Mythread myt =null ;/ 冒泡排序,按开始时间升序排序进程if(k = 2) for(i = 0; i k; i+) for(j = i + 1; j mtj.starttime) myt =mti;mti =mtj;m
30、tj = myt;/ 根据不同的进程数使用不同的方法switch ( ii ) case 1:jTextArea2.setText( 该进程未使用 );mt0.settime(mt0.starttime);0.setut(0.runtime );mtmtmt0.JT(jTextArea2);0.start();mtjTextArea3.setText( 该进程未使用 );jTextArea4.setText( 该进程未使用 );break ;case 2:jTextArea2.setText( 该进程未使用 );jTextArea3.setText( 该进程未使用 );jTextArea4.s
31、etText( 该进程未使用 );0.settime(0.starttime);mtmtmt1.settime(mt1.starttime);0.setut(0.runtime );mtmtmt0.JT(jTextArea2);mt0.start();/ 判断是否阻塞,阻塞之后的方法if( mt0.apptype .equals(mt1.apptype ) if( mt0.starttime+mt0.runtime ) mt1.starttime) mt1.starttime=mt0.starttime+mt0.runtime ;mt1.setut(mt1.starttime+mt1.runt
32、ime-mt1.time );mt1.JT(jTextArea3);mt1.start();else mt1.setut(mt1.runtime );mt1.JT(jTextArea3);.学习帮手 .专业整理 .mt1.start();break ;case 3:jTextArea2.setText( 该进程未使用 );jTextArea3.setText( 该进程未使用 );jTextArea4.setText( 该进程未使用 );0.settime(0.starttime);mtmtmt1.settime(mt1.starttime);mt2.settime(mt2.starttime)
33、;0.setut(0.runtime );mtmtmt0.JT(jTextArea2);0.start();mtif( mt0.apptype .equals(mt1.apptype ) if(mt0.starttime+mt0. runtime ) mt1.starttime) 1.starttime=0.starttime+mt0.runtime;mtmtmt1.setut(mt1.starttime+ mt1.runtime-mt1.time );1.JT(jTextArea3);mtmt1.start();elsemt1.setut(mt1.runtime);mt1.JT(jTextArea3);mt1.start();tryif( mt0.apptype .equals(mt2.apptype ) if(0.starttime+0.runtime) 2.starttime) mtmtmtmt2.starttime=mt0.starttime+mt0.runtime;mt2.setut(mt2.starttime+ mt2.runtime-mt2.time );2.JT(jTextArea4);mtmt2.start();elsemt2.setut(mt2.runtime);mt2.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陇南地区武都县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 凉山彝族自治州冕宁县2025-2026学年第二学期四年级语文第六单元测试卷(部编版含答案)
- 洛阳市洛宁县2025-2026学年第二学期四年级语文期中考试卷(部编版含答案)
- 邢台市平乡县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 枣庄市薛城区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 公司年中会议策划方案
- 深度解析(2026)《CBT 4430.2-2019船舶螺旋桨用铸造铝铍钴青铜化学分析方法 第2部分:铍量的测定铬天青S光度法和重量法》
- 深度解析(2026)《AQT 2010-2006金属非金属矿山安全生产管理人员安全生产培训大纲》
- 2026-2027年人工智能(AI)在职业高尔夫球手训练中通过挥杆数据分析提供个性化技术调整建议获高端体育科技投资
- 5 草船借箭 表格式公开课一等奖创新教案
- cnc编程面试题及答案
- T/CCAS 010-2019水泥窑协同处置飞灰预处理产品水洗氯化物
- 大学物理力学5功和能
- T-CPI 11037-2024 石油天然气钻采设备水力振荡器技术与应用规范
- 人教版PEP四年级英语下册全册单元测试卷(附听力材料)
- 尼康CoolPixP100中文说明书
- 大学生春季传染病预防知识
- 《Python程序设计任务驱动教程》 课件-第2章 Python基础
- 工程项目送检验收方案
- 国家职业技术技能标准 4-04-05-05 人工智能训练师 人社厅发202181号
- 【八年级上册地理】一课一练2.2 世界的气候类型 同步练习
评论
0/150
提交评论