资源简介
在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
- 上一篇:CUDA_BY_EXAMPLE自带的几个头文件
- 下一篇:phonegap拍照上传
相关资源
- 实验2 Linux内核编译及系统调用添加
- 页面置换算法,操作系统实验
- 操作系统英语论文
- 支持VMWare Esxi6.7虚拟机操作系统,VM
- 东北大学操作系统大作业实验报告
- 计算机操作系统(第三版)课后习题
- 多线程读者阅览室课程设计
- 操作系统期末考试试题含答案
- xv6操作系统整体报告
- 操作系统 内存管理课程设计报告
- 多级反馈队列进程调度Swing实现源代码
- 嵌入式系统外文翻译
- 操作系统课程设计生产者与消费者
- yap 一个基于s3c2440的操作系统
- 进程同步与互斥 生产者与消费者问题
- 操作系统+算法导论+计算机网络知识
- 操作系统实验报告实验一 WINDOWS进程初
- 华中科技大学操作系统实验报告
- 操作系统原理实验-虚拟存储器
- 线程和进/线程管道通信实验操作系统
- 山东大学 操作系统实验报告1-7
- 操作系统实验11
- 计算机操作系统第3版|微课版习题答案
- 东北大学软件学院BB平台操作系统截至
- 天津理工大学,操作系统实验报告*
- 收藏奉献_微机磁盘操作系统07号:P
- 操作系统复习题及答案
- 操作系统实验六 设备管理 实验报告
- 操作系统实验.rar
- 最新操作系统试题及答案
评论
共有 条评论