操作系统课程设计之独占设备的分配_第1页
操作系统课程设计之独占设备的分配_第2页
操作系统课程设计之独占设备的分配_第3页
操作系统课程设计之独占设备的分配_第4页
操作系统课程设计之独占设备的分配_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统课程设计报告院(系): 专业: 学生姓名: 班级: 学号: 题目: 独占设备的分配与回收 起迄日期: 设计地点: 实验中心 指 导 教 师: 20112012年度 第 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、COCT、CHCT表的结构;map包包括了分别对应SDT、DCT、COCT、CHCT的表的映射的写入和读的方法;jframe包包括界面和主要函数(MainF类、Mythread类、increase类、increaseP类、Fileread类)。MainF类能调用Mythread

5、类、Fileread类,申请进程界面调用increaseP类,添加设备界面调用increase类MainF模块Mythread模块Fileread模块申请新进程界面添加设备界面进程类及进程运行方法初始化incraseP模块incrase模块申请新进程添加设备2.2、数据结构说明:设计中用到了Map(映射)的数据结构,Map结构包括了key和value两部分,通过key的匹配来查询value的值,符合次涉及到的要求,解决了四张表之间的关系public static Map mapD = new HashMap(); /对应DCT表的映射,key值为设备类型public static Map ma

6、pS = 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个映射用于存放对应表的信息,设计为全局静态是为了能存储文件和添加的设备、控制器、通道信息。2.3、算法流程图:实现设计中主程序和其他子模块的算法

7、,以流程图的形式表示,需画出函数和过程的调用关系图。开始输入初始化文件地址按行读文件,读一行文件是否结束将相应信息保存到相应的Map中结束否是 文件读取Fileread(初始化)类开始将界面的信息读入并赋给字符串变量新建4张表分别将对应信息添加到4张表中将4张表分别保存到各自的映射中(Map)结束 添加设备increase类开始将界面信息读入并赋给字符串变量变量新建用户定义的进程类Mythread类分别将对应信息赋给进程类中的属性,产生新的进程将新的进程类保存到用户定义的进程类数组中并记录当前进程数目结束 申请新进程increaseP类开始遍历设备表的Map该进程申请的设备是否存在进程调用sl

8、eep()方法睡眠并在jTextArea显示不存在该设备否进程调用sleep方法睡眠一个进程开始时间判断暂停标识是否为1(暂停30S)进程调用sleep方法睡眠30s是在主界面的jTextArea显示:进程阻塞调用sleep方法睡眠一个阻塞时间判断暂停标识是否为1进程调用sleep方法睡眠30s是向主界面jTextArea中显示进程开始分配的信息否进程调用sleep方法睡眠一个执行时间判断暂停标识是否为1进程调用sleep方法睡眠30s是向主界面jTextArea中显示进程释放资源信息结束否Mythread类:进程执行的方法开始定义4个全局静态类型的Map定义全局静态的进程类型数组定义全局静态

9、变量ii,signal分别记录进程个数和暂停标记是否点击按钮“初始化”调用Fileread类的构造方法并将文件信息显示是是否点击“申请新进程”否调用increaseP类中方法申请是是否点击“添加设备”否调用increase类方法添加是是否点击“开始”否通过冒泡法将进程数组中的进程按开始时间升序排好否是当进程数在2个或2个以上时 判断进程申请的设备是否为同一类同一类的进程是否阻塞决定阻塞进程的阻塞时间调用Mythread类start方法是是否否结束是否点击“暂停”重新判断选择按钮否是将暂停信号signal置1 MainF类四、系统测试与调试分析1、系统测试l 测试方法:黑盒l 测试技术:功能测试

10、l 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。l 测试报告:必须包含最终测试结果:列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格。功能测试应用背景:它是从使用者的角度来编写的,它关注系统提供的功能特征及其不同的处理条件;测试功能的不同处理流程(包括正常处理的和异常处理);一个功能测试用例仅用于测试一个功能,一个功能可能需要多个功能测试用例来覆盖。测试说明测试名称独占设备的分配与回收测试目的验证系统初始化的成功与否测试技术功能测试测试方法黑盒测试法测试用例测试内容从指定文件读入所需信息并显示测试步骤从正确文件读入正确格式的信息从正确的文件读入错误的信息从错

11、误的文件读入错误的信息测试数据预期结果正常显示系统提示错误系统提示错误测试结果与预期相符与预期相符与预期相符测试说明测试名称独占设备的分配与回收测试目的验证进程申请资源的成功与否测试技术功能测试测试方法黑盒测试法测试用例测试内容进程申请设备并显示信息测试步骤不同进程申请不同资源不同的进程申请相同的资源进程申请不存在的设备测试数据process1申请print资源process2申请keyword资源process3申请io资源process1、process2、process3申请print资源Process1申请xxx资源预期结果各进程单独执行显示根据先来先服务申请释放资源并显示显示没有该设

12、备测试结果与预期相符与预期相符与预期相符测试说明测试名称独占设备的分配与回收测试目的验证暂停功能能否实现测试技术功能测试测试方法黑盒测试法测试用例测试内容点击暂停按钮看MainF信息是否暂停更新测试步骤点击暂停按钮观察信息不点击暂停按钮观察信息测试数据Process1申请print资源的信息动态显示为“阻塞中”Process1申请print资源的信息动态显示为“阻塞中”预期结果信息不改变信息更新为其他信息测试结果与预期相符与预期相符2、调试分析: 文件读入是系统报错是因为读入的格式错误或文件的某一行没有数据导致,因此在这严格限制了初始化文件的格式;在将设备信息和进程信息存储到相应的数据结构中时

13、,发生了信息覆盖的问题,这是因为没有在每读一行的时候都新建了新的进程Mythread和4张表;在进程执行的时候当发现没有要申请的设备时会报错,因此用try catch语句将错误信息遮蔽。编程中的难点在于如何动态显示信息内容,尤其是发生阻塞时不好控制,“暂停”按钮的实现也比较难,现在只能让系统暂停一定的时间无法根据用户的意志进行暂停和继续,对进程的知识储备还不够。五、用户手册1、使用平台:Myeclipse8.6;下载网址:2、不需要安装3、程序使用手册(1)主窗口(2)有两种选项:初始化或添加设备和申请进程初始化点击开始,程序运行点击暂停可使系统暂停之心30s添加新设备申请新进程(申请的设备存

14、在)申请进程(申请的设备不存在)六、程序清单列出主要/关键算法的程序清单,要求加上详细的程序注释(函数体/过程注释,与语句行注释)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.COCTma

15、p;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()

16、; COCTmap com=new COCTmap(); CHCTmap chm=new CHCTmap();MainF mf=new MainF();public Fileread()public Fileread(int i) throws NumberFormatException, IOExceptiontry BufferedReader input =new BufferedReader(new InputStreamReader(new FileInputStream(file);/读文件while(next=input.readLine()!=null)Mythread myt

17、=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.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

18、, sdt);dm.setmapD(s0, dct);com.setmapCO(s2, coct);chm.setmapCH(s3, chct);/将读到的信息写入4张表对应的映射和进程数组中 catch (FileNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace();/添加设备的代码String str1=jTextField1.getText();/获得jTextField1中的信息String str2=jTextField2.getText();String str3=jTextField3.

19、getText();String str4=jTextField4.getText();SDT sdt=new SDT();DCT dct=new DCT();COCT coct=new COCT();CHCT chct=new CHCT();sdt.settypeS(str1);sdt.setdeS(str2);dct.set(str1, str2, str3);coct.set(str3, str4);chct.set(str4, str3);MainF.mapS.put(str1, sdt);MainF.mapD.put(str1, dct);MainF.mapCO.put(str3,

20、coct);MainF.mapCH.put(str4, chct);this.dispose();/当前的窗口关闭/申请新进程代码String str1=jTextField1.getText();String str2=jTextField2.getText();String str3=jTextField3.getText();String str4=jTextField4.getText();String str5=jTextField5.getText();double d1=Double.valueOf(str4);double d2=Double.valueOf(str5);Myt

21、hread mtt=new Mythread();mtt.set(str1, str2, str3, d1, d2);MainF.mtMainF.ii+=mtt;this.dispose();/进程代码package jframe;import 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 ma

22、p.COCTmap;import map.DCTmap;import map.SDTmap;public class Mythread extends Thread SDTmap sm=new SDTmap();String 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,runti

23、me;/记录进程的开始时间(会变)和执行时间double time,use;/time用来记录进程的起始时间,use记录使用时间String apptype;/记录进程要申请的设备类型String appde;/设备标识符String ss=""/记录jtextArea要显示的信息JTextArea text;public void set(String name,String apptype,String appde,double starttime,double runtime)=name;this.apptype=apptype;this.appde

24、=appde;this.starttime=starttime;this.runtime=runtime;public void JT(JTextArea text)this.text=text;public void settime(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).g

25、etmapCO().get(con);ch=coct.get();catch(Exception e)text.setText("无该类设备");try Thread.sleep(999999); catch (InterruptedException e1) / TODO Auto-generated catch blocke1.printStackTrace();try Thread.sleep(long)time*1000);/进程在开始前睡眠if(MainF.signal=1)/signal为暂停标识符,为1是暂停30sThread.sleep(30000);Mai

26、nF.signal=0;text.setText("阻塞中.");Thread.sleep(long)(starttime-time)*1000);/阻塞时间if(MainF.signal=1)Thread.sleep(30000);MainF.signal=0;ss="进程"+name+"向"+"设备"+apptype+" "+appde+"提出申请"+"n"+"通过控制器 :"+con+"通道:"+ch+&quo

27、t;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 (InterruptedException

28、 e) / TODO Auto-generated catch blocke.printStackTrace();public String getname()return name;/主界面开始函数int i = 0;int j = 0;int k = ii;/ii为全局静态变量,存储申请的进程数目Mythread myt = null;/冒泡排序,按开始时间升序排序进程if (k >= 2) for (i = 0; i < k; i+) for (j = i + 1; j < k; j+) if (mti.starttime > mtj.starttime) myt

29、 = mti;mti = mtj;mtj = myt;/根据不同的进程数使用不同的方法switch (ii) case 1:jTextArea2.setText("该进程未使用");mt0.settime(mt0.starttime);mt0.setut(mt0.runtime);mt0.JT(jTextArea2);mt0.start();jTextArea3.setText("该进程未使用");jTextArea4.setText("该进程未使用");break;case 2:jTextArea2.setText("该进

30、程未使用");jTextArea3.setText("该进程未使用");jTextArea4.setText("该进程未使用");mt0.settime(mt0.starttime);mt1.settime(mt1.starttime);mt0.setut(mt0.runtime);mt0.JT(jTextArea2);mt0.start();/判断是否阻塞,阻塞之后的方法if (mt0.apptype.equals(mt1.apptype) if (mt0.starttime + mt0.runtime) > mt1.starttime

31、) mt1.starttime = mt0.starttime + mt0.runtime;mt1.setut(mt1.starttime + mt1.runtime - 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(&qu

32、ot;该进程未使用");mt0.settime(mt0.starttime);mt1.settime(mt1.starttime);mt2.settime(mt2.starttime);mt0.setut(mt0.runtime);mt0.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.s

33、tarttime + mt1.runtime - mt1.time);mt1.JT(jTextArea3);mt1.start(); else mt1.setut(mt1.runtime);mt1.JT(jTextArea3);mt1.start();tryif (mt0.apptype.equals(mt2.apptype) if (mt0.starttime + mt0.runtime) > mt2.starttime) mt2.starttime = mt0.starttime + mt0.runtime;mt2.setut(mt2.starttime + mt2.runtime - mt2.time);mt2.JT(jTextArea4);mt2.start(); else mt2.s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论