资源简介

设计内容: 1、参考操作系统有关设备分配的分配策略,模拟给出设备请求到分配的过程,对于外部存储器设备,分配后要模拟出它的的I/O过程,调用磁盘调度算法。 2、设备分配的过程中,要给设备分配设备控制器,通道都要有。 3、系统的设备最少要有3种,控制器每台设备最少对应1个和通道系统最少有3个。 3、磁盘调度算法要用先来先服务,电梯调度和循环扫描算法(算法可以选择) 4、设备管理要有设备控制表,设备分配表,通道控制表,控制器控制表等。 设计要求: 要求在屏幕上输出各设备的分配过程及信息,如果用到磁盘调度算法时,输出磁盘调度算法的调度顺序及平均寻道长度等,I/O时的寻道内容(磁道号)可手工给出。..

资源截图

代码片段和文件信息

# include 
# include  
# include 
# include 
# include 

using namespace std;
const int maxn = 100;
const int size = 1000;
const int p_size = 10000;
int pass[p_size]; 
int flag;
int flag1;
int nnow;
int ssum;
int nnoweverage;
int p[maxn]b[maxn]sp[maxn]lenp[maxn];

struct node{
int cnum;     //控制器号 
int cstate;   //控制器状态 0空闲 1占用 
int connum;   //连接设备号
int conpass[5];  //连接通道号 
}controller[size]; //控制器 

struct node1{
char name[100];
int dnum;     //设备号
int conc;     //连接控制器号 
}device[size]; //设备 

int sc()
{
printf(“\n->请输入选择: “);
int a;
scanf(“%d“&a);
printf(“\n“); 
return a;
}

void ask()
{
printf(“请输入分配设备信息:\n“);
int n;
printf(“->设备号:“);
scanf(“%d“&n);
while(device[n].dnum) 
{
printf(“该设备号已存在!\n“);
printf(“->设备号:“);
scanf(“%d“&n);
}
device[n].dnum = n;
printf(“->设备名:“);
scanf(“%s“device[n].name);
printf(“->连接的控制器号:“);
int p a b c;
scanf(“%d“&p);
while(controller[p].cstate)
{
printf(“该控制器已被占用,请重新选择!\n“);
printf(“->连接的控制器号:“);
scanf(“%d“&p);
}
device[n].conc = p;
controller[p].cstate = 1;
controller[p].connum = n;
printf(“->连接通道号(3个通道):“);
scanf(“%d%d%d“&a&b&c);
while(pass[a] || pass[b] || pass[c])
{
if(pass[a]) printf(“%d通道已被占用,请重新选择!\n“a);
if(pass[b]) printf(“%d通道已被占用,请重新选择!\n“b);
if(pass[c]) printf(“%d通道已被占用,请重新选择!\n“c);
printf(“->连接通道号(3个):“);
scanf(“%d%d%d“&a&b&c);
}
controller[p].conpass[0] = a;
controller[p].conpass[1] = b;
controller[p].conpass[2] = c;
pass[a] = p;
pass[b] = p;
pass[c] = p;
flag++;
flag1++;
printf(“分配成功!\n\n“); 
}

void rid()
{
printf(“->请输入释放设备号:“);
int n;
scanf(“%d“&n);
int m = 1;
if(!device[n].dnum) printf(“不存在设备!\n\n“);
else if(!device[n].conc) printf(“该设备空闲!\n\n“); 
else 
{
int a = device[n].conc;
device[n].conc = 0;
controller[a].cstate = 0;
controller[a].connum = 0;
pass[controller[a].conpass[0]] = 0;
pass[controller[a].conpass[1]] = 0;
pass[controller[a].conpass[2]] = 0;
flag1--;
printf(“释放成功!\n\n“);
}
}

void del()
{
printf(“->请输入删除设备号:“);
int n;
scanf(“%d“&n);
if(!device[n].dnum) printf(“不存在设备!\n\n“);
else 
{
if(device[n].conc) flag1--;
int a = device[n].conc;
device[n].dnum = 0;
device[n].conc = 0;
controller[a].cstate = 0;
controller[a].connum = 0;
pass[controller[a].conpass[0]] = 0;
pass[controller[a].conpass[1]] = 0;
pass[controller[a].conpass[2]] = 0;
flag--;
printf(“删除成功!\n\n“);
}
}

void allot()  //设备管理 
{
printf(“---------------------------------\n“);
printf(“--------设备管理-----------------\n“);
printf(“--------1、请求分配--------------\n“);
printf(“--------2、释放------------------\n“);
printf(“--------3、删除------------------\n“);
printf(“--------0、返回------------------\n“);
printf(“---------------------------------\n“);
int n = sc();
while(n<0 || n>3)
{
printf(“输入错误,请重

评论

共有 条评论