资源简介
在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拍照上传
相关资源
- 升腾Win终端系统升级方法新版.doc
- Uninstall_Cortana_WINCLIENT.CN.rar
- STM32基于rt_thread操作系统的SDHC卡文件
- 操作系统 LRU算法 实验报告 及 程序代
- [免费]车载CE6.0操作系统
- 分页系统模拟实验 操作系统 课程设
- 模拟段页式虚拟存储管理中地址转换
- 操作系统实验——虚存管理实验
- 广工操作系统实验
- 广东工业大学操作系统实验四文件系
- Bochs入门教程[操作系统第一步]
- 操作系统课程设计完整版
- 磁盘调度算法的模拟实现及对比
- 模拟一个文件管理系统
- 二级文件系统(操作系统)
- uCOS编译环境建立 BC45 TASM
- Linux 操作系统实验(全)
- 操作系统实验综合设计【附代码】
- 操作系统共享内存实验
- 操作系统循环首次适应算法
- 操作系统课程设计实现可变分区存储
- 基于GTK的Linux环境下的简易任务管理器
- 操作系统课程设计 二级文件管理系统
- 加快Windows XP操作系统开机速度
- 操作系统教程课后答案华中科技大学
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 嵌入式实时操作系统ucos-II 第二版 源
- 计算机操作系统课后_汤小丹_第四版
- 计算机操作系统(第四版)汤小丹课
评论
共有 条评论