1 / 16
文档名称:

操作系统实验六-设备管理.doc

格式:doc   大小:229KB   页数:16页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

操作系统实验六-设备管理.doc

上传人:mama 2024/10/13 文件大小:229 KB

下载得到文件列表

操作系统实验六-设备管理.doc

相关文档

文档介绍

文档介绍:该【操作系统实验六-设备管理 】是由【mama】上传分享,文档一共【16】页,该文档可以免费在线阅读,需要了解更多关于【操作系统实验六-设备管理 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。操作系统课程报告试验六设备管理学号姓名班级老师华侨高校电子工程系试验目的理解设备管理的概念和任务。驾驭独占设备的安排、回收等主要算法的原理并编程实现。试验内容与基本要求在Windows系统中,编写程序实现对独占设备的安排和回收的模拟,该程序中包括:建立设备类表和设备表、安排设备和回收设备的函数。试验报告内容独占设备的安排、回收等主要算法的原理。为了提高操作系统的可适应性和可扩展性,现代操作系统中都毫无例外地实现了设备独立性,又叫做设备无关性。设备独立性的含义是:应用程序独立于详细运用的物理设备。为了实现独占设备的安排,系统设置数据表格的方式也不相同,在试验中只要设计合理即可。这里仅仅是一种方案,采纳设备类表和设备表。数据结构操作系统设置“设备安排表”,用来记录计算机系统所配置的独占设备类型、台数以及安排状况。设备安排表可由“设备类表”和“设备表”两部分组成,如下图:(2)设备安排当进程申请某类设备时,系统先查“设备类表”假如该类设备的现存台数可以满意申请要求,则从该类设备的“设备表”始址起先依次查该类设备在设备表中的登记项,找出“未安排”的设备安排给进程。安排后要修改设备类表中的现存台数,把安排给进程的设备标记改为“已安排”且填上占用设备的进程名。然后,把设备的肯定号与相对号的对应关系通知用户,以便用户在安排到的设备上装上存储介质。(3)设备回收当进程执行结束撤离时应归还所占设备,系统依据进程名查设备表,找出进程占用设备的登记栏,把标记修改为“未安排”,清除进程名。同时把回收的设备台数加到设备类表中的现存台数中。程序流程图。主程序流程图:设备安排:设备回收:程序及注释。#include<>#include<>#include<>#definefalse0#rue1#definen4 /*宏定义,用于修改设备类型数目*/#definem10 /*宏定义,用于修改设备数目*/struct /*该结构体用于定义设备类表各信息*/{ chartype[10];/*设备类型名*/ intcount;/*拥有的设备总台数*/ intremain;/*现存的可用设备台数*/ intaddress;/*该类设备在设备表中的起始地址*/}equiptype[n]; /*系统设备类型为n*/struct /*该结构体用于定义设备表各信息*/{ intnumber;/*设备肯定编号*/ intlnumber;/*设备相对编号*/ intstatus;/*设备好坏状态*/ intremain;/*设备是否已被安排*/ charjobname[4];/*占有设备的作业名*/} equipment[m];/*系统设备数为m*/ /**********************子函数:作业设备安排*****************************/allocate(char*J,char*type,) { inti,t,j; i=0; while(i<n&&strcmp(equiptype[i].type,type)!=0) /*查找欲申请安排的设备类型,strcmp函数用于比较equiptype[i].type与type的大小,若相等则返回0*/ i++; if(i>=n)/*若没有找到欲申请设备*/ { printf("没有找到欲安排的设备,安排失败!"); return(false); } if(equiptype[i].remain<1)/*欲申请设备现存可用台数不足*/ { printf("该类设备数量不足,安排失败!"); return(false); } t=equiptype[i].address;/*取出该类设备在设备表中的起始地址赋给t*/ while(!(equipment[t].status==1&&equipment[t].remain==0)) t++;/*该设备类型起始地址加一*/ equiptype[i].remain--; /*剩余设备数减一*/ equipment[t].remain=1; /*状态改为已安排*/ strcpy(equipment[t].jobname,J); /*strcpy为字符串拷贝函数,把J中的字符串拷贝到equipment[t].jobname中*/ equipment[t].; /**/ }/**********************子函数:作业设备回收*****************************/reclaim(char*J,char*type){ inti,t,j,k,nn; i=0; while(i<n&&strcmp(equiptype[i].type,type)!=0) /*查找欲申请归还的设备类型,strcmp函数用于比较equiptype[i].type与type的大小,若相等则返回0*/ i++; if(i>=n)/*若没有找到该类设备*/ { printf("无该类设备,设备回收失败!"); return(false); } t=equiptype[i].address;/*取出该类设备在设备表中的起始地址赋给t*/ j=equiptype[i].count;/*取出该类设备的数量赋给j*/ k=0; nn=t+j; for(;t<nn;t++) if(strcmp(equipment[t].jobname,J)==0&&equipment[t].remain==1) /*若占用某个设备的作业与欲回收的作业相同且状态为已安排*/ { equipment[t].remain=0; /*则将其状态改为未安排*/ k++; /*回收设备计数*/ } equiptype[i].remain=equiptype[i].remain+k; /*该类设备剩余设备数加k*/ if(k==0) /*若回收设备计数值k为0,*/ printf("本作业没有占用这类资源!/n");}/**********************主函数*****************************/voidmain() { charJ[4]; inti,mm,a; chartype[10];