-
大小: 9KB文件類(lèi)型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-06-02
- 語(yǔ)言: C/C++
- 標(biāo)簽: 操作系統(tǒng)??設(shè)備分配??磁盤(pán)調(diào)度??
資源簡(jiǎn)介
設(shè)計(jì)內(nèi)容:
1、參考操作系統(tǒng)有關(guān)設(shè)備分配的分配策略,模擬給出設(shè)備請(qǐng)求到分配的過(guò)程,對(duì)于外部存儲(chǔ)器設(shè)備,分配后要模擬出它的的I/O過(guò)程,調(diào)用磁盤(pán)調(diào)度算法。
2、設(shè)備分配的過(guò)程中,要給設(shè)備分配設(shè)備控制器,通道都要有。
3、系統(tǒng)的設(shè)備最少要有3種,控制器每臺(tái)設(shè)備最少對(duì)應(yīng)1個(gè)和通道系統(tǒng)最少有3個(gè)。
3、磁盤(pán)調(diào)度算法要用先來(lái)先服務(wù),電梯調(diào)度和循環(huán)掃描算法(算法可以選擇)
4、設(shè)備管理要有設(shè)備控制表,設(shè)備分配表,通道控制表,控制器控制表等。
設(shè)計(jì)要求:
要求在屏幕上輸出各設(shè)備的分配過(guò)程及信息,如果用到磁盤(pán)調(diào)度算法時(shí),輸出磁盤(pán)調(diào)度算法的調(diào)度順序及平均尋道長(zhǎng)度等,I/O時(shí)的尋道內(nèi)容(磁道號(hà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;?????//控制器號(hào)?
int?cstate;???//控制器狀態(tài)?0空閑?1占用?
int?connum;???//連接設(shè)備號(hào)
int?conpass[5];??//連接通道號(hào)?
}controller[size];?//控制器?
struct?node1{
char?name[100];
int?dnum;?????//設(shè)備號(hào)
int?conc;?????//連接控制器號(hào)?
}device[size];?//設(shè)備?
int?sc()
{
printf(“\n->請(qǐng)輸入選擇:?“);
int?a;
scanf(“%d“&a);
printf(“\n“);?
return?a;
}
void?ask()
{
printf(“請(qǐng)輸入分配設(shè)備信息:\n“);
int?n;
printf(“->設(shè)備號(hào):“);
scanf(“%d“&n);
while(device[n].dnum)?
{
printf(“該設(shè)備號(hào)已存在!\n“);
printf(“->設(shè)備號(hào):“);
scanf(“%d“&n);
}
device[n].dnum?=?n;
printf(“->設(shè)備名:“);
scanf(“%s“device[n].name);
printf(“->連接的控制器號(hào):“);
int?p?a?b?c;
scanf(“%d“&p);
while(controller[p].cstate)
{
printf(“該控制器已被占用,請(qǐng)重新選擇!\n“);
printf(“->連接的控制器號(hào):“);
scanf(“%d“&p);
}
device[n].conc?=?p;
controller[p].cstate?=?1;
controller[p].connum?=?n;
printf(“->連接通道號(hào)(3個(gè)通道):“);
scanf(“%d%d%d“&a&b&c);
while(pass[a]?||?pass[b]?||?pass[c])
{
if(pass[a])?printf(“%d通道已被占用,請(qǐng)重新選擇!\n“a);
if(pass[b])?printf(“%d通道已被占用,請(qǐng)重新選擇!\n“b);
if(pass[c])?printf(“%d通道已被占用,請(qǐng)重新選擇!\n“c);
printf(“->連接通道號(hào)(3個(gè)):“);
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(“->請(qǐng)輸入釋放設(shè)備號(hào):“);
int?n;
scanf(“%d“&n);
int?m?=?1;
if(!device[n].dnum)?printf(“不存在設(shè)備!\n\n“);
else?if(!device[n].conc)?printf(“該設(shè)備空閑!\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(“->請(qǐng)輸入刪除設(shè)備號(hào):“);
int?n;
scanf(“%d“&n);
if(!device[n].dnum)?printf(“不存在設(shè)備!\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()??//設(shè)備管理?
{
printf(“---------------------------------\n“);
printf(“--------設(shè)備管理-----------------\n“);
printf(“--------1、請(qǐng)求分配--------------\n“);
printf(“--------2、釋放------------------\n“);
printf(“--------3、刪除------------------\n“);
printf(“--------0、返回------------------\n“);
printf(“---------------------------------\n“);
int?n?=?sc();
while(n<0?||?n>3)
{
printf(“輸入錯(cuò)誤,請(qǐng)重
評(píng)論
共有 條評(píng)論