程序排程演算法
在早期作業系統的排程方式大多數是非剝奪的,這是由於早期的應用一般是科學計算或事務處理,不太把人機互動的響應時間指標放在首要位置。在這種情況下,正在執行的程序可一直占用cpu直到程序阻塞或終止。這種方式的排程演算法可以很簡單,且比較適用對於響應時間不關心或者關心甚少的批處理科學計算或事務處理應用。隨著計算機的應用領域進一步擴充套件,計算機更多地用在了多**等人機互動應用上,為此採用可搶占式的排程方式可在乙個程序終止或阻塞之前就剝奪其執行權,把cpu盡快分配給另外的「更重要」程序,使得就緒佇列中的程序有機會響應它們使用者的io事件。基於這兩種方式的排程演算法如下:
從mlfq排程演算法可以看出長程序無法長期占用處理機,且系統的響應時間會縮短,吞吐量也不錯(前提是沒有頻繁的短程序)。所以mlfq排程演算法是一種合適不同型別應用特徵的綜合程序排程演算法。
最高優先順序優先排程演算法:程序的優先順序用於表示程序的重要性及執行的優先性。乙個程序的優先順序可分為兩種:靜態優先順序和動態優先順序。靜態優先順序是在建立程序時確定的。一旦確定後,在整個程序執行期間不再改變。靜態優先順序一般由使用者依據包括程序的型別、程序所使用的資源、程序的估計執行時間等因素來設定。一般而言,若程序需要的資源越多、估計執行的時間越長,則程序的優先順序越低;反之,對於i/o bounded的程序可以把優先順序設定得高。動態優先順序是指在程序執行過程中,根據程序執**況的變化來調整優先順序。動態優先順序一般根據程序占有cpu時間的長短、程序等待cpu時間的長短等因素確定。占有處理機的時間越長,則優先順序越低,等待時間越長,優先順序越高。那麼程序排程器將根據靜態優先順序和動態優先順序的總和現在優先順序最高的就緒程序執行。
task_struct結構體
#define task_running 0
#define task_interruptible 1
#define task_uninterruptible 2
#define __task_stopped 4
#define __task_traced 8
/* in tsk->exit_state */
#define exit_zombie 16
#define exit_dead 32
/* in tsk->state again */
#define task_dead 64
#define task_wakekill 128
#define task_waking 256
系統中的每個程序都必然處於以上所列程序狀態中的一種。
對上述資訊進行簡要描述:
task_running表示程序要麼正在執行,要麼正要準備執行。
task_interruptible表示程序被阻塞(睡眠),直到某個條件變為真。條件一旦達成,程序的狀態就被設定為task_running。
task_uninterruptible的意義與task_interruptible類似,除了不能通過接受乙個訊號來喚醒以外。
__task_stopped表示程序被停止執行。
__task_traced表示程序被debugger等程序監視。
exit_zombie表示程序的執行被終止,但是其父程序還沒有使用wait()等系統呼叫來獲知它的終止資訊。
exit_dead表示程序的最終狀態。
exit_zombie和exit_dead也可以存放在exit_state成員中。
使用**模擬實現殭屍程序, 孤兒程序的場景.
建立乙個殭屍程序
#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"
int main()
if(pid == 0)
else if(pid > 0)
return 0;
}
建立乙個孤兒程序
#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"
int main()
if(pid == 0)
else if(pid > 0)
return 0;
}
Linux 程序概念
任何計算機系統都包含乙個基本的程式集合,成為作業系統 os 它包括 作業系統是管管理的軟體 使用者操作 使用者操作介面 shell,lib,指令等 作業系統 驅動程式 硬體 作業系統管理硬體 系統呼叫 在開發者角度,作業系統會對外表現為乙個整體,但是會暴露自己的一部分介面供上層開發者使用,這部分由作...
Linux 程序概念
調研程序的排程演算法.短程序優先演算法,對預計執行時間短的程序優先分派處理機。通常後來的短程序不搶先正在執行的程序。演算法優點 相比fcfs 演算法,該演算法可改善平均周轉時間和平均帶權周轉時間,縮短程序的等待時間,提高系統的吞吐量。演算法缺點 對長程序非常不利,可能長時間得不到執行,且未能依據程序...
Linux 程序概念
目錄 1.馮諾依曼體系結構 1.1 五大硬體單元 1.2 作業系統 2.程序概念 2.1 作業系統如何管理程序 2.2 作業系統如何描述程序 2.3 檢視程序 2.4 建立程序 建立pcb 2.5 程序狀態 2.6 程序優先順序 pri 3.環境變數 4.程式位址空間 5.程序排程 現代計算機的硬體...