《2023年-设备的分配与回收操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《2023年-设备的分配与回收操作系统课程设计.docx(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、哈尔滨理工大学课程设计(操作系统)题 目:设备的分配与回收 班 级:计算机科学与技术学院计算机系10-8班姓 名:陈俊鸣1004010820指导教师:高雪瑶系主任:林克正2013年03月01日MainF 类在这次编程中,选择使用的是java是MyEclipse8. 6拥有窗口的框架,但同时,由于java 中没有指针的概念,使得SDT、DCT、COCT、CHCT之间的练习让我很头疼,所以我选择了使 用映射map,映射中包含key和value,而key就好像C+中的指针的next,能将4张表练 习到一起。随后,在对进程的void方法中的设计令我认识到自己对java进程知识的掌握 还很匮乏,现在还不
2、能很好的运用sleep。,wait。,yield。等方法,也不清楚其之间的区 别,因此设计要求中的暂停无法很好的实现。1.5设计结论和心得这次编程,是我对设备的分配有了更进一步的了解,也是我的编译能力得到了锻炼。 通过本次课程设计,加深了对所学的操作系统的知识的理解,并且提高了自己的编程水平, 也让自己认识到了自己编程中存在的问题,例如:没有对系统做全面分析的习惯,以致于 自己的程序没有把全部可能出现的情况考虑进内,以致于对于某一些特别的值,不能给出 正确的运行结果,本次课程序设计认自己体会到了全面系统的分析问题的重要性和必要性。 多实践,多进行一些编程锻炼,这将成为我今后的一项课程,自己的编
3、程水平还是太水, 今后必须更加努力才行。2 .1 Linux代码分析为了进一步了解操作系统内核,学习了 Linux操作系统的进程同步程序,主要程序源 代码如下:package jframe;import java.io.B ufferedReader;import java.io.FilelnputStream;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.InputstreamReader;import map.CHCTmap;i
4、mport 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 SDTmapO;DCTmap dm=new DCTmapO;COCT
5、map com=new COCTmapO;CHCTmap chm=new CHCTmapO;MainF mf=new MainF();public Fileread()public Fileread(int i) throws NumberFormatException, lOException try (BufferedReader input =new BufferedReader(new InputStreamReader(new FileinputStream(file);/读文件while(next=input.readLine()!=null) Mythread myt=new M
6、ythread();SDT sdt=new SDT();DCT dct=new DCT();COCT coct=new COCTQ;CHCT chct=new CHCT();s=next.split,);sdt.settypeS(sO);sdt.setdeS(sl);dct.set(sO, sl, s2);coct.set(s2, s3);chct.set(s3, s2);myt.set(s4, s0, sl, Double.valueOf(s5), Double.valueOf(s6);mf.mtmf.ii+=myt;sm.setmapS(s0, sdt);dm.setmapD(s0, de
7、t);com. setmapCO(s 2, coct);chm. setmapCH(s 3 , chct);将读到的信息写入4张表对应的映射和进程数组中 catch (FileNotFoundException e) / TODO Auto-generated catch block e.printStackTrace();编号:时间:2021年x月x日添加设备的代码String strl=jTextFieldl. getText () ; /获得jTxtFiIdl中的信息String str2=jTextField2.getText ();String str3=jTextField3 .
8、getText ();String str4=j TextField4.getText ();SDT sdt=new SDT();DCT dct=new DCT ();COCT coct=new COCT ();CHCT chct=new CHCT ();sdt , settypeS (strl);sdt . setdeS(str2);det.set (strl, str2r str3);coct . set(str3, str4);chct . set (str4, str3);MainF.maps.put(strl, sdt);MainF.mapO.put(strl, det);MainF
9、.mapCO.put(str3, coct);MainF.mapCH.put(str4, chct);this.dispose () ; /当前的窗口关闭/申请新进程代码String strl=jTextFieldl.getText();String str2=jTextField2.getText ();String str3=j TextField3 getText ();String str4=jTextField4.getText ();String str5=jTextField5 . getText();double dl=Double.valueOf(str4);double d
10、2=Double.valueOf(str5);Myth read Tntt=new Myth read ();mtt.set(strl, str2, str3, dl, d2);MainF.mtMainF.11+=mtt;this , dispose();/进程代码 package j frame;import java.io.lOException;import java.util.Iterator;import java.util.Map;import j avax.swing.JTextArea;import table.CHCT;import table.COCT;import tab
11、le.DCT;import map.CHCTmap;import map.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();
12、String name;/记录进程名double starttim,runtime;/记录进程的开始时间(会变)和执行时间 double time, us;/time用来记录进程的起始时间,use记录使用时间 String apptyp;/记录进程要申请的设备类型String appd;/设备标识符String ss= ; /记录j txtArea要显示的信息JTextArea text;public void set (String name,String apptype,String appde,double starttime,double runtime)this . name=nam
13、e;this , apptype=apptype;this appde=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.getm
14、apD () .get(apptype);con=dct . get ();coct=(COCT).getmapCO()get (con);ch=coct . get ();catch(Exception e)text. setText (无该类设备“);try (Thread.sieep (9 999 99); catch (InterruptedException el) / TODO Auto-generated catch block el.printStackTrace ();)try Thread, sleep ( (long) time*1000) ; /进程在开始前睡眠if (
15、MainF. signal=l) /signal为暂停标识符,为 1 是暂停30sThread.sleep(30000);MainF.signal=0;)text. setText (且塞中Thread, sleep ( (long) (starttime-time) *1000) ; /阻塞时间if(MainF.signal=l)Thread.sleep(30000);MainF.signal=0;)ss=进程+name+ 向设备+apptype+” ”+app(d+“提出申请+ “n + ” 通过控制器:”+con+”通道:”+ch+”n”+ ”开始执行时间:”+star11ime+“ t
16、 + ”执行中n;text . setText (ss) ; /j textArea显示ss的信息Thread, sleep ( (long) runtime*1000) ; /睡眠执行时间if(MainF.signa1=1)Thread.sleep(30000);MainF.signal=0;)ss=执行结束,使用时间”+us+” ” + “释放资源”;text setText(ss); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();)public String getn
17、ame() return name;)/主界面开始函数int i = 0;int j = 0;int k =为全局静态变量,存储申请的进程数目Mythread myt = null;/冒泡排序,按开始时间升序排序进程if (k = 2) for (i = 0; i k; i+) for (j = i + 1; j mtj.starttime) myt = nit i;mti = /nt j ;mt j = myt;)/ /根据不同的进程数使用不同的方法switch (11) j TextArea2 . setText (该进程未使用”);mtQ. settime(mt0 .starttime)
18、;mt0 setut(mt0 .runtime); 0 . JT (j TextArea2);mt 0 start ();jTextArea3 . setText (该进程未使用”);jTextArea4 . stText (”该进程未使用“);break;jTextArea2 . setText (”该进程未使用”);jTextArea3 . setText (该进程未使用”);j TextArea4 . setText (该进程未使用”);mt0. settime(mt0 .starttime);mtl. settime(mt1 .starttime);mt0. setut(mt0 .ru
19、ntime);mt 0 .JT(jTextArea2);mtQ. start ();/判断是否阻塞,阻塞之后的方法if (mt0.apptype.equals(mt1.apptype) if ( (mt0 .starttime + 0 . runtime) /ntl .starttime) mtl .starttime = mtQ.starttime + n?t 0 . runtime;mtl. setut (/nt 1 .starttime + n?t 1 . runtime - n?t 1 . time);mtl.JT(jTextArea3); 1 . start ();) else n?
20、t 1 , setut (mt 1 . runtime);znt 1 . JT (jTextArea3);mtl. start ();break;j TextArea2 . stTxt (该进程未使用”);j TextArea3 . setText (该进程未使用”);j TextArea4 . setText (该进程未使用”);mt0, settime(mt0 .starttime);mtl. settime(mt1 .starttime);mt2 settime(mt2 .starttime);mt 0 , setut (n?t 0 , n.int-i we);mt0 .JT(jText
21、Area2);mt0. start ();1生产者消费者问题课程设计11.1 题目分析11.2 数据结构11.3 流程图11.4 实现技术91.5 设计结论和心得92 Linux代码分析102.1 功能说明192.2 接口说明192.3 局部数据结构202.4 流程图202.5 以实例说明运行过程23if (mt0.apptype.equals(mt1.apptype) if (mt0.starttime + mtQ.runtime) mtl.starttime) mtl.starttime = mtQ.starttime + /nt 0 . runtime;n?tl . setut (n?t
22、 1 .starttime + 1 . runtime - n?t 1 . time);mt1 .JT(j TextArea3);mtl. start (); else mtl. setut(mt1 .runtime);mtl.JT(jTextArea3);mtl. start ();)try(if (mt0.apptype.equals(mt2.apptype) if ( (/nt0 .starttime + mt0 .runtime) mt 2 . starttime) mt2.starttime = mtQ.starttime + n?t 0 . runtime;mt2. setut (
23、n?t 2 .starttime + mt 2 .runtime - mt 2 . time);mt2 .JT(j TextArea4);mt2. start (); else mt2, setut(mt2 .runtime);mt2.JT(jTextArea4);mt2, start ();)if (mt1.apptype.equals(mt2.apptype) if ( (n)tl .starttime + mt 1 . runtime) mt2.starttime) mt2.starttime = mtl.starttime + mt1.runtime;mt2. setut (n?t 2
24、 .starttime + mt 2 .runtime - mt 2 . time);mt2.JT(jTextArea4);mt2 ,start ();) else mt2. setut(mt2 .runtime);mt2.JT(jTextArea4);mt2. start ();catch(Exception e) break;2.2 功能说明2.3 局部数据结构public static MapmapD =new HashMap();/对应DCT表的映射,key值为设备类型public static MapmapS = new HashMap();/对用SDT的映射,key值为设备类型pu
25、blic static MapmapCO =new HashMap();/对应COCT的映射,ky值为控制器标识符public static MapmapCH =new HashMap ();/对应CHCT的映射,key值为通道标识符public static Mythread mt = new Mythread3;/允许申请3个进程,可根据需要做相应更改2.4 本程序的流程图如图所示2.5 以实例说明运行过程点击暂停可使系统暂停之心30s执行结束,使用时间5.0释放资源 初始化信息print PR chongzhil tongdaol proipr P chongzhi2 tongdao2
26、processprint PR chongzhi3 tongdao3 proi进程2:进程process3向设备print PR提出申请 通过控制器:chongzhi3jlji: tongdao3 开始执行时间:4.0执行中 帆塞中.进程3:初始化开始暂停申请新进程初始进程1:执行结束.使用时间5.0春放资源 执行结束.使用时间90春放资源print PR chong; pr P chongzhi2 print PR Chongs迸程3:添加新设备封添加执行结束,使用时间17.0释放资源初始化开始暂停设备类型:设备标识:PR控制器:通道:确定printkongltongl始取消申请新进程(申请
27、的设备存在)进程力进程process向设备print PR提出申请通过控制器:kongl通道:tongl开始执行时间:2.0执行中. 进程2:该进程未使用 进程3:该进程未使用 申请进程(申请的设备不存在)刁王归口无该类设备 1设备的分配与回收课程设计1.1 题目分析在多到程序环境下,系统中的设备供所有进程共享。为防止进程对系统资源的无序竞 争,特规定系统设备不允许用户自行使用,必须由系统统一分配。每当进程项系统提出I/O 请求时,只要是可能和安全带,设备分配程序编按照一定的策略,吧设备分配给请求用户。 在有的系统中,为了确保在CPU与设备之间能进行通信,还应分配相应的控制器和通道。 为了实现
28、设备分配,必须在系统中设置相应的数据结构。1.2 数据结构设计中用到了 Map (映射)的数据结构,Map结构包括了 key和value两部分,通过k ey的匹配来查询value的值,符合次涉及到的要求,解决了四张表之间的关系public static MapmapD =new HashMap();/对应DCT表的映射,key值为设备类型public static Mapmaps = new HashMap();/对用SDT的映射,key值为设备类型public static MapmapCO = new HashMap();/对应COCT的映射,ky值为控制器标识符public static
29、 MapmapCH = new HashMap ();/对应CHCT的映射,key值为通道标识符public static Mythread mt = new Mythread3;/允许申请3个进程,可根据需要做相应更改以上4个映射用于存放对应表的信息,设计为全局静态是为了能存储文件和添加的设备、 控制器、通道信息。L3流程图实现设计中主程序和其他子模块的算法,以流程图的形式表示,需画出函数和过程的 调用关系图。/输入初始/ 化文件地按行读文件, 读一行将相应信息保存 到相应的Mao中文件是 否结束结束文件读取Fileread (初始化)类将4张表分别保 存到各自的映射 山(N40n)将界面的信息读 入并赋给字符串 赤悬新建4张表结束分别将对应信息 添加到4张表中添加设备increase类-in-将界面信息读入 并赋给字符串变新建用户定义的 讲程类Mv th read分别将对应信息 赋给进程类中的 屋枇一声比新的讲将新的进程类保 存到用户定义的 进程类数组中并 Ji m上当,升工口兴k结束申请新进程increase?类Mythread类:进程执行的方法