实验二独占设备分配与回收_第1页
实验二独占设备分配与回收_第2页
实验二独占设备分配与回收_第3页
实验二独占设备分配与回收_第4页
实验二独占设备分配与回收_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、实验二 独占设备分配与回收一、 实验目的:l 加深对设备管理的理解。l 深入了解如何分配和回收独占设备。二、 实验预备知识:ü 设备独立性。ü 独占设备的特性。ü 系统设备表和物理设备表。三、 实验内容:设计一种独占设备分配和回收的方案,要求满足设备独立性。编写程序实现这个方案并进行测试。四、 提示与讲解:为了提高操作系统的可适应性和可扩展性,现代操作系统中都毫无例外地实现了设备独立性,又叫做设备无关性。设备独立性的含义是:应用程序独立于具体使用的物理设备。为了实现独占设备的分配,系统设置数据表格的方式也不相同,在实验中只要设计合理即可。这里仅仅是一种方案,采用设

2、备类表和设备表。(1) 数据结构操作系统设置“设备分配表”,用来记录计算机系统所配置的独占设备类型、台数以及分配情况。设备分配表可由“设备类表”和“设备表”两部分组成,如下图:1 / 10设备类总台数空闲台数设备表始址输入机21打印机11设备物理名是否分配占用进程001未分配002已分配J1003未分配设备类表 设备表(2) 设备分配1) 当进程申请某类设备时,系统先查“设备类表”。2) 如果该类设备的现存台数可以满足申请要求,则从该类设备的“设备表”始址开始依次查该类设备在设备表中的登记项,找出“未分配”的设备分配给进程。3) 分配后要修改设备类表中的现存台数,把分配给进程的设备标志改为“已

3、分配”且填上占用设备的进程名。4) 然后,把设备的绝对号与相对号的对应关系通知用户,以便用户在分配到的设备上装上存储介质。(3) 设备回收当进程执行结束撤离时应归还所占设备,系统根据进程名查设备表,找出进程占用设备的登记栏,把标志修改为“未分配”,清除进程名。同时把回收的设备台数加到设备类表中的现存台数中。五、 参考程序:#define False 0#define true 1#define n 4#define m 10struct char type10;/设备类名 int count;/拥有设备台数 int remain;/空闲台数,现存的可用设备台数 int address;/该类设

4、备在设备表中的起始地址equiptypen;/设备类表定义,假定系统有n个设备类型structint number;/设备绝对号int status;int remain;/设备是否已分配 char jobname4;/占有设备的进程名 int lnumber;/设备相对号equipmentm;/设备表定义,假定系统有m个设备allocate(J,type,mm)char *J,*type;int mm;int i,t,j; i=0;while(i<n&&strcmp(equiptypei.type,type)!=0)i+;if(i>=n)cout<<”

5、无该类设备,设备分配失败”<<endl; return False;if(equiptypei.remain<1) cout<<”该类设备不足,分配失败”<<endl; return False;t=equiptypei.address;while(!(equipmentt.remain=0)t+;equiptypei.remain-;equipmentt.remain=1;strcpy(equipmentt.jobname,J);equipmentt.lnumber=mm;return 1;reclaim(J,type)char J,type;int

6、 i,t,j,k,nn; i=0;while(i<n&&strcmp(equiptypei.type,type)!=0)i+;if(i>=n)cout<<”无该类设备,设备分配失败”<<endl; return False; t=equiptypei.address; j=equiptypei.count; k=0; nn=t+j; for(;t<nn;t+) if(strcmp(equipmentt.jobname,J)=0&&equipmentt.remain=1) equipmentt.remain=0; k+;

7、equiptypei.remain=equiptypei.remain+k; if(k=0) cout<<”该进程没有使用该类设备”<<endl; return 1;main()char J4;int i,mm,a;char type10;strcpy(equiptype0.type,”input”);equiptype0.count=2;equiptype0.remain=2;equiptype0.address=0;strcpy(equiptype1.type,”printer”);equiptype1.count=3;equiptype1.remain=3;equ

8、iptype1.address=2;strcpy(equiptype2.type,”disk”);equiptype2.count=4;equiptype2.remain=4;equiptype2.address=5;strcpy(equiptype3.type,”tape”);equiptype3.count=1;equiptype3.remain=1;equiptype3.address=9;for(i=0;i<10;i+) equipmenti.number=i; equipmenti.remain=0; while(1) cout<<endl<<”0-退出

9、,1-分配,2-回收,3-显示”<<endl; cout<<”选择功能项(03):”; cin>>a; switch(a) case 0: exit(0); case 1: cout<<”输入进程名、进程所需设备类和设备相对号”; cin>>J>>type>>mm; allocate(J,type,mm); break; case 2: cout<<”输入进程名和进程归还的设备类”; cin>>J>>type; reclaim(J,type); break; case 3:

10、cout<<endl<<”输出设备类表”<<endl; cout<<”设备类型 设备总量 空闲设备台数”<<endl; for(i=0;i<n;i+) cout<<equiptypei.type<<equiptypei.count<<equiptypei.remain<<endl; cout<<”输出设备表:”<<endl; cout<<”绝对号 好/坏 已/未分配 占用进程名 相对号”<<endl; for(i=0;i<m;i+) cout<<equipmenti.number<<eq

温馨提示

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

评论

0/150

提交评论