date
comments
categories
br#title
2020/2/26
true
作業系統
作業系統
排程
3.14
cpu排程策略
程序就是正在記憶體中執行的程式。程序在執行是時會改變狀態,程序狀態在某種程度上是由當前活動所定義的,程序可能處於的狀態有: 新的、執行、等待、就緒、終止。
程序通常還包括程序堆疊段(包括臨時資料,如函式引數,返回位址和區域性變數),和資料段(包括全域性變數),還有可能包括堆,是在程序執行期間動態分配的記憶體。
每個程序在作業系統內用程序控制塊(process control block,pcb來表示,也稱為任務控制塊)來表示。下圖給出乙個pcb的例子,它包含許多與乙個特定程序相關的資訊。
程序狀態:就是前面說的 新的、執行、等待、就緒、終止。
程式計數器:計數器表示程序要執行的下個指令的位址。
cpu暫存器:根據計算機體系的不同,暫存器的數量和型別也不同。他們包括累加器、索引暫存器、堆疊指標、通用暫存器和其他條件碼資訊暫存器。與程式計數器一起,這些狀態資訊在出現中斷時也需要儲存,以便程序以後能正確地繼續執行。
cpu排程資訊:這類資訊包括程序優先順序,排程佇列的指標和其他排程引數。 記憶體管理資訊
記憶體管理資訊:根據作業系統使用的記憶體系統,這類資訊包括段基址和接線暫存器,頁表或段表。
記賬資訊:這類資訊包括cpu時間,實際使用時間,時間界限,記賬資料,作業或程序數量等。
i/o狀態資訊:這類資訊包括分分配給程序的i/o裝置列表,開啟的檔案列表等。
簡而言之,pcb簡單地作為這些資訊的倉庫,這些資訊在程序和程序之間是不同的。
將cpu切換到另乙個程序需要儲存當前程序的狀態並恢復另乙個程序的狀態,這一任務稱為上下文切換。當發生上下文切換時,核心會將舊程序的狀態儲存在其pcb中。然後裝入經排程要執行的程序的上下文。切換上下文是系統額外的開銷。
linux中的程序表示如下:
struct task_struct
程序進入系統時候,會被加到作業佇列中,該佇列包括所有的程序。駐留在記憶體中就緒的等待執行的程序儲存在就緒佇列中。改佇列用通常是乙個鍊錶,其頭結點內有兩個指標,分別指向鍊錶的第一和最後乙個pcb塊的首位址。
排程程式會拍橫各種條件,折中的用盡量兼顧所有程序的方式進行排程。
CPU排程策略筆記
fifo 先入先處理,是公平 簡單 有效的方法。但如果乙個程序所需要的時間很少,在單純的先入先出場景下就需要等待很長的時間,如果這個程序是負責對使用者展示的,那麼使用者的使用體驗就會很差 面對程序 cpu排程的目標應該是,任務盡快結束 平均周轉時間 響應時間盡量短 系統開銷盡量小。這裡平均周轉時間是...
3 1 4排程演算法
按照作業 程序達到的先後順序進行服務 對長作業有利,對短作業不利,不會導致飢餓 短作業優先預設是非搶占式的,對短作業有利,對長作業不利 會導致飢餓 搶占式的版本是最短剩餘時間優先演算法 srtn 它具有最短的平均等待時間 既要考慮執行時間,又要考慮等待時間,綜合了前兩個方法的優點,不會導致飢餓 響應...
作業系統 CPU排程策略
見之前寫的 cpu管理的直觀想法和多程序影象 面對諸多的場景,如何設計排程演算法呢?首先,我們要明白我們的演算法應該讓什麼更好呢?面對客戶 銀行排程演算法的設計目標應該是使用者滿意 而面對程序 cpu排程的目標應該是程序滿意。那怎麼才能讓程序滿意呢?那就是時間了。程序希望盡早地結束任務,這就是周轉時...