-
大小: 15KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-05-29
- 語言: C/C++
- 標(biāo)簽: C語言??操作系統(tǒng)??
資源簡(jiǎn)介
處理機(jī)調(diào)度的模擬實(shí)現(xiàn),用先來先服務(wù)、短作業(yè)優(yōu)先、最短剩余時(shí)間優(yōu)先、時(shí)間片輪轉(zhuǎn)、基于靜態(tài)優(yōu)先級(jí)的調(diào)度,基于高響應(yīng)比優(yōu)先的動(dòng)態(tài)優(yōu)先級(jí)調(diào)度處理機(jī)調(diào)度算法的實(shí)現(xiàn),能夠模擬進(jìn)程調(diào)度情況,并輸出進(jìn)程的完成時(shí)間,計(jì)算周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間,平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間。要求使用鏈表,進(jìn)程個(gè)數(shù)由用戶提供,按照進(jìn)程的實(shí)際個(gè)數(shù)生成PCB。程序能夠讓用戶選擇使用哪種調(diào)度算法,進(jìn)程基本信息要既可從文件讀入,也可手動(dòng)輸入。程序還要考慮用戶界面的友好性和使用方便性。
代碼片段和文件信息
#include
#include
#include
#include
#include?
#include?
#include?
#include?
using?namespace?std;
typedef?struct?PCB{
char?id; //進(jìn)程名字
float?arrival_time;//到達(dá)時(shí)間
float?service_time;//服務(wù)時(shí)間
float?start_time;//開始執(zhí)行時(shí)間
float?finish_time;//完成時(shí)間
float?turnover_time;//周轉(zhuǎn)時(shí)間
float?weight_time;//帶權(quán)周轉(zhuǎn)時(shí)間
int?True;//標(biāo)志是否運(yùn)行結(jié)束
float?sum_waittime;//等待時(shí)間
float?remain_time;//剩余時(shí)間
int?static_begin;//靜態(tài)優(yōu)先級(jí)
float?run_time;//運(yùn)行時(shí)間
}PCB;
static?queueRRqueue;??//聲明一個(gè)隊(duì)列
static?int?T;??//時(shí)間片
static?int?n;??//進(jìn)程個(gè)數(shù)
static?PCB?p[100];??//進(jìn)程結(jié)構(gòu)
static?PCB?q[100];??//模擬進(jìn)程就緒隊(duì)列
static?PCB?temp;//用于交換兩個(gè)進(jìn)程所有信息的中間變量
void?init()//進(jìn)程信息初試化
{
int?ij;
for(i=0;i {
p[i].True=0;//都有進(jìn)程狀態(tài)都置為0,表示沒有執(zhí)行完該進(jìn)程
p[i].sum_waittime=0;
}
//對(duì)進(jìn)程按到達(dá)時(shí)間排序
for(i=0;i {
for(j=0;j<=i;j++)???//按照各進(jìn)程到達(dá)時(shí)間升序,對(duì)進(jìn)程排序
{
if(p[j].arrival_time>p[i].arrival_time)
{
temp=p[j];
p[j]=p[i];
p[i]=temp;
}
}
}
//for(i=0;i // printf(“%c\n“p[i].id);//檢測(cè)是否排序?qū)?br/>}
void?input()//進(jìn)程信息輸入
{
int?choice;
printf(“\t\t*****************************\n“);
printf(“\t\t選擇你要輸入進(jìn)程信息的方式:\n“);
printf(“\t\t1?文件讀入方式\n“);
printf(“\t\t2?手動(dòng)輸入方式\n“);
printf(“\t\t*****************************\n“);
scanf(“%d“&choice);
system(“cls“);
int?i;
if(choice==1)
{
//文件讀取模式
ifstream?inData;
inData.open(“input.txt“);
inData>>n;
for?(i=0;i {
inData>>p[i].id;
}
for?(i=0;i {
inData>>p[i].arrival_time;
}
for?(i=0;i {
inData>>p[i].service_time;
}
}
else
{
//用戶輸入模式
printf(“請(qǐng)輸入進(jìn)程的個(gè)數(shù):“);
scanf(“%d“&n);
printf(“請(qǐng)輸入這些進(jìn)程的名字id:\n“);
for?(i=0;i {
cin>>p[i].id;
}
printf(“請(qǐng)輸入進(jìn)程到達(dá)時(shí)間:\n“);
for?(i=0;i {
cin>>p[i].arrival_time;
}
printf(“請(qǐng)輸入進(jìn)程服務(wù)時(shí)間:\n“);
for?(i=0;i {
cin>>p[i].service_time;
}
}
init();//初始化
// 輸出用戶所輸入的信息
printf(“The?information?of?processes?is?the?following:\n“);
printf(“\t進(jìn)程名\t到達(dá)時(shí)間\t服務(wù)時(shí)間\n“);
for?(i=0;i {
cout< cout< cout< }
printf(“************************************************\n“);
}
//先來先服務(wù)
void?FCFS()
{
input();
int?i;
float?sum=0;
float?sum1=0;
float?avg_time;//平均周轉(zhuǎn)時(shí)間
float?avg_time1;//平均帶權(quán)周轉(zhuǎn)時(shí)間
//初始化第一個(gè)進(jìn)程的開始時(shí)間(即到達(dá)時(shí)間),和結(jié)束時(shí)間。
p[0].start_time=p[0].arrival_time;
p[0].finish_time=p[0].service_time+p[0].start_time;
for(i=1;i {
//判斷到達(dá)時(shí)間與前一個(gè)進(jìn)程的完成時(shí)間
if(p[i].arrival_time {
p[i].start_time=p[i-1].finish_time;
}
else
{
p[i].start_time=p[i].arrival_time;
}
//完成時(shí)間等于開始時(shí)間+服務(wù)時(shí)間
p[i].finish_time=p[i].service_time+p[i].start_time;
}
for(i=0;i {
p[i].turnover_time=p[i].finish_time-p[i].arrival_time;//計(jì)算周轉(zhuǎn)時(shí)間
p[i].weight_time=p[i].turnover_time/p[i].service_time;/
評(píng)論
共有 條評(píng)論