操作系统-进程调度算法设计与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{temp =a[j];
a[j]=a[j+1];
a[j+1]=temp;
t=b[j];
b[j]=b[j+1];
b[j+1]=t;//优先数高的进程ID调换
s=c[j];
c[j]=c[j+1];
c[j+1]=s;//ID对应பைடு நூலகம்需时间调换
}
}
}
}
void main(void){
int i;
int ID[5]={0};//ID
int PRIORITY[5]={0};//PRI
int CPUTIME[5]={0};//CPUTIME
int ALLTIME[5]={0};//ALLTIME
int arr[][5]={{0,1,2,3,4},{9,38,30,29,0},{0,0,0,0,0},{3,3,6,3,4},{0,0,0,0,0}};
#include<iostream>
void menu(int arr[][5])
{
int i,j;
printf("*******进程调度:*******\n");
for(i =0;i<5;i++)
{
switch(i)
{
case 0: printf("ID:");for(j=0;j<5;j++)printf("%d ",arr[i][j]);printf("\n");break;
}
sort(PRIORITY,ID,ALLTIME);//对优先级由大到小排序
if(ID[0]!=-1)
{
printf("当前正运行的进程:%d\n",ID[0]);
printf("当前的等待序列为: ");
for(i=1;i<5;i++)
{
if(ID[i]!=-1)
printf("%d ",ID[i]);
case 3: printf("NEADTIME:");for(j=0;j<5;j++)printf("%d ",arr[i][j]);printf("\n");break;
case 4: printf("STATE :");for(j=0;j<5;j++)printf("%d ",arr[i][j]);printf("\n");break;
menu(arr);
//二维数组的数据存到一维中
for(i=0;i<5;i++)
{
ID[i]=arr[0][i];
PRIORITY[i]=arr[1][i];
CPUTIME[i]=arr[2][i];
ALLTIME[i]=arr[3][i];
}
while(1)
{
if(ALLTIME[0]<=0)
{
ID[0]=-1;
case 1: printf("PRI :");for(j=0;j<5;j++)printf("%d ",arr[i][j]);printf("\n");break;
case 2: printf("CPUTIMEL:");for(j=0;j<5;j++)printf("%d ",arr[i][j]);printf("\n");break;
}
}
printf("\n********进程调度过程:********\n\n");
}
void sort(int a[],int b[],int c[])
{
int temp,t,s,i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4-i;j++)
{
if(a[j]<a[j+1])//优先级高的进程调换
1实验题目;
进程调度算法设计与实现
2程序中所用数据结构及说明;
界面设计:使用switch语句,采用调用二维数组中的数据;
进程排序:采用冒泡排序法,将优先级高的进程调换;
While循环重复执行进程调度,优先级高的进程调换,每运行一个时间片优先数减3,进程占用时间加1,进程尚需时间减1。
③程序清单及描述;
}
printf("\n\n*******************************\n");
}
PRIORITY[0]-=3;//优先数-3
CPUTIME[0]+=1;//进程占用时间+1
ALLTIME[0]-=1;//进程尚需时间-1
}
}
3执行结果。
4
a[j]=a[j+1];
a[j+1]=temp;
t=b[j];
b[j]=b[j+1];
b[j+1]=t;//优先数高的进程ID调换
s=c[j];
c[j]=c[j+1];
c[j+1]=s;//ID对应பைடு நூலகம்需时间调换
}
}
}
}
void main(void){
int i;
int ID[5]={0};//ID
int PRIORITY[5]={0};//PRI
int CPUTIME[5]={0};//CPUTIME
int ALLTIME[5]={0};//ALLTIME
int arr[][5]={{0,1,2,3,4},{9,38,30,29,0},{0,0,0,0,0},{3,3,6,3,4},{0,0,0,0,0}};
#include<iostream>
void menu(int arr[][5])
{
int i,j;
printf("*******进程调度:*******\n");
for(i =0;i<5;i++)
{
switch(i)
{
case 0: printf("ID:");for(j=0;j<5;j++)printf("%d ",arr[i][j]);printf("\n");break;
}
sort(PRIORITY,ID,ALLTIME);//对优先级由大到小排序
if(ID[0]!=-1)
{
printf("当前正运行的进程:%d\n",ID[0]);
printf("当前的等待序列为: ");
for(i=1;i<5;i++)
{
if(ID[i]!=-1)
printf("%d ",ID[i]);
case 3: printf("NEADTIME:");for(j=0;j<5;j++)printf("%d ",arr[i][j]);printf("\n");break;
case 4: printf("STATE :");for(j=0;j<5;j++)printf("%d ",arr[i][j]);printf("\n");break;
menu(arr);
//二维数组的数据存到一维中
for(i=0;i<5;i++)
{
ID[i]=arr[0][i];
PRIORITY[i]=arr[1][i];
CPUTIME[i]=arr[2][i];
ALLTIME[i]=arr[3][i];
}
while(1)
{
if(ALLTIME[0]<=0)
{
ID[0]=-1;
case 1: printf("PRI :");for(j=0;j<5;j++)printf("%d ",arr[i][j]);printf("\n");break;
case 2: printf("CPUTIMEL:");for(j=0;j<5;j++)printf("%d ",arr[i][j]);printf("\n");break;
}
}
printf("\n********进程调度过程:********\n\n");
}
void sort(int a[],int b[],int c[])
{
int temp,t,s,i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4-i;j++)
{
if(a[j]<a[j+1])//优先级高的进程调换
1实验题目;
进程调度算法设计与实现
2程序中所用数据结构及说明;
界面设计:使用switch语句,采用调用二维数组中的数据;
进程排序:采用冒泡排序法,将优先级高的进程调换;
While循环重复执行进程调度,优先级高的进程调换,每运行一个时间片优先数减3,进程占用时间加1,进程尚需时间减1。
③程序清单及描述;
}
printf("\n\n*******************************\n");
}
PRIORITY[0]-=3;//优先数-3
CPUTIME[0]+=1;//进程占用时间+1
ALLTIME[0]-=1;//进程尚需时间-1
}
}
3执行结果。
4