程序和執行緒管理中的演算法
程序和執行緒在排程時候出現過很多演算法,這些演算法的設計背景是當乙個計算機是多道程式設計系統時,會頻繁的有很多程序或者執行緒來同時競爭 cpu 時間片。 那麼如何選擇合適的程序/執行緒執行是一項藝術。當兩個或兩個以上的程序/執行緒處於就緒狀態時,就會發生這種情況。如果只有乙個 cpu 可用,那麼必須選擇接下來哪個程序/執行緒可以執行。作業系統中有乙個叫做 排程程式(scheduler) 的角色存在,它就是做這件事兒的,排程程式使用的演算法叫做 排程演算法(scheduling algorithm) 。
排程演算法分類
針對不同的作業系統環境,也有不同的演算法分類,作業系統主要分為下面這幾種
下面我們分別來看一下這些作業系統中的演算法。
批處理作業系統中的演算法
設計目標
批處理系統廣泛應用於商業領域,比如用來處理工資單、存貨清單、賬目收入、賬目支出、利息計算、索賠處理和其他週期性作業。在批處理系統中,一般會選擇使用非搶占式演算法或者週期性比較長的搶占式演算法。這種方法可以減少執行緒切換因此能夠提公升效能。
在互動式使用者環境中,因為為了使用者體驗,所以會避免長時間占用程序,所以需要搶占式演算法。由於某個程序出現錯誤也有可能無限期的排斥其他所有程序。為了避免這種情況,搶占式也是必須的。
在實時系統中,搶占式不是必須的,因為程序知道自己可能執行不了很長時間,通常很快的做完自己的工作並掛起。
關鍵指標
通常有三個指標來衡量系統工作狀態:吞吐量、周轉時間和 cpu 利用率
吞吐量(throughout) 是系統每小時完成的作業數量。綜合考慮,每小時完成 50 個工作要比每小時完成 40 個工作好。
周轉時間(turnaround time) 是一種平均時間,它指的是從乙個批處理提交開始直到作業完成時刻為止的平均時間。該資料度量了使用者要得到輸出所需的平均等待時間。周轉時間越小越好。
cpu 利用率(cpu utilization) 通常作為批處理系統上的指標。即使如此,cpu 利用率也不是乙個好的度量指標,真正有價值的衡量指標是系統每小時可以完成多少作業(吞吐量),以及完成作業需要多長時間(周轉時間)。
下面我們就來認識一下批處理中的演算法。
先來先服務
很像是先到先得。。。它是一種非搶占式的演算法。此演算法將按照請求順序為程序分配 cpu。最基本的,會有乙個就緒程序的等待佇列。當第乙個任務從外部進入系統時,將會立即啟動並允許執行任意長的時間。它不會因為執行時間太長而中斷。當其他作業進入時,它們排到就緒佇列尾部。當正在執行的程序阻塞,處於等待佇列的第乙個程序就開始執行。當乙個阻塞的程序重新處於就緒態時,它會像乙個新到達的任務,會排在佇列的末尾,即排在所有程序最後。
這個演算法的強大之處在於易於理解和程式設計,在這個演算法中,乙個單鏈表記錄了所有就緒程序。要選取乙個程序執行,只要從該佇列的頭部移走乙個程序即可;要新增乙個新的作業或者阻塞乙個程序,只要把這個作業或程序附加在佇列的末尾即可。這是很簡單的一種實現。
不過,先來先服務也是有缺點的,那就是沒有優先順序的關係,試想一下,如果有 100 個 i/o 程序正在排隊,第 101 個是乙個 cpu 密集型程序,那豈不是需要等 100 個 i/o 程序執行完畢才會等到乙個 cpu 密集型程序執行,這在實際情況下根本不可能,所以需要優先順序或者搶占式程序的出現來優先選擇重要的程序執行。
最短作業優先
批處理中的第二種排程演算法是 最短作業優先(shortest job first),我們假設執行時間已知。例如,一家保險公司,因為每天要做類似的工作,所以人們可以相當精確地**處理 1000 個索賠的一批作業需要多長時間。當輸入佇列中有若干個同等重要的作業被啟動時,排程程式應使用最短優先作業演算法
未完待續...
作業系統相關整理
由於程式設計師無法詳細了解到硬體部分的每乙個細節,為提高開發效率,作業系統就解決了所有關於硬體控制部分的問題。二 作業系統的位置 作業系統位於計算機硬體與應用軟體之間,本質也是乙個軟體。三 作業系統的兩大作用 1.為應用程式提供如何使用硬體的抽象 2.為應用程式對cpu的競爭提供管理,使其有序化 四...
linux作業系統知識彙總
linux作業系統 檔案系統操作 在複製檔案的時候,cp r wenjian1 wenjian2 將檔案1複製到檔案2中,當檔案2起初不存在時,會把檔案1 中的內容複製到檔案2,並建立檔案2 當檔案2 起初就存在時,會將檔案1這整個資料夾複製到檔案2中!touch 檔案 建立乙個空檔案 cp和rm不...
作業系統框架整理(二)
下面這章是作業系統對儲存的管理,在儲存管理中重 難的內容已經用紅色標記,也就是說對主存的管理,作業系統總是依靠一張 表 來標記。這張表的原理應用在各種儲存方式中都有所體現,現在我們也就知道了作業系統拿什麼來了解記憶體的空間利用狀況。接下來是檔案管理,在作業系統中檔案管理是很重要的一部分,因為我們每天...