电子信息工程学系实验报告
课程名称:
成 绩: 实验项目名称: 实验时间:
指导教师(签名): 班级: 姓名: 学号:
实 验 目 的:
1.对理论课中学习的设备管理中的概念作进一步的理解; 2.明白设备管理的主要任务;
3.了解设备管理任务的主要实现方法;
4.通过编程,学会独占设备的分配、回收等主要算法的原理
实 验 环 境:
PC机、windows2000 操作系统、Turbo C 2.0 / VC++6.0
实 验 内 容 及 过 程:
操作系统中,对于独占设备,通常使用静态分配方式,就是在一个作业执行准备期间,将该作业所需要使用到的设备分配给作业,在该作业执行期间这个设备归该作业占用,直到作业执行结束才归还给系统。
1. 独占设备分配
设备申请某台设备时,系统先查“设备类表”,如果该类设备的现存可使用数量可以满足申请要求,则从“设备类表”中得到该类设备的设备表起始地址,然后找到“设备表”中该类设备的起始地址,一次查询该类设备的每个登记项,找出“好的且未分配”的设备分配给该作业。分配后要修改设备类表中的现存设备数量,把分配给该作业的设备状态更改为“已分配”,且填上占用该设备的作业的作业名和程序中定义的相对号,最后将设备的绝对号与相对号的对应关系通知用户。
2. 独占设备回收
作业运行完成,释放设备时,系统首先要查看设备表,比较每一项,找到占用作业名与运行完作业的作业名相同的栏目,将这一栏的“已/未分配”设置为“未分配”,然后将设备表中对应设备类的可使用数量增加1.
初始化设备类表
设备类 Input printer disk tape
实 验 结 果 及 分 析: 1.程序初始界面:
第 1 页 共 6 页
设备数量 3 2 4 1 当前空闲设备数 3 2 4 1 设备起始位置 0 3 5 9
2.设备分配,依次输入:
w input 3 , e input 4, t input 5 , g printer 8 ,s disk 1
3. 再输入: h input 2
4.回收设备:w input
第 2 页 共 6 页
实 验 心 得:通过这次试验我对理论课中学习的设备管理中的概念作进一步的理解, 同时也明白设备管理的一些主要任务及其实现方法,起初还不是很清楚通过请教同学,是得对这部分内容有了一个相对透彻的了解!同时我还通过编程,学会独占设备的分配、回收等主要算法的原理。
附 录:
#include
char type[10]; /*设备类名*/ int count; /*拥有设备台数*/
int remain; /*现存的可用设备台数*/
int address; /*该类设备在设备表中的起始地址*/
}equiptype[n]; /*设备类表定义,假定系统有n个设备类型*/ struct {
int number; /*设备绝对号*/ int status; /*设备好坏状态*/ int remain; /*设备是否已分配*/
char jobname[4];/*占有设备的作业名*/ int lnumber; /*设备相对号*/
}equipment[m]; /*设备表定义,假定系统有m个设备*/ allocate(char *J,char *type,int cc) {
int i,t,j;
/*查询该类设备*/ i=0;
while(i if(i>=n)/*没有找到该类设备*/ { printf(\无该类设备,设备分配失败\return(false); } if(equiptype[i].remain<1)/*所需设备现存可用台数不足*/ { printf(\该类设备不足,分配失败\ 第 3 页 共 6 页 return(false); } t=equiptype[i].address;/* 取出该类设备在设备表中的起始地址*/ while(!(equipment[t].status==1 && equipment[t].remain==0)) t++; /*填写作业名、相对号,状态改为已分配*/ equiptype[i].remain--; equipment[t].remain=1; strcpy(equipment[t].jobname,J); equipment[t].lnumber=cc; }/*设备分配函数结束*/ reclaim(char *J,char *type) { int i,t,j,k,nn; i=0; while(i if(i>=n)/*没有找到该类设备*/ { printf(\无该类设备,设备回收失败\return(false); } t=equiptype[i].address; /*取出该类设备在设备表中的起始地址*/ j=equiptype[i].count; /*取出该类设备的数量*/ k=0; nn=t+j; for(;t if(strcmp(equipment[t].jobname,J)==0&&equipment[t].remain==1) { equipment[t].remain=0; equipment[t].lnumber=0; strcpy(equipment[t].jobname,\ \k++; } equiptype[i].remain= equiptype[i].remain+k; if(k==0) printf(\该作业没有使用该类设备/n\}/*设备回收函数结束*/ main( ) { char J[4]; int i,mm,a; char type[10]; /*设备类表初始化:*/ 第 4 页 共 6 页