实验考试 独占设备分配与回收
一、 目的和要求
加深对设备管理的理解。
了解如何分配和回收独占设备
二、 内容
设计一种独占设备分配和回收的方案,要求满足设备独立性。使用编程语言(C 或者
C++)实现这个方案并将源代码和测试截图打包成以自己学号后 2 位+姓名的压缩文件,通
过桌面的红蜘蛛提交给老师。
三、 原理与提示
为了提高操作系统的可适应性和可扩展性,现代操作系统中都毫无例外地实现了设备独
立性,又叫做设备无关性。设备的独立性的含义是:应用程序独立于具体使用的物理设备。
为了实现独占设备的分配,系统设置数据表格的方式也不相同,在本次考试中采用下面
这种方案:设备类表和设备表。初始情况如下图所示:(3 类设备,8 台设备)
1. 数据结构
设备类表
设备类
总台数
空闲台数
设备表地址
2
3
3
占用进程
相对号
输入机(input)
打印机(printer)
磁带机(tape)
2
3
3
设备表
设备物理名 是否分配
1
2
3
0
0
0
4
5
6
7
8
0
0
0
0
0
2. 设备分配
当进程申请某类设备时,系统先查找“设备类表”
如果该类设备的现存台数可以满足申请要求,则从该类设备的“设备表”始址开始依次
查该类设备在设备表中的登记项,找出“未分配”的设备分配给进程。
分配后要修改设备类表中的现存台数,把分配给进程的设备标志改为“已分配”且填上
占用设备的进程名。
然后,把设备的绝对号与相对号的对应关系通知用户,以便用户在分配到的设备上使用。
3. 设备回收
当进程执行结束撤离时应归还所占的设备,系统根据进程名查设备表,找出进程占用设
备的登记栏,把标志修改为“未分配”,清除进程名。同时把回收的设备台数加到设备类表
中的空闲台数中。
代码:
#include
#include
#include
#include
using namespace std;
#define n 4
#define m 10
struct{
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 个设备
bool allocate(char *J,char *type,int cc)
{
int i,t,nn,j;
i=0;
while(i
=n)
{
}
cout<<"无该类设备,设备分配失败"<if(i>=n)//没有找到该类设备
{
printf("无该类设备,设备回收失败!");
return;
}
t=equiptype[i].address;//取出该类设备在设备表中的起始地址
j=equiptype[i].count;//设备的数量
k=0;
nn=t+j;
for(;t
for(i=0;i
4. 参考截图
老师的截图:
我的截图参考: