预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

0956104朱文君操作系统上机报告 一、实验目的: 1.学习处理器各种调度算法的基本思想; 2.通过上机实习,编写程序实现处理器的调度加深对各种算法的理解。 二、实验内容: 1.实验平台:MicrosoftVisualC++6.0编程环境、MicrosoftOfficeWord软件平台; 2.用C语言编程实现处理器的调度算法: ①先来先服务算法 ②最短作业优先算法 ③最短剩余时间优先算法; 三、实验步骤: (一)先来先服务算法 1.说明:先来先服务算法(FirstComeFirstServed,FCFS)按照作业进入系统后备作业队列的先后次序来挑选作业,先进入系统的作业将优先被挑选进入主存,创建用户进程,分配所需资源,然后,移入就绪队列。 2.算法实现:#include<stdio.h> voidmain() { inti,a,T=0,N,add; floatsum=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("\nT=%f",sum/N); } 3.运行结果演示: (二)最短作业优先算法 1.说明:最短作业优先算法(ShortestJobFirst,SFJ)以进入系统的作业所要求的CPU运行时间的长短为标准,总是选取预计计算时间最短的作业投入运行。 2.算法实现: #include<stdio.h> intDe_a(intx,inty,inta[]) { inti; if(x==y) a[x]=0; else { for(i=x;i<y;i++) { a[i]=a[i+1]; } a[i]=0; } return1; } voidmain() { intN,M,i,j,k,add,flag,a[1000]={0}; floatT=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.说明:最短剩余时间优先算法(ShortestRemainingTimeFirst,SRTF)即当前某进程/线程正在运行,如果有新进程/线程移入就绪队列,若它所需要的CPU运行时间比当前运行进程/线程所需要的剩余CPU时间还短,抢占式最短作业优先算法强行剥夺当前执行者的控制权,调度新进程/线程执行。 2.算法实现: #include<stdio.h> #defineN100 voidmain() { intn,j,k,i,sum=0,flag=1,q,m,x;//sum时间总和 charp; struct { intarrivetime; intcputime; intresttime; }process[N]={{100,100,100},{100,100,100},{100,100,100},{100,100,100},{100,100,100},{100,100,100}}; printf("输入进程数:"); scanf("%d",&n);