实验五设备管理 一、实验目的
1、理解设备管理的概念和任务。
2、掌握独占设备的分配、回收等主要算法的原理并编程实现。 二、实验内容与基本要求
1、在Windows系统中,编写程序实现对独占设备的分配和回收的模拟,该程序中包括:建立设备类表和设备表、分配设备和回收设备的函数。 三、实验报告内容
1、独占设备的分配、回收等主要算法的原理。 2、程序流程图。 3、程序及注释。
4、运行结果以及结论。 四、实验报告
1、独占设备的分配、回收等主要算法的原理。 为了提高操作系统的可适应性和可扩展性,现代操作系统中都毫无例外地实现了设备独立性,又叫做设备无关性。设备独立性的含义是:应用程序独立于具体使用的物理设备。 为了实现独占设备的分配,系统设置数据表格的方式也不相同,在实验中只要设计合理即可。这里仅仅是一种方案,采用设备类表和设备表。 (1) 数据结构
操作系统设置“设备分配表”,用来记录计算机系统所配置的独占设备类型、台数以及分配情况。设备分配表可由“设备类表”和“设备表”两部分组成。 (2)设备分配
1) 当进程申请某类设备时,系统先查“设备类表”。
2) 如果该类设备的现存台数可以满足申请要求,则从该类设备的“设备表”始址开始依次查该类设备在设备表中的登记项,找出“未分配”的设备分配给进程。
3) 分配后要修改设备类表中的现存台数,把分配给进程的设备标志改为“已分配”且填上占用设备的进程名。
4) 然后,把设备的绝对号与相对号的对应关系通知用户,以便用户在分配到的设备上装上存储介质。 (3)设备回收
当进程执行结束撤离时应归还所占设备,系统根据进程名查设备表,找出进程占用设备的登记栏,把标志修改为“未分配”,清除进程名。同时把回收的设备台数加到设备类表中的现存台数中。 2、程序流程图。 1)申请设备
2)删除设备
3)释放设备
4 )添加设备
3、程序及注释。(增加一个功能:显示当前正在使用的设备。一个进程申请多个设备?一个设备多个进程申请?) #include \#include \#include %using namespace std; typedefstruct node {
string ID; //进程名
string equipment; //申请的设备名 struct node *next;
}PCB;
typedefstruct
{
string channelID; //通道标识符 bool state; //通道状态
PCB *use; //正在使用该通道的进程 PCB *blockqueue; //阻塞队首 }CHCT;
typedefstruct {
string controllerID; //控制器标示 bool state; //控制器状态 CHCT *front; //通道表指针
PCB *use; //正在使用该控制器的进程 PCB *blockqueue; //阻塞队首 }COCT;
typedefstruct {
char type; //设备类型
string equipmentID; //设备名 bool state; //设备状态 COCT *front; //控制器指针
PCB *use; //正在使用该设备的进程 PCB *blockqueue; //阻塞队首 }DCT;
typedefstruct {
char type; //设备类型
string equipmentID; //设备名 DCT *dct; //设备的DCT }SDT;
DCT *k=new DCT; //键盘的DCT DCT *m=new DCT; //mouse DCT *p=new DCT; //printer DCT *t=new DCT; // 显示 COCT *c1=new COCT; //control COCT *c2=new COCT; COCT *c3=new COCT;
CHCT *h1=new CHCT; //channel CHCT *h2=new CHCT; CHCT *h3=new CHCT;
int check(char cmd) {
switch(cmd) {