- 一、实验目的
- 二、实验内容
- 三、数据结构
- 3.1 数据结构
- 3.2 函数以及功能
- 四、程序流程图
- 五、实验代码
- 六、实验结果
- 七、实验体会总结
①理解设备管理的概念和任务。
②掌握独占设备的分配、回收等主要算法的原理并编程实现。
在Windows系统中,编写程序实现对独占设备的分配与回收的模拟,该程序中包括:建立设备类表和设备表、分配设备和回收设备的函数。
三、数据结构 3.1 数据结构struct EquipType
{
char type[10];//设备类名
int count;//拥有设备数量
int remain;//现存的可用设备数量
int address;//该类设备在设备表中的起始地址
}equip_type[N]; //设备类表定义,假设系统有n个设备类型
struct Equipment
{
int number;//设备绝对号
bool status;//设备状态可否使用
bool isRemain;//设备是否已分配
char jobName[10];//占有设备的作业名称
int lnumber;//设备相对号
}equipment[M]; //设备表定义,假设系统有m个设备
3.2 函数以及功能
| 函数名称 | 功能描述 |
|---|---|
| bool Allocate(char* job,char* type,int mm) | 设备分配函数 |
| bool Reclaim(char* job,char* type) | 设备回收函数 |
| void DisplayInfo() | 信息作者展示 |
| int main() | main函数 |
#include六、实验结果#include #define N 3//假设系统有3类设备 #define M 5//假设系统有5个设备 #define SYSINFO "设备管理演示" // 系统信息 #define AUTHOR "Yrani - 依然 " //作者 struct EquipType { char type[10];//设备类名 int count;//拥有设备数量 int remain;//现存的可用设备数量 int address;//该类设备在设备表中的起始地址 }equip_type[N]; //设备类表定义,假设系统有n个设备类型 struct Equipment { int number;//设备绝对号 bool status;//设备状态可否使用 bool isRemain;//设备是否已分配 char jobName[10];//占有设备的作业名称 int lnumber;//设备相对号 }equipment[M]; //设备表定义,假设系统有m个设备 //信息展示 void DisplayInfo() { printf("★★★★★★★★★★★★★★★★★★n"); printf("★☆☆☆ | %s | ☆☆☆★n",SYSINFO); printf("★☆☆☆ | @Author:%s | ☆☆☆★n",AUTHOR); printf("★☆☆☆ ------------------ ☆☆☆★n"); printf("★☆☆☆ | 1、分配 | ☆☆☆★n"); printf("★☆☆☆ | 2、回收 | ☆☆☆★n"); printf("★☆☆☆ | 3、显示 | ☆☆☆★n"); printf("★☆☆☆ | 0、退出 | ☆☆☆★n"); printf("★☆☆☆ ------------------ ☆☆☆★n"); printf("★★★★★★★★★★★★★★★★★★n"); } //设备分配函数 bool Allocate(char* job,char* type,int mm) { int i = 0, t; //查询该类设备 while(i < N && strcmp(equip_type[i].type,type)!=0) i++; //没有找到该类设备 if(i >= N) { printf("无该类设备,设备分配请求失败n"); return false; } //所需设备现存的可用数量不足 if(equip_type[i].remain < 1) { printf("该类设备数量不足,设备分配请求失败n"); return false; } //得到该类设备在设备表中的起始地址 t = equip_type[i].address; while(!(equipment[t].status == true&&equipment[t].isRemain == false)) { t++; } //填写作业名、设备相对号,状态 equip_type[i].remain--; equipment[t].isRemain = true; strcpy(equipment[t].jobName,job); equipment[t].lnumber = mm; return true; } //设备回收函数 bool Reclaim(char* job,char* type) { int i = 0,t,j,k=0,nn; while(i < N && strcmp(equip_type[i].type,type) != 0)i++; //没有找到该类设备 if(i >= N) { printf("无该类设备,设备分配请求失败"); return false; } //得到该类设备在设备表中的起始地址 t = equip_type[i].address; //得到该设备的数量 j = equip_type[i].count; nn = t+j; //修改设备为可使用状态和该类型设备可用数量 for(; t < nn; t++) { if(strcmp(equipment[t].jobName,job)==0 && equipment[t].isRemain == true) { equipment[t].isRemain = false; k ++; } } equip_type[i].remain = equip_type[i].remain + k; if(k == 0) { printf("作业没有使用该类设备"); return true; } } int main() { char job[10]; int i, mm, choose; 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,"camera"); equip_type[2].count = 4; equip_type[2].remain = 4; equip_type[2].address = 5; for(i = 0; i < M; i++) { equipment[i].number = i; equipment[i].status = true; equipment[i].isRemain = false; } while(1) { DisplayInfo(); printf("请选择功能项:n"); scanf("%d", &choose); switch(choose) { case 0: return 0; case 1: printf("请输入作业名、作业所需设备类和设备相对号n"); scanf("%s%s%d",job,type,&mm); Allocate(job,type,mm);//分配设备 break; case 2: printf("请输入作业名和作业要归还的设备类型n"); scanf("%s%s",job,type); Reclaim(job,type);//回收设备 break; case 3: printf("n输出设备类表:n"); printf("设备类型t设备数量t空闲设备数量n"); for(i=0; i < N; i++) { printf("%8s%10d%18dn",equip_type[i].type,equip_type[i].count,equip_type[i].remain); } printf("---------------------------------------------------------------------------n"); printf("输出设备表:n"); printf("绝对号t状态 是否分配t占用作业名t相对号n"); for(i = 0; i < M; i++) { printf("%3d%8d%7d%14s%11dn",equipment[i].number,equipment[i].status,equipment[i].isRemain,equipment[i].jobName,equipment[i].lnumber); } break; default: return 0; } } return 0; }
1. 设备分配及回收主界面
2. 显示设备类、拥有的设备数量、及空闲设备数量
3. 设备分配(作业名:键盘 设备类:input,相对号:101)
4. 显示设备查看是否分配成功(input设备类型空闲设备量剩余1)
5. 回收设备(作业名:键盘 设备类:input,相对号:101)
6. 显示设备信息查看是否回收成功(input设备类型空闲设备量已变回2)
7. 进行设备的分配(作业名:打印机,设备类:printer,相对号:102)并显示设备信息
8. 退出
总结与体会:
- 此次实验思路较为容易理解,也很好调试,相较于前一次实验,难度降低很多。
- 此次实验的目的是实现设备管理,设备管理包概括设备管理的概念和任务,以及独占设备的分配,和回收算法的实现。
- 通过此次实验拓展了我对设备管理的认识,加深了对独占设备的分配,以及回收算法的理解与掌握。
- 其中设备管理实现了设备的分配、回收、显示。
- 分配设备就会使得设备类型被分配掉一个,设备类型为input的空闲设备数量减少1。
- 回收设备以后相应的资源数量就会被归还回来,从而使得数量+1
- 显示就是需要把变量的信息打印出来,进行展示,更为直观。
- 代码的规范程度越来越高了!一定要坚持下去,写出更漂亮的代码!



