计算机操作系统课程设计源代码《处理机调度算法的实现源代码》

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++;

}

相关文档
最新文档