计算机操作系统课程设计源代码《处理机调度算法的实现源代码》
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《处理机调度算法的实现》源代码
#include "stdio.h"
#include
#include "time.h"
#include
typedef struct{
int id;
int reach;
float service;
int prior;
int finish;
float turnover;
float cum_turnover;
}process;
process p[20];
int sort[20];
int wait[20];
int n;
int alltime=0;
char c;
void in(){
printf("请输入要建立的进程数:\n");
scanf("%d",&n);
int i;
int j;
int temp;
srand(time(0));
for(i=0;i printf("\n进程%d号:\n",i); printf("进程uid:"); scanf("%d",&p[i].id); p[i].reach=rand()%10+1; printf("到达时间:%d\n",p[i].reach); p[i].service=rand()%10+1; printf("服务时间:%f\n",p[i].service); if(c=='c'){ p[i].prior=rand()%10+1; printf("优先权:%d\n",p[i].prior); }else p[i].prior=0; p[i].finish=0; p[i].turnover=p[i].service; p[i].cum_turnover=p[i].prior; sort[i]=i; alltime=alltime+p[i].service; } for(i=1;i for(j=0;j if(p[sort[j]].reach>p[sort[j+1]].reach){ temp=sort[j]; sort[j]=sort[j+1]; sort[j+1]=temp; } } } alltime=alltime+p[sort[0]].reach; } void out(){ int i; if(c=='c'){ printf("进程uid\t到达时间\t服务时间\t优先权\t完成时间\t周转时间\t带权周转时间\n"); for(i=0;i printf("%d\t%d\t\t%f\t%d\t%d\t\t%f\t%f\n",p[i].id, p[i].reach,p[i].service,p[i].prior,p[i].finish,p[i].turnover,p[i].cum_turnover ); }else { printf("进程uid\t到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n"); for(i=0;i printf("%d\t%d\t\t%f\t%d\t\t%f\t%f\n",p[i].id, p[i].reach,p[i].service,p[i].finish,p[i].turnover,p[i].cum_turnover ); } } void timeslice(){ int q; int i; int j; int front=-1; int rear=-1; int t=1; int v; printf("\n请输入时间片:\n"); scanf("%d",&q); for(i=0;i for(j=0;j if((i==p[sort[j]].reach-1)&&(front!=(rear+1)%20)){ rear=(rear+1)%20; wait[rear]=sort[j]; sort[j]=-1; } } if((front!=rear)||(front>-1)){ if(t==1){ front=(front+1)%20; v=wait[front]; } if(t<=q){ p[v].turnover--; if(p[v].turnover==0){ t=0; p[v].finish=i+2; p[v].turnover=p[v].finish-p[v].reach; p[v].cum_turnover=p[v].turnover/p[v].service; if(front==rear){ front=-1; rear=-1; } } if((t==q)&&(p[v].turnover!=0)){ rear=(rear+1)%20; wait[rear]=v; t=0; } t++; }