• 大小: 361KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: 其他
  • 标签: 操作系统  

资源简介

在OS中调度的实质是一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法。对于不同的操作系统和系统目标,通常采用不同的调度算法,例如,在批处理系统中,为了照顾为数众多的短作业,应采用短作业优先的调度算法;又如在分时系统中,为了保证系统具有合理的响应时间,应采用轮转法进行调度。目前存在的多种调度算法中,有的算法适用于作业调度,有的算法适用于进程调度;但也有些调度算法既可用于作业调度,也可用于进程调度[1] 。处理机调度常用的算法有:先来先服务算法,高响应比优先算法,时间片轮转算法和短作业优先调度算法。本次课程设计就将模拟先来先服务,时间片轮转,短作业优先,高响应比优先4种调度算法,并对他们的性能进行比较。

资源截图

代码片段和文件信息

#include
#include
#include
#define N 10

/********先来先服务,短作业优先,高响应比算法进程控制块定义***********/

typedef struct Proc_identity
{
char name; //进程名
float arrTime; //到达时间
float finTime; //完成时间
float serTime; //服务时间
float waitTime; //等待时间
float prior; //优先权
float rTime; //周转时间
float drTime; //带权周转时间
}Proc_identity*proc;


/******************时间片轮转算法进程控制块定义***********************/

typedef struct pcb
{
char name[N];      //进程名
int arrTime;       //到达时间
int runTime;       //运行时间
char state;        //运行后的状态
struct pcb *next;  //指向下一个PCB
}PCB;



/*************按到达时间的先后顺序对进程排序(冒泡法)******************/


void SortArrTime(struct Proc_identity pro[]int n)
{
int ij;
struct Proc_identity ptemp;
int flag;
for(i = 1; i < n; i++)
{
flag = 0;
for(j = 0; j < n-i; j++)
{
if(pro[j].arrTime > pro[j+1].arrTime)
{
ptemp = pro[j];
pro[j] = pro[j+1];
pro[j+1] = ptemp;
flag = 1;
}
}
if(flag == 0)
break;
}
}


/****************************先来先服务算法*****************************/



void FCFS(struct Proc_identity pro[]int n)
{
int i;

//初始化第一个到达的进程

pro[0].finTime = pro[0].arrTime + pro[0].serTime;
pro[0].rTime = pro[0].finTime - pro[0].arrTime;
pro[0].drTime = pro[0].rTime / pro[0].serTime;

//处理后续进程

for(i = 1; i < n; i++)
{
if(pro[i].arrTime <= pro[i-1].finTime) //判断后一个进程到达时间是否在第一个未完成之前
{
pro[i].finTime = pro[i-1].finTime + pro[i].serTime;
pro[i].rTime = pro[i].finTime - pro[i].arrTime;
pro[i].drTime = pro[i].rTime / pro[i].serTime;
}
else
{
pro[i].finTime = pro[i].arrTime + pro[i].serTime;
pro[i].rTime = pro[i].finTime - pro[i].arrTime;
pro[i].drTime = pro[i].rTime / pro[i].serTime;
}
}
}


/**********************短作业优先算法**********************************/

void SJF(struct Proc_identity pro[]int n) 
{
int ijk;

//初始化第一个到达的进程时间
pro[0].finTime = pro[0].arrTime + pro[0].serTime;

//处理剩下的进程的调度时间
for(i = 1; i < n; i++)
{
if(pro[i].arrTime > pro[i-1].finTime)//此时进程到达的时间都大于第一个进程的完成时间
{
pro[i].finTime = pro[i].arrTime + pro[i].serTime;
}
else
{
int count = 0;
for(j = i; j < n; j++) //当第i-1个进程完成时找出现在到达的第j个进程
{
if(pro[j].arrTime <= pro[i-1].finTime)
count++;
}

struct Proc_identity MinJobProctemp;
MinJobProc.serTime = pro[i].serTime;//假设当前进程服务时间最短
int x = i;//找出服务时间最短进程的下标

for(k = i+1; k < count+i; k++)//找出服务时间最短的进程
{
if(MinJobProc.serTime > pro[k].serTime)
{
MinJobProc.serTime = pro[k].serTime;
x = k;
}
}
//将最短服务时间的进程赋给i
temp = pro[i];
pro[i] = pro[x];
pro[x] = temp;

pro[i].finTime = pro[i-1].finTime + pro[i].serTime;
}
}

for(i = 0; i < n; i++)
{
pro[i].rTime = pro[i].finTime - pro[i].arrTime;
pro[i].drTime = pro[i].rTime / pro[i].serTime;
}
}


/*************************高响应比算法******************************

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-06-29 10:41  新建文件夹\
     目录           0  2012-06-29 10:41  新建文件夹\CPU_Dispatcher\
     文件        4376  2012-06-15 17:36  新建文件夹\CPU_Dispatcher\CPU_Dispatcher.dsp
     文件         553  2012-06-15 17:36  新建文件夹\CPU_Dispatcher\CPU_Dispatcher.dsw
     文件       50176  2012-06-20 13:11  新建文件夹\CPU_Dispatcher\CPU_Dispatcher.ncb
     文件       53760  2012-06-20 13:11  新建文件夹\CPU_Dispatcher\CPU_Dispatcher.opt
     文件        1354  2012-06-19 23:19  新建文件夹\CPU_Dispatcher\CPU_Dispatcher.plg
     目录           0  2012-06-29 10:41  新建文件夹\CPU_Dispatcher\Debug\
     文件      208997  2012-06-19 23:19  新建文件夹\CPU_Dispatcher\Debug\CPU_Dispatcher.exe
     文件      224420  2012-06-19 23:19  新建文件夹\CPU_Dispatcher\Debug\CPU_Dispatcher.ilk
     文件      226476  2012-06-17 17:26  新建文件夹\CPU_Dispatcher\Debug\CPU_Dispatcher.pch
     文件      484352  2012-06-19 23:19  新建文件夹\CPU_Dispatcher\Debug\CPU_Dispatcher.pdb
     文件       25883  2012-06-19 23:19  新建文件夹\CPU_Dispatcher\Debug\dispatcher.obj
     文件       41984  2012-06-20 12:51  新建文件夹\CPU_Dispatcher\Debug\vc60.idb
     文件       53248  2012-06-19 23:19  新建文件夹\CPU_Dispatcher\Debug\vc60.pdb
     文件       12419  2012-06-19 21:38  新建文件夹\CPU_Dispatcher\dispatcher.cpp
     文件      283648  2012-06-29 10:39  新建文件夹\操作系统课程设计.doc

评论

共有 条评论