文档详情

实现作业调度算法先来先服务+最短作业+最短剩余时间[精品].doc

发布:2018-04-21约3.19千字共7页下载文档
文本预览下载声明
0956104 朱文君 操作系统 上机报告 一、实验目的: 1.学习处理器各种调度算法的基本思想; 2.通过上机实习,编写程序实现处理器的调度加深对各种算法的理解。 二、实验内容: 1.实验平台:Microsoft Visual C++ 6.0编程环境、Microsoft Office Word软件平台; 2.用C语言编程实现处理器的调度算法: ①先来先服务算法 ②最短作业优先算法 ③最短剩余时间优先算法; 三、实验步骤: (一)先来先服务算法 1.说明:先来先服务算法(First Come First Served,FCFS) 2.算法实现:#includestdio.h void main() { int i,a,T=0,N,add; float sum=0; printf(输入进程数:); scanf(%d,N); for(i=1;i=N;i++) { printf(\n第%d个进程所需的时间:,i); scanf(%d,a); T=T+a; sum+=T; printf(\n是否有新的进程进入,输入新的进程数:); scanf(%d,add); N=N+add; } printf(\n T=%f,sum/N); } 3.运行结果演示: (二)最短作业优先算法 1.说明:最短作业优先算法(Shortest Job First,SFJ) 2.算法实现: #includestdio.h int De_a(int x,int y,int a[]) { int i; if(x==y) a[x]=0; else { for(i=x;iy;i++) { a[i]=a[i+1]; } a[i]=0; } return 1; } void main() { int N,M,i,j,k,add,flag,a[1000]={0}; float T=0.000,W=0.000,sum=0; printf(输入进程数:); scanf(%d,N); for(i=1;i=N;i++) { printf(\n第%d个进程所需的时间:,i); scanf(%d,a[i]); } M=N; for(i=1;i=N;i++) { a[0]=a[1]; for(j=1;j=M;j++) { if(a[0]=a[j]) { a[0]=a[j]; flag=j; } } T=T+(float)a[flag]; sum+=T; W=W+(float)T/a[flag]; printf( %f ,W); De_a(flag,M,a); printf(\n是否有新的进程进入,输入新的进程数:); scanf(%d,add); for(k=1;k=add;k++) { printf(\n第%d个进程所需的时间:,i); scanf(%d,a[k+M-1]); } N=N+add; M=M+add-1; } printf(平均作业周转时间T=%f\n,sum/N); printf(平均带权作业周转时间W=%f\n,W/N); } 3.运行结果演示: (三)最短剩余时间优先算法 1.说明:最短剩余时间优先算法(Shortest Remaining Time First,SRTF)即当前某进程/线程正在运行,如果有新进程/线程移入就绪队列,若它所需要的CPU运行时间比当前运行进程/线程所需要的剩余CPU时间还短,抢占式最短作业优先算法强行剥夺当前执行者的控制权,调度新进程/线程执行。 2.算法实现: #includestdio.h #define N 100 void main() { int n,j,k,i,sum=0,flag=1,q,m,x;//sum时间总和 char p; struct { int arrivetime; int cputime; int resttime; }process[N]={{100,100,100},{100,100,100},{100,100,100},{100,100,100},{100,100,100},{100,100,100}}; printf(输入进程数:); scanf(%d,n); for(i=1;i=n;i++) { printf(\n第%d个进程到达时间:,i); scanf(%d,process[i].arrivetime); printf(\n第%d个所需CPU时间:,i);
显示全部
相似文档