资源简介
设计内容:
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(“输入错误,请重
- 上一篇:五子棋实训报告c语言
- 下一篇:基于c++小型公司工资管理系统的设计与实现
相关资源
- 操作系统生产者与消费者综合性实验
- C语言实现调度算法源代码-山东大学操
- 操作系统文件管理系统c++
- 基于FCFS和SPF的进程管理系统可用资源
- 操作系统课程设计 linux文件系统
- c++写的操作系统课程设计:模拟文件
- 操作系统文件管理系统模拟实现
- 处理机调度的模拟实现_C语言
- 操作系统课程设计,设备分配与磁盘
- 多道批处理系统两级调度的模拟
- 空闲分区链源代码
- 操作系统 4种经典同步互斥问题
- 广工操作系统课设:多道批处理系统
- 操作系统抢占式动态优先级调度算法
- 操作系统课设__多道批处理系统两级调
- 计算机操作系统实验报告,C语言实现
- 操作系统基本分页存储系统
- 操作系统实验报告处理机调度算法的
- 安徽大学操作系统实验九最终考试内
- 动态分区分配方式的模拟
- 操作系统电梯调度算法
- nachos操作系统实验三
- 用C\\C++实现操作系统经典同步问题,
- NUR算法和OPT算法实现-----操作系统实验
- 操作系统模拟实现单级目录的文件系
- FCFS和SJF调度算法C++
- 进程同步操作系统实验三,带实验报
- 操作系统的理发师问题解决文件打包
- 操作系统调度算法c语言实现
- 操作系统实验-计算机进程管理和进程
评论
共有 条评论