sjf排程演算法:
短作業(程序)優先排程演算法sj(p)f,是指對短作業或短程序優先排程的演算法。它們可以分別用於作業排程和程序排程。短作業優先(sjf)的排程演算法是從後備佇列中選擇乙個或若干個估計執行時間最短的作業,將它們調入記憶體執行。而短程序優先(spf)排程演算法則是從就緒佇列中選出乙個估計執行時間最短的程序,將處理機分配給它,使它立即執行並一直執行到完成,或發生某事件而被阻塞放棄處理機時再重新排程。
為了和fcfs排程演算法進行比較,我們仍利用fcfs演算法中所使用的例項,並改用sj(p)f演算法重新排程,再進行效能分析。由上圖中的(a)和(b)可以看出,採用sj(p)f演算法後,不論是平均周轉時間還是平均帶權周轉時間,都有較明顯的改善,尤其是對短作業d,其周轉時間由原來的(用fcfs演算法時)11降為3;而平均帶權周轉時間是從5.5降到1.5。這說明sjf排程演算法能有效地降低作業的平均等待時間,提高系統吞吐量。
sj(p)f排程演算法也存在不容忽視的缺點:
該演算法對長作業不利,如作業c的周轉時間由10增至16,其帶權周轉時間由2增至3.1。更嚴重的是,如果有一長作業(程序)進入系統的後備佇列(就緒佇列),由於排程程式總是優先排程那些(即使是後進來的)短作業(程序),將導致長作業(程序)長期不被排程。
該演算法完全未考慮作業的緊迫程度,因而不能保證緊迫性作業(程序)會被及時處理。
由於作業(程序)的長短只是根據使用者所提供的估計執行時間而定的,而使用者又可能會有意或無意地縮短其作業的估計執行時間,致使該演算法不一定能真正做到短作業優先排程。
#include#include#include#include#include#include#include#include#includeusing namespace std;
#define max_time 99999
int g_time = 0;
mutex g_mutex_time;
struct process_node
;listq_list;//程序佇列
void showlist()
cout << "\n";
}void main_doing(int args, char *ptr_argv)
void come_init_prcess(void(*main_doing)(int args, char *ptr_argv), int _function) //模擬程序到來並且初始化
void time_end_work(process_node & current_process)//時間片結束的前的工作
}void one_end_process(process_node & current_process)
current_process.function += g_time - current_point;
time_end_work(current_process);
}process_node& obtain_obtain()//獲取優先者
} cout << "優先的是程式" << p_temp->prcess_id << endl;
p_temp->begin = g_time;
return *p_temp;
}void run_begin()
}//時間例項到達
void pthread_model()
}come_init_prcess(main_doing, x_temp);
cout << "例項到達" << endl;
} sleep(1000);
g_time++; }}
int main()
SJF(短作業優先)演算法 C 實現
簡介後續補上。該演算法為非搶占式排程演算法,搶占式sjf演算法 後續補上.include include using namespace std 程序個數 const int n 5 程序結構體 struct process 列印所有程序資訊 void printprocess process a ...
最短作業優先(SJF)
最短作業優先 sjf 是一種排程任務請求的排程策略。每個任務請求包含有請求時間 即向系統提交的請求的時間 和持續時間 即完成任務所需時間 當前任務完成後,sjf策略會選擇最短持續時間執行任務,若最短持續時間相同,則選擇最早請求時間的任務。任務等待時間為請求時間和實際開始時間之差。假設系統一直執行任務...
短作業優先演算法c 實現
短作業優先 短作業優先 sjf,shortest job first 又稱為 短程序優先 spn shortest process next 這是對fcfs演算法的改進,其目標是減少平均周轉時間.定義對預計執行時間短的作業 程序 優先分派處理機.通常後來的短作業不搶先正在執行的作業.為 includ...