ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:327.70KB ,
资源ID:8807620      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8807620.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(设备的分配与回收操作系统课程设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

设备的分配与回收操作系统课程设计.docx

1、设备的分配与回收 操作系统课程设计哈尔滨理工大学课程设计(操作系统)题目: 设备的分配与回收 班级: 计算机科学与技术学院 计算机系10-8班姓名:陈俊鸣 1004010820指导教师:高雪瑶系主任: 林克正 2013年03月01日目 录1生产者消费者问题课程设计 11.1 题目分析 11.2 数据结构 11.3 流程图 11.4 实现技术 21.5 设计结论和心得 22 Linux代码分析 42.1 功能说明 42.2 接口说明 42.3 局部数据结构 42.4 流程图 42.5 以实例说明运行过程 51设备的分配与回收课程设计1.1 题目分析在多到程序环境下,系统中的设备供所有进程共享。为

2、防止进程对系统资源的无序竞争,特规定系统设备不允许用户自行使用,必须由系统统一分配。每当进程项系统提出I/O请求时,只要是可能和安全带,设备分配程序编按照一定的策略,吧设备分配给请求用户。在有的系统中,为了确保在CPU与设备之间能进行通信,还应分配相应的控制器和通道。为了实现设备分配,必须在系统中设置相应的数据结构。1.2数据结构设计中用到了Map(映射)的数据结构,Map结构包括了key和value两部分,通过key的匹配来查询value的值,符合次涉及到的要求,解决了四张表之间的关系 public static Map mapD = new HashMap(); /对应DCT表的映射,ke

3、y值为设备类型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个映射用于存放对应表的信息,设计为全局静态是为了能存储文件和添加的设备、控制器、通道信

4、息。1.3流程图实现设计中主程序和其他子模块的算法,以流程图的形式表示,需画出函数和过程的调用关系图。 文件读取Fileread(初始化)类 添加设备increase类 申请新进程increaseP类Mythread类:进程执行的方法 MainF类1.4实现技术在这次编程中,选择使用的是java是MyEclipse8.6拥有窗口的框架,但同时,由于java中没有指针的概念,使得SDT、DCT、COCT、CHCT之间的练习让我很头疼,所以我选择了使用映射map,映射中包含key和value,而key就好像C+中的指针的next,能将4张表练习到一起。随后,在对进程的void方法中的设计令我认识到

5、自己对java进程知识的掌握还很匮乏,现在还不能很好的运用sleep(),wait(),yield()等方法,也不清楚其之间的区别,因此设计要求中的暂停无法很好的实现。1.5设计结论和心得这次编程,是我对设备的分配有了更进一步的了解,也是我的编译能力得到了锻炼。通过本次课程设计,加深了对所学的操作系统的知识的理解,并且提高了自已的编程水平,也让自已认识到了自已编程中存在的问题,例如:没有对系统做全面分析的习惯,以致于自已的程序没有把全部可能出现的情况考虑进内,以致于对于某一些特别的值,不能给出正确的运行结果,本次课程序设计认自已体会到了全面系统的分析问题的重要性和必要性。多实践,多进行一些编程

6、锻炼,这将成为我今后的一项课程,自己的编程水平还是太水,今后必须更加努力才行。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;impor

7、t 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(); DC

8、Tmap dm=new DCTmap(); COCTmap com=new COCTmap(); 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=input.read

9、Line()!=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.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

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

11、ext(); 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.settypeS(str1); sdt.setdeS(str2); dct.set(str1, str2, str3); coct.set(str3, str4); chct.set(str4, str3); MainF.mapS.put(str1, sdt); MainF

12、.mapD.put(str1, dct); MainF.mapCO.put(str3, 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=Doub

13、le.valueOf(str4); double d2=Double.valueOf(str5); Mythread 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 t

14、able.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(); String con=null;/用来记录当前进程申请设备的控制器 String ch=null;/ 用来记录当前进程申请设备的通道 DCT dct=new DCT(); COCT coct=new COCT(); CHCT chct=new CHCT(); Fileread

15、 filr=new Fileread(); String name;/记录进程名 double starttime,runtime;/记录进程的开始时间(会变)和执行时间 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,dou

16、ble runtime) this.name=name; 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.999s

17、try dct=(DCT)filr.dm.getmapD().get(apptype); con=dct.get(); coct=(COCT).getmapCO().get(con); ch=coct.get(); catch(Exception e) text.setText(无该类设备); try Thread.sleep(999999); catch (InterruptedException e1) / TODO Auto-generated catch block e1.printStackTrace(); try Thread.sleep(long)time*1000);/进程在开

18、始前睡眠 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(30000); MainF.signal=0; ss=进程+name+向+设备+apptype+ +appde+提出申请+n+通过控制器 :+con+通道:+ch+n +开始执行时间:+starttime+t+执行中.; text.se

19、tText(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 e) / TODO Auto-generated catch block e.printStackTrace(); public String getname() return name; /主界面开始函数in

20、t 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 mtj.starttime) myt = mti; mti = mtj; mtj = myt; /根据不同的进程数使用不同的方法 switch (ii) case 1: jTextArea2.setText(该进程未使用); mt0.settime(mt0.starttime); mt0.setut(mt0.runti

21、me); mt0.JT(jTextArea2); mt0.start(); jTextArea3.setText(该进程未使用); jTextArea4.setText(该进程未使用); break; case 2: jTextArea2.setText(该进程未使用); jTextArea3.setText(该进程未使用); jTextArea4.setText(该进程未使用); mt0.settime(mt0.starttime); mt1.settime(mt1.starttime); mt0.setut(mt0.runtime); mt0.JT(jTextArea2); mt0.sta

22、rt();/判断是否阻塞,阻塞之后的方法 if (mt0.apptype.equals(mt1.apptype) if (mt0.starttime + mt0.runtime) mt1.starttime) 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(); brea

23、k; case 3: jTextArea2.setText(该进程未使用); jTextArea3.setText(该进程未使用); jTextArea4.setText(该进程未使用); 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.runt

24、ime) mt1.starttime) 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(); try if (mt0.apptype.equals(mt2.apptype) if (mt0.starttime + mt0.runtime) mt2.starttime) m

25、t2.starttime = mt0.starttime + mt0.runtime; mt2.setut(mt2.starttime + mt2.runtime - mt2.time); mt2.JT(jTextArea4); mt2.start(); else mt2.setut(mt2.runtime); mt2.JT(jTextArea4); mt2.start(); if (mt1.apptype.equals(mt2.apptype) if (mt1.starttime + mt1.runtime) mt2.starttime) mt2.starttime = mt1.startt

26、ime + mt1.runtime; mt2.setut(mt2.starttime + mt2.runtime - mt2.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 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个进程,可根据需要做相应更改2.4本程序的流程图如图所示2.5以实例说明运行过程点击暂停可使系统暂停之心30s添加新设备申请新进程(申请的设备存在)申请进程(申请的设备不存在)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1