⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 (一)进程调度.txt

📁 主要集成了操作系统的主要算法
💻 TXT
字号:
(一)进程调度 

一、 进程调度 
进程调度算法有FIFO,优先数调度算法,时间片轮转调度算法,分级调度算法,目前主要是考FIFO和优先数调度算法(静态优先级)。 

输入:进程流文件,其中存储的是一系列要执行的进程, 
每个作业包括四个数据项: 

进程名 进程状态(1就绪 2等待 3运行) 所需时间 优先数(0级最高) 

输出: 
进程执行流 和等待时间 平均等待时间 


本程序包括:FIFO,优先数调度算法,时间片轮转调度算法 

VC++调试通过 

(C)copyright by Neo 

欢迎大家测试 请问题请Email:sony006@163.com 
*/ 


#include<stdio.h> 
#include<string.h> 
#include<iostream.h> 

const int block_time=10; //定义时间片的长度为10秒 
const int MAXPCB=100; //定义最大进程数 


//定义进程结构体 
typedef struct node{ 
char name[20]; 
int status; 
int time; 
int privilege; 

int finished; 
int wait_time; 
}pcb; 

pcb pcbs[MAXPCB]; 
int quantity; 

//初始化函数 
void initial(){ 
int i; 

for(i=0;i<MAXPCB;i++){ 
strcpy(pcbs.name,""); 
pcbs.status=0; 
pcbs.time=0; 
pcbs.privilege=0; 

pcbs.finished=0; 
pcbs.wait_time=0; 
} 

quantity=0; 
} 

//读数据函数 
int readData(){ 
FILE *fp; 
char fname[20]; 
int i; 

cout<<"请输入进程流文件名:"; 
cin>>fname; 
if((fp=fopen(fname,"r"))==NULL){ 
cout<<"错误,文件打不开,请检查文件名"<<endl; 
} 
else{ 
while(!feof(fp)){ 
fscanf(fp,"%s %d %d %d",pcbs[quantity].name,&pcbs[quantity].status,&pcbs[quantity].time,&pcbs[quantity 
].privilege); 
quantity++; 
} 

//输出所读入的数据 
cout<<"输出所读入的数据"<<endl; 
cout<<"进程名 进程状态 所需时间 优先数"<<endl; 
for(i=0;i<quantity;i++){ 
cout<<" "<<pcbs.name<<" "<<pcbs.status<<" "<<pcbs.time<<" "<<pcbs.privilege<<endl; 
} 
return(1); 
} 
return(0); 

} 

//重置数据,以供另一个算法使用 
void init() 
{ 
int i; 

for(i=0;i<MAXPCB;i++){ 

pcbs.finished=0; 
pcbs.wait_time=0; 
} 
} 


//先进先出算法 
void FIFO() 
{ 
int i,j; 
int total; 

//输出FIFO算法执行流 
cout<<endl<<"---------------------------------------------------------------"<<endl; 
cout<<"FIFO算法执行流:"<<endl; 
cout<<"进程名 等待时间"<<endl; 
for(i=0;i<quantity;i++){ 
cout<<" "<<pcbs.name<<" "<<pcbs.wait_time<<endl; 

for(j=i+1;j<quantity;j++){ 
pcbs[j].wait_time+=pcbs.time; 
} 
} 
total=0; 
for(i=0;i<quantity;i++){ 
total+=pcbs.wait_time; 
} 
cout<<"总等待时间:"<<total<<" 平均等待时间:"<<total/quantity<<endl; 

} 

//优先数调度算法 
void privilege() 
{ 
int i,j,p; 
int passed_time=0; 
int total; 

int queue[MAXPCB]; 
int current_privilege=1000; 

for(i=0;i<quantity;i++){ 
current_privilege=1000; 
for(j=0;j<quantity;j++){ 
if((pcbs[j].finished==0)&&(pcbs[j].privilege<current_privilege)){ 
p=j; 
current_privilege=pcbs[j].privilege; 
} 
} 
queue=p; 
pcbs[p].finished=1; 
pcbs[p].wait_time+=passed_time; 
passed_time+=pcbs[p].time; 
} 

//输出优先数调度执行流 
cout<<endl<<"---------------------------------------------------------------"<<endl; 
cout<<"优先数调度执行流:"<<endl; 
cout<<"进程名 等待时间"<<endl; 
for(i=0;i<quantity;i++){ 
cout<<" "<<pcbs[queue].name<<" "<<pcbs[queue].wait_time<<endl; 
} 

total=0; 
for(i=0;i<quantity;i++){ 
total+=pcbs.wait_time; 
} 
cout<<"总等待时间:"<<total<<" 平均等待时间:"<<total/quantity<<endl; 

} 

//时间片轮转调度算法 
void timer() 
{ 
int i,j,number,flag=1; 
int passed_time=0; 
int max_time=0; 
int round=0; 

int queue[1000]; 
int total=0; 

while(flag==1){ 
flag=0; 
number=0; 

for(i=0;i<quantity;i++){ 
if(pcbs.finished==0){ 
number++; 
j=i; 
} 
} 

if(number==1){ 
queue[total]=j; 
total++; 
pcbs[j].finished=1; 
} 

if(number>1){ 

for(i=0;i<quantity;i++){ 
if(pcbs.finished==0){ 
flag=1; 
queue[total]=i; 
total++; 
if(pcbs.time<=block_time*(round+1)){ 
pcbs.finished=1; 
} 
} 
} 
} 
round++; 
} 

if(queue[total-1]==queue[total-2]){ 
total--; 
} 

cout<<endl<<"---------------------------------------------------------------"<<endl; 
cout<<"时间片轮转调度执行流:"; 
for(i=0;i<total;i++){ 
cout<<pcbs[queue].name<<" "; 
} 


} 

//显示版权信息函数 
void version() 
{ 
cout<<endl<<endl; 

cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl; 
cout<<" ┃       进程调度模拟系统         ┃"<<endl; 
cout<<" ┠───────────────────────┨"<<endl; 
cout<<" ┃   (c)All Right Reserved Neo       ┃"<<endl; 
cout<<" ┃      sony006@163.com          ┃"<<endl; 
cout<<" ┃     version 2004 build 1122      ┃"<<endl; 
cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl; 
cout<<endl<<endl; 
} 


//主函数 
void main() 
{ 
int flag; 

version(); 

initial(); 

flag=readData(); 

if(flag==1){ 
FIFO(); 
init(); 

privilege(); 
init(); 

timer(); 
} 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -