資源簡介
在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? {
flag?=?0;
for(j?=?0;?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? {
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? {
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? {
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? {
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? {
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拍照上傳
評論
共有 條評論