操作系统实验-先来先服务的调度算法和短作业优先.docx
文本预览下载声明
学号 专业 计算机科学与技术 姓名
实验日期 2017.10.27 教师签字 成绩
实验报告
【实验名称】 进程调度算法FCFS、FJF
【实验目的】
在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个。也就是说能运行的进程数远远大于处理机个数,为了使系统中的各进程能有条不紊的运行,必须选择某种调度策略,以选择一进程占用处理机,所以,要求使用某一种编程语言设计实现模拟单处理机调度的算法,以巩固和加深处理机调度的概念。
本实验要求采用先来先服务的调度算法和短作业优先的调度算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解进程调度、进程队列的概念。
【实验原理】
FCFS调度算法
先来先服务(FCFS)调度算法是一种最简单的调度算法。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
SJF调度算法
短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
【实验内容】
问题分析
输入:进程的名称、到达时间、服务时间
输出:进程的完成时间、周转时间、带权周转时间
其中对于任意进程有:
周转时间=完成时间-到达时间
带权周转时间=周转时间/服务时间
因此,两个算法的关键是求完成时间
数据结构及函数说明
使用的数据结构是数组,进程的名称、到达时间、服务时间、进程的完成时间、周转时间、带权周转时间分别对应于一个数组,这些数组长度相等.
struct fcfs
//定义进程的结构体
{
char name[10]; //进程名
float arrivetime; //到达时间
float servicetime; //服务时间
float starttime;//开始时间
float finishtime;//完成时间
float zztime;//周转时间
float dqzztime;//带权周转时间
};
fcfs a[100]; //结构体数组
函数说明
void Finput(fcfs *p,int N) ; //输入函数,初始化
void Fsort(fcfs *p,int N) ; //按到达时间排序,先到达排在前面
void Fsort2(fcfs *p,int N) ; //按进程大小排序,先到达排在前面
void F_method(fcfs *p, int N) //先来先服务算法
void F_method2(fcfs *p,int N) //短作业优先程序
void SJF(fcfs *p,int N); // 短作业优先
void FCFS(fcfs *p,int N); //先来先服务
void SJF(fcfs *p,int N) //短作业优先
void FPrint(fcfs *p,int N) //输出函数
求完成时间算法
FCFS算法流程图
SJF算法流程图
程序
#include stdio.h
struct fcfs
//定义进程的结构体
{
char name[10]; //进程名
float arrivetime; //到达时间
float servicetime; //服务时间
float starttime;//开始时间
float finishtime;//完成时间
float zztime;//周转时间
float dqzztime;//带权周转时间
};
float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;
fcfs a[100];
//定义先来先服务算法进程的最大数量
void Finput(fcfs *p,int N) //输入函数
{
int i;
printf(输入进程的名称、到达时间、服务时间:(例如: x 0 100)\n);
for(i=0; i=N-1; i++)
{
printf(输入第%d进程的名称、到达时间、服务时间:\n,i+1);
scanf(%s%f%f,p[i].
显示全部