设备管理实现_第1页
设备管理实现_第2页
设备管理实现_第3页
设备管理实现_第4页
设备管理实现_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、第3部分、设备管理实现:基本要求:在前面的实验基础上实现设备管理功能的模拟,主要包括通道和控制器的添加和删除,设备的添加、删除,设备的分配和回收。参考学时:12学时实验提示:通道1通道2控制器1控制器2控制器3键盘打印机显示器鼠标CPU1、 假定模拟系统中已有键盘、鼠标、打印机和显示器四个设备,另有三个控制器和两个通道,它们之间的控制关系如图所示:2、 设备管理子系统涉及到系统设备表(SDT)、通道控制表(CHCT)、控制器控制表(COCT)和设备控制表(DCT)来体现输入输出系统的四级结构和三级控制。应实现上述数据结构来完成对外围设备的管理。3、 实现上述设备、控制器以及通道的层次关系,同时

2、能够添加或删除新的设备、控制器或通道。4、 通过键盘命令模拟进程执行过程中提出的设备分配或释放请求,并为此请求分配或释放设备。分配设备成功后可将进程状态调整为阻塞,释放设备后变为就绪状态。5、 分配设备时应如果该设备已被其它进程占用,则设备分配失败,请求进程进入阻塞状态,同时等待该设备的释放。如果设备空闲,进程占用设备的同时还应提出申请控制器请求,直到与设备相关的通道都已申请成功为止。6、 设备、控制器或通道的释放应引起对应节点的等待队列中的第一个阻塞进程被唤醒。如果被唤醒的进程还未完成申请操作,应继续执行上级节点的申请操作。import java.util.Vector;import jav

3、a.io.*;class ProcessPage PageTable;Vector<Page> PageQueue;private int size;private int Pagecount;private String name;double visit;double replacement;public void setPage(Page PageTable) this.PageTable=new PagePageTable.length;for(int i=0;i<PageTable.length;i+) this.PageTablei=PageTablei;publ

4、ic int getPageBlock(int PageNum) return PageTablePageNum.getBlockNum();public void setSize(int size) this.size=size; public int getSize() return size;public void setPagecount(int Pagecount) this.Pagecount=Pagecount; public int getPagecount() return Pagecount;visit=0;replacement=0;public Process() pu

5、blic Process(String name)=name;public Process(String name,int size) this(name);this.size=size;public String toString()return name;class Page int flag;int blockNum;int writed;/xiu gai weiint accessfield;/fang wen zi duanint swapsapce_blockno;/wai cun dizhiint t;blockNum=0;writed=0;accessfiel

6、d=0;t=0;public Page() flag=1;swapsapce_blockno=-1;public Page(int flag,int swapsapce_blockno) this.flag=flag;this.swapsapce_blockno=swapsapce_blockno;public int getBlockNum() return blockNum;public int getFlag() return flag;class IONode String name; IONode next; Process process; Vector<Process>

7、; waitinglist; IONode parent; public IONode() public IONode(String name) =name; public void setNext(IONode next) this.next=next; public IONode getNext() return next; public void setParent(IONode parent) this.parent=parent; public String toString() return name; class CHCT extends IONode Stri

8、ng name; CHCT next; Process process; Vector<Process> waitinglist; /CHCT parent; public CHCT() public CHCT(String name) =name; public void setNext(CHCT next) this.next=next; public CHCT getNext() return next; public void setParent(CHCT parent) this.parent=parent; public String toString

9、() return name; class COCT extends IONode String name; COCT next; Process process; Vector<Process> waitinglist; CHCT parent; public COCT() public COCT(String name) =name; public void setNext(COCT next) this.next=next; public COCT getNext() return next; public void setParent(CHCT paren

10、t) this.parent=parent; public String toString() return name; class DCT extends IONode String name; DCT next; Process process; Vector<Process> waitinglist; COCT parent; public DCT() public DCT(String name) =name; public void setNext(DCT next) this.next=next; public DCT getNext() return

11、 next; public void setParent(COCT parent) this.parent=parent; public String toString() return name; class OS3 public static Vector<Process> ready,blocked; public static Process running; public static BufferedReader br; static int a=new int88; static intd=new int1010;/置换空间 static int count=0; s

12、tatic CHCT chct=new CHCT(); static COCT coct=new COCT(); static DCT dct=new DCT(); public OS3() ready=new Vector<Process>(); blocked=new Vector<Process>();br=new BufferedReader(new InputStreamReader(System.in);for(int i=0;i<a.length;i+) for(int j=0;j<ai.length;j+) if(Math.random()&

13、lt;0.5) aij=0; else aij=1; for(int i=0;i<d.length;i+) for(int j=0;j<di.length;j+) if(Math.random()<0.5) dij=0; else dij=1; InitProcess();/初始化进程InitRelation();/初始化关系/System.out.println("位示图-"); /print(a); /System.out.println("置换空间-"); /print(d); public static void go() wh

14、ile(true) System.out.println("="); System.out.println("1:进程创建 "); System.out.println("2:进程到时 "); System.out.println("3:进程阻塞 "); System.out.println("4:进程唤醒 "); System.out.println("5:进程结束 "); System.out.println("6:逻辑地址转换为物理地址 "); Sy

15、stem.out.println("7:查看页表"); System.out.println("8:显示位示图和置换空间"); System.out.println("9:查看置换次数和缺页率"); System.out.println("10:添加通道"); System.out.println("11:添加控制器"); System.out.println("12:添加设备"); System.out.println("13:删除通道"); Syste

16、m.out.println("14:删除控制器"); System.out.println("15:删除设备"); System.out.println("16:分配设备"); System.out.println("17:释放设备"); System.out.println("18:显示设备分配状态"); System.out.println("0:退出->"); try int i=Integer.parseInt(br.readLine(); switch(i)

17、case 0: System.exit(0); case 1: createNewProcess(); break; case 2: switchCurrentProcess(); break; case 3: blockCurrentProcess(); break; case 4: wakeupBlockedProcess(); break; case 5: terminateCurrentProcess(); break; case 6: transform(); break; case 7: showPage(); break; case 8: System.out.println(&

18、quot;位示图-"); print(a); System.out.println("置换空间-"); print(d); break; case 9: look(); break; case 10: addChannel(); break; case 11: addController(); break; case 12: addDeviced(); break; case 13: deleteChannel ();/删除通道 break; case 14: deleteController(); break; case 15: deleteDeviced();

19、 break; case 16: allocateDeviced(); break; case 17: try System.out.println("设备名称:"); String name=br.readLine(); recoverDeviced(name); catch(Exception e) System.out.println(e); break; case 18: showDevicedAllocate(); break; catch(Exception e) System.out.println(e); System.out.println("执

20、行进程:");if(running!=null) System.out.println(" "+running+"("+running.getSize()+")");else System.out.println("none"); /System.out.println("执行进程:"+(running=null?"none":running+"("+running.getSize()+")");System.out.prin

21、tln("就绪进程:"); printList(ready);System.out.println("阻塞进程:"); printList(blocked); public static void printList(Vector<Process> v) for(int i=0;i<v.size();i+) /System.out.print(v.elementAt(i)+"t"); System.out.println(" "+v.elementAt(i)+"("+(v.el

22、ementAt(i).getSize()+")"+"t"); public static CHCT findChannel(String name1) CHCT c=chct; while(c.getNext()!=null) if(c.getNext().name).equals(name1) return c.getNext(); c=c.getNext(); return null; public static COCT findController(String name1) COCT c=coct; while(c.getNext()!=nul

23、l) if(c.getNext().name).equals(name1) return c.getNext(); c=c.getNext(); return null; public static DCT findDeviced(String name1) DCT d=dct; while(d.getNext()!=null) if(d.getNext().name).equals(name1) return d.getNext(); d=d.getNext(); return null; public static void add(String name1,String name2,in

24、t type) if(type=1) CHCT tmp=new CHCT(name1); CHCT c=chct; while(c.getNext()!=null) /System.out.println("c="+c.getNext(); c=c.getNext(); /System.out.println("c=CHCT"+c); c.setNext(tmp); cess=null; tmp.waitinglist=new Vector<Process>(); tmp.parent=null; if(type=2) COCT

25、 tmp=new COCT(name1); COCT p=coct; CHCT q=findChannel(name2); while(p.getNext()!=null) /System.out.println("p="+p.getNext(); p=p.getNext(); /System.out.println("p=COCT-"+p); p.setNext(tmp); cess=null; tmp.waitinglist=new Vector<Process>(); if(q!=null) tmp.parent=q; e

26、lse System.out.println("no found"); if(type=3) DCT tmp=new DCT(name1); DCT d=dct; COCT c=findController(name2); /System.out.println("is 4 ma"); if(c=null) System.out.println("error"); return; while(d.getNext()!=null) /System.out.println(d); /System.out.println("d=&

27、quot;+d.getNext(); d=d.getNext(); /System.out.println("d=dct="+d); d.setNext(tmp); cess=null; tmp.waitinglist=new Vector<Process>(); if(c!=null) tmp.parent=c; else System.out.println("no found"); public static void addChannel() try System.out.println("输入通道名:&quo

28、t;); String name1=br.readLine(); add(name1,"",1);catch(Exception e) System.out.println(e); public static void addController() try System.out.println("输入控制器名:"); String name1=br.readLine(); System.out.println("输入通道名:"); String name2=br.readLine(); add(name1,name2,2); cat

29、ch(Exception e) System.out.println(e); public static void addDeviced() try System.out.println("输入设备名:"); String name1=br.readLine(); System.out.println("输入控制器名:"); String name2=br.readLine(); add(name1,name2,3); catch(Exception e) System.out.println(e); public static void deleteC

30、hannel () try System.out.println("输入通道名:"); String name=br.readLine(); CHCT c=findChannel(name); CHCT c1=chct; while(c1.getNext()!=null) if(c1.getNext().name.equals() CHCT c2=(c1.getNext().getNext(); c1.setNext(c2); c=null; return; else c1=c1.getNext(); catch(Exception e) System.out.

31、println(e); public static void deleteController() try System.out.println("输入控制器名:"); String name=br.readLine(); COCT c=findController(name); COCT c1=coct; while(c1.getNext()!=null) if(c1.getNext().name.equals() COCT c2=(c1.getNext().getNext(); c1.setNext(c2); c=null; return; else c1=

32、c1.getNext(); catch(Exception e) System.out.println(e); public static void deleteDeviced() try System.out.println("输入设备名:"); String name=br.readLine(); DCT t=findDeviced(name); DCT t1=dct; while(t1.getNext()!=null) if(t1.getNext().name.equals() if(t1.getNext()=null) DCT t2=(t1.getNex

33、t().getNext(); t1.setNext(t2); t=null; return; else System.out.println("The process is running"); return; else t1=t1.getNext(); catch(Exception e) System.out.println(e); public static void allocateDeviced() try if(running!=null) System.out.println("输入设备名:"); String name=br.readLi

34、ne(); DCT d=findDeviced(name); if(cess=null) cess=running; COCT c=d.parent; if(cess=null) cess=running; CHCT t=c.parent; if(t.parent=null) cess=running; else t.waitinglist.add(running); else c.waitinglist.add(running); blockCurrentProcess(); else d.waitinglist.add(running);

35、/COCT c1=d.parent; /if(c1) blockCurrentProcess(); catch(Exception e) System.out.println(e); public static void recoverDeviced(String name) try /System.out.println("设备名称:"); /String name=br.readLine(); DCT d=findDeviced(name); if(d=null) System.out.println("not found"); return; Pr

36、ocess p=cess; if(d.waitinglist.size()>0) /System.out.println("="); /*for(int i=0;i<d.waitinglist.size();i+) System.out.println(i+""+d.waitinglist.elementAt(i); System.out.println("-");*/ cess=(Process)(d.waitinglist.elementAt(0); d.waitinglist.removeElem

37、entAt(0); /*if(cess=null) cess=cess; if(cess=null) cess=cess; */ else cess=null; if(cess=p) if(d.parent.waitinglist.size()>0) cess=(Process)(d.parent.waitinglist.elementAt(0); d.parent.waitinglist

38、.removeElementAt(0); if(cess!=null) d.parent.waitinglist.add(cess); /*if(cess=p) if(d.parent.parent.waitinglist.size()>0) cess=cess; else System.out.println(d.parent.parent.waitinglist); d.parent.parent.waitinglist.add(cess);

39、 */ else cess=cess; else if(cess=p) if(d.parent.parent).waitinglist.size()>0) cess=(Process)(d.parent.waitinglist.elementAt(0);d.parent.parent.waitinglist.removeElementAt(0);d.parent.parent.waitinglist.add(cess);else d.parent.pare

40、cess=cess; Process p1=cess; /Process p2=cess; /Process p3=cess; COCT t=coct; DCT d1=dct; st:while(t.getNext()!=null) /System.out.println("hello"); if(t.getNext().process=p1) while(d1.getNext()!=null) /System.out.println("he=llo&quo

41、t;); /System.out.println("d1-"+d1.getNext().process); /System.out.println("p1="+p1); if(d1.getNext().process=p1) /System.out.println("="); wakeupBlockedProcess(); break st; else d1=d1.getNext(); else t=t.getNext(); catch(Exception e) System.out.println(e); public static

42、 void InitRelation() add("chn1","",1); add("chn2","",1); add("chn3","",1); add("con1","chn1",2); add("con2","chn2",2); add("con3","chn3",2); add("con6","chn2",2

43、); add("dev1","con1",3); /System.out.println("here 3-="); add("dev2","con1",3); /System.out.println("here 4-="); add("dev3","con2",3); /System.out.println("here 5-="); add("dev4","con6",3);

44、add("dev5","con3",3); add("dev6","con3",3); add("dev7","con3",3); add("dev8","con1",3); add("dev9","con1",3); add("dev10","con2",3); add("dev11","con1",3); add(

45、"dev12","con1",3); add("dev13","con2",3); public static void showParent() CHCT t=chct; while(t.getNext()!=null) System.out.println("t="+t.getNext()+"show Parent="+t.getNext().parent); t=t.getNext(); COCT c=coct; while(c.getNext()!=null) /Sy

46、stem.out.println("c="+c.getNext(); System.out.println("c="+c.getNext()+"show Parent="+c.getNext().parent); c=c.getNext(); /System.out.println("show Parent="+c.getNext().parent); DCT d=dct; while(d.getNext()!=null) System.out.println("d="+d.getNext()+"show Parent="+d.getNext().parent); d=d.getNext(); public static void showDevicedAllocate() /showParent(); CHCT c=chct; COCT o=coct; DCT d=dct; while(c.getNext()!=null) if(c.getNext().process!=null) System.o

温馨提示

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

评论

0/150

提交评论