-
大小: 361KB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2021-06-01
- 語言: 其他
- 標(biāo)簽: 操作系統(tǒng)??
資源簡介
在OS中調(diào)度的實(shí)質(zhì)是一種資源分配,因而調(diào)度算法是指:根據(jù)系統(tǒng)的資源分配策略所規(guī)定的資源分配算法。對于不同的操作系統(tǒng)和系統(tǒng)目標(biāo),通常采用不同的調(diào)度算法,例如,在批處理系統(tǒng)中,為了照顧為數(shù)眾多的短作業(yè),應(yīng)采用短作業(yè)優(yōu)先的調(diào)度算法;又如在分時系統(tǒng)中,為了保證系統(tǒng)具有合理的響應(yīng)時間,應(yīng)采用輪轉(zhuǎn)法進(jìn)行調(diào)度。目前存在的多種調(diào)度算法中,有的算法適用于作業(yè)調(diào)度,有的算法適用于進(jìn)程調(diào)度;但也有些調(diào)度算法既可用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度[1] 。處理機(jī)調(diào)度常用的算法有:先來先服務(wù)算法,高響應(yīng)比優(yōu)先算法,時間片輪轉(zhuǎn)算法和短作業(yè)優(yōu)先調(diào)度算法。本次課程設(shè)計(jì)就將模擬先來先服務(wù),時間片輪轉(zhuǎn),短作業(yè)優(yōu)先,高響應(yīng)比優(yōu)先4種調(diào)度算法,并對他們的性能進(jìn)行比較。

代碼片段和文件信息
#include
#include
#include
#define?N?10
/********先來先服務(wù),短作業(yè)優(yōu)先,高響應(yīng)比算法進(jìn)程控制塊定義***********/
typedef?struct?Proc_identity
{
char?name; //進(jìn)程名
float?arrTime; //到達(dá)時間
float?finTime; //完成時間
float?serTime; //服務(wù)時間
float?waitTime;?//等待時間
float?prior; //優(yōu)先權(quán)
float?rTime; //周轉(zhuǎn)時間
float?drTime; //帶權(quán)周轉(zhuǎn)時間
}Proc_identity*proc;
/******************時間片輪轉(zhuǎn)算法進(jìn)程控制塊定義***********************/
typedef?struct?pcb
{
char?name[N];??????//進(jìn)程名
int arrTime;???????//到達(dá)時間
int?runTime;???????//運(yùn)行時間
char?state;????????//運(yùn)行后的狀態(tài)
struct?pcb?*next;??//指向下一個PCB
}PCB;
/*************按到達(dá)時間的先后順序?qū)M(jìn)程排序(冒泡法)******************/
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;
}
}
/****************************先來先服務(wù)算法*****************************/
void?FCFS(struct?Proc_identity?pro[]int?n)
{
int?i;
//初始化第一個到達(dá)的進(jìn)程
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;
//處理后續(xù)進(jìn)程
for(i?=?1;?i? {
if(pro[i].arrTime?<=?pro[i-1].finTime)?//判斷后一個進(jìn)程到達(dá)時間是否在第一個未完成之前
{
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;
}
}
}
/**********************短作業(yè)優(yōu)先算法**********************************/
void?SJF(struct?Proc_identity?pro[]int?n)?
{
int?ijk;
//初始化第一個到達(dá)的進(jìn)程時間
pro[0].finTime?=?pro[0].arrTime?+?pro[0].serTime;
//處理剩下的進(jìn)程的調(diào)度時間
for(i?=?1;?i? {
if(pro[i].arrTime?>?pro[i-1].finTime)//此時進(jìn)程到達(dá)的時間都大于第一個進(jìn)程的完成時間
{
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;//假設(shè)當(dāng)前進(jìn)程服務(wù)時間最短
int?x?=?i;//找出服務(wù)時間最短進(jìn)程的下標(biāo)
for(k?=?i+1;?k? {
if(MinJobProc.serTime?>?pro[k].serTime)
{
MinJobProc.serTime?=?pro[k].serTime;
x?=?k;
}
}
//將最短服務(wù)時間的進(jìn)程賦給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;
}
}
/*************************高響應(yīng)比算法******************************
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????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??新建文件夾\操作系統(tǒng)課程設(shè)計(jì).doc
- 上一篇:CUDA_BY_EXAMPLE自帶的幾個頭文件
- 下一篇:phonegap拍照上傳
評論
共有 條評論