操作系统实验报告1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统实验报告
学院:华东交通大学理工学院
专业:09级电子商务
班级:1班
姓名:邓镇强
学号:20090210460128
提交日期:2011年5月23日
指导老师:徐涢基老师
一、实验题目:计算机操作系统中对设备管理的应用
二、实验目的:
1.对理论课学习的设备管理中的概念做进一步的理解;
2.明白设备管理的主要任务;
3.了解设备管理任务的主要实现方法;
4.通过编程,学会独占设备的分配、回收等主要算法的原理。
三、实验内容:
1.编写程序,由必要的数据结构、主函数、设备分配函数及设备回收函数构成,实现对独占设备的分配与回收的模拟。
2.模拟实验的程序包括建立设备类表的程序段,分配设备和回收设备的函数。分配设备要求输入作业名、设备类名和相对号;回收设备要求输入作业名和设备类名。
四、实验指导:
程序参考代码:
#define false 0
#define true 1
#define n 3
#define m 5
struct{
char type[10];
int count;
int remain;
int address;
}equip_type[n];
struct{
int number;
int status;
int remain;
char jobname[10];
int lnumber;
}equipment[m];
allocate(char * job,char * type,int mm){
int i,t,j;
i=0;
while(i i++; if(i>=n){ printf("无该类设备,设备分配请求失败"); return(false); } if(equip_type[i].remain<1){ printf("该类设备数量不足,设备分配请求失败"); return(false); } t=equip_type[i].address; while(!(equipment[t].status==1&&equipment[t].remain==0)) t++; equip_type[i].remain--; equipment[t].remain=1; strcpy(equipment[t].jobname,job); equipment[t].lnumber=mm; } reclaim(char * job,char * type){ int i,t,j,k,nn; i=0; while(i i++; if(i>=n){ printf("无该类设备,设备回收失败"); return(false); } t=equip_type[i].address; j=equip_type[i].count; k=0; nn=t+j; for(;t if(strcmp(equipment[t].jobname,job)==0&&equipment[t].remain==1){ equipment[t].remain=0; k++; } equip_type[i].remain=equip_type[i].remain+k; if(k==0) printf("作业没有使用该类设备"); } main(){ char job[10]; int i,mm,a; char type[10]; strcpy(equip_type[0].type,"input"); equip_type[0].count=2; equip_type[0].remain=2; equip_type[0].address=0; strcpy(equip_type[1].type,"printer"); equip_type[1].count=3; equip_type[1].remain=3; equip_type[1].address=2; strcpy(equip_type[2].type,"disk"); equip_type[2].count=4; equip_type[2].remain=4; equip_type[2].address=5; for(i=0;i<10;i++){ equipment[i].number=i; equipment[i].status=1; equipment[i].remain=0; } while(1){ printf("\n0--退出,1--分配,2--回收,3--显示"); printf("\n请选择功能项:"); scanf("%d",&a); switch(a){ case 0: exit(0); case 1: printf("请输入作业名。作业所需设备类和设备相对号"); scanf("%s%s%d",job,type,&mm); allocate(job,type,mm); break; case 2: printf("请输入作业名和作业要归还的设备类型"); scanf("%s%s",job,type); reclaim(job,type); break; case 3: printf("\n输出设备类表:\n"); printf("设备类型设备数量空闲设备数量\n"); for(i=0;i printf("%8s%9d%8d\n",equip_type[i].type,equip_type[i].count, equip_type[i].remain); printf("-----------\n"); printf("输出设备表:\n"); printf("绝对号好/坏已/未分配占用作业名相对号\n"); for(i=0;i printf("%3d%7d%8d%10s%7d\n",equipment[i].number,equipment[i].status, equipment[i].remain,equipment[i].jobname,equipment[i].lnumber); } }