操作系统 -- 处理器管理
文章目錄
- 進程的由來
- 進程的定義
- 注意
- 該如何去理解進程和進程實體
- PCB記錄的信息
- 處理器管理概述
- 處理器管理實例 -- Linux2.6內核上的實現
- Linux調度器的簡史
- Linux2.4調度器
- Linux的O(1)調度器
- Linux的cfs調度器
- 參考
??在前面 操作系統緒論中有介紹到操作系統的幾大部分:處理機管理 存儲管理 設備管理 文件管理 用戶接口。這篇文章主要是對處理器管理這一部分進行詳細說明。
進程的由來
??從聯機批處理 -> 脫機批處理 -> 多道批處理 -> 多道程序設計技術,很大的原因是cpu和其他硬件資源速度不匹配(cpu太快,其他硬件速度都跟不上),操作系統設計人員為了緩解cpu和硬盤等硬件速度上的差距、提高cpu的利用率而不斷改進操作系統的結果。充分體現了物盡其用這個原則。
??程序就是一個指令序列。在未出現多道程序設計之前,只支持單道程序,操作系統只是一個一個按順序執行程序,所以計算機中的所有資源都被當前運行的程序所享有,包括內存。當時內存僅僅被劃分為程序段和數據段,程序段用于存放程序代碼,數據段則用于存放程序的數據。因為只有一個程序,所以很容易就可以找到相應的程序段和數據段。
??多道程序設計技術的出現,支持同一時間內多個程序并發(當一道程序因I/O請求而暫停運行時,CPU便立即轉去運行另一道程序。)。這樣內存中就需要存放各個運行程序的相關信息。這樣就產生一個問題,操作系統如何才能找到個程序的存放位置?
??所以為了方便操作系統管理和完成多個程序并發執行,引入了進程和進程實體的概念。操作系統為每一個運行的程序配置了一個數據結構,進程控制塊(PCB)用來描述進程的各種信息,例如代碼的存放位置,數據存放位置等。并不是直接存放程序段和數據段的內容,程序段、數據段的內容存放在內存其他地方,但是由于PCB的存中,很容易獲取到這些信息。
??PCB、程序段、數據段三個部分構成了進程實體,也稱進程印象。一般情況下,我們把進程實體簡稱為進程,例如所謂的創建進程,實質上是創建進程實體的PCB;而撤銷進程,實質上是撤銷進程實體中的PCB。
進程的定義
??進程的定義并沒有一個統一的說法,自己比較認同的就是:
??進程是具有獨立功能的程序在一個數據集合上一次動態執行的過程。
注意
??嚴格來說,進程實體和進程并不一樣,進程實體是靜態的,進程則是動態的。Linux內核通常把進程也叫任務。
該如何去理解進程和進程實體
??PCB、程序段、數據段三個部分構成了進程實體。程序本身和進程實體只相差了一個PCB,二者均是靜態的,即是存儲起來的狀態,而進程所描述的,是進程實體運行的過程,或者說是程序運行的過程,即強調的是程序的運行,動態的過程。
PCB記錄的信息
??從上述可以知道,pcb是一個很重要的結構,里面一般存放什么信息呢?
- 進程描述信息
- 進程標識符PID:當進程被創建時,操作系統會為該進程分配一個唯一的、不重復的ID,用于區分不同的進程,就像是身份證號
- 用戶標識符UID
- 進程控制和管理信息
- 進程當前狀態
- 進程優先級
- 資源分配清單
- 處理機相關信息
處理器管理概述
??處理器管理是操作系統的重要組成部分,它負責管理,調度和分派計算機系統的重要資源————處理器,并控制程序的執行。
??操作系統的基本任務是對“進程”實施管理,操作系統必須有效有效控制進程的執行,給進程分配資源,準許進程之間交換信息,保護每個進程在運行期間免受其他進程干擾,控制進程的互斥、同步和通信。
??早期的計算機系統是基于單個處理器的順序處理機器。程序員編寫串行執行的代碼,讓其在處理器上串行執行,每一條指令的執行也是串行的(取指令,取操作數,執行操作,存出結果)。單核的處理器管理也很容易理解,cpu調度策略也很多(FCFS、優先級調度、SJF調度、RR調度、多級反饋調度)
??但是為了提高cpu硬件的性能,逐步發展出了流水線系統(解決了指令并行的問題)和多核CPU。由于多核處理器有多個核心,那么在多核處理器工作時就存在任務分配、調度、仲裁以及負載均衡等諸多問題。這時候的操作系統的處理器管理要是想利用上多核cpu的優勢,必須優化系統任務調度算法,一般多核上任務調度算法有全局隊列調度和局部隊列調度。前者是指操作系統維護一個全局的任務等待隊列,后者是指操作系統為每個CPU內核維護一個局部的任務等待隊列。
硬件知識:
按照計算機在一個執行階段能執行的指令或能處理的最大可能數可將計算機分為四類:
??1.單指令流單數據流(SISD);
??2.單指令流多數據流(SIMD);
??3.多指令流單數據流(MISD);
??4.多指令流多數據流(MIMD)。
??MIMD系統劃分為:共享內存的緊密耦合MIMD系統;內存分布的松散耦合MIMD系統。
??根據處理器分配策略,緊密耦合MIMD系統可以分為主從式系統MSP;對稱式系統SMP。
??操作系統對不同的計算機結構有不同的支持,我們接觸的個人計算機大多是SMP(最大的特點就是共享所有資源)。
處理器管理實例 – Linux2.6內核上的實現
??下面提到的Linux如果不是特別指明都是代指Linux2.6.32內核。
Linux調度器的簡史
從Linux2.4之前的內核調度器 -> Linux2.4調度器 -> Linux2.6的O(1)調度器 -> Linux新一代調度器CFS
Linux2.4調度器
過程:2.4的調度算法,將所有的就緒進程組織成一條可運行隊列,不管是單核環境還是smp環境,cpu都只從這條可運行隊列中循環遍歷直到挑選到下一個要運行的進程。如果所有的進程的時間片都用完,就重新計算所有進程的時間片。
2.4調度的不足:
1)一個明顯的缺點就是時間復雜度為O(n),每次都要遍歷隊列,效率低!。雖然說O(n)的復雜度看起來不是很糟糕,而且系統能容納進程數量也不一定會很大,但復雜度為O(n)還是很難忍受的。
2)由于在smp環境下多個cpu還是使用同一條運行隊列,所以進程在多個cpu間切換會使cpu的緩存效率降低,降低系統的性能。
3)多個cpu共享一條運行隊列,使得每個cpu在對隊列操作的時候需要對運行隊列進行加鎖,這時如果其他空閑cpu要訪問運行隊列,則只能等待了。由2、3兩點可以看出2.4的調度算法對smp環境的伸縮性不高!不能很好地支持smp環境。
4)不支持內核搶占,內核不能及時響應實時任務,無法滿足實時系統的要求(即使linux不是一個硬實時,但同樣無法滿足軟實時性的要求)。
5)進程的剩余時間是除了nice值外對動態優先級影響最大的因素,并且系統將休眠次數多的進程的剩余時間疊加起來,從而得出更大的動態優先級。這體現了 系統更傾向優先執行I/O型進程。內核就是通過這種方式來提高交互進程的優先級,使其優先執行。但休眠多的進程就代表是交互型的進程嗎?并不是的,這只能 說明它是I/O型進程。I/O型進程需要進行I/O交互,如讀寫磁盤時進程會經常處于休眠的狀態。如果把這種進程當成是交互進程,反而會影響其他真正的交 互進程。
6)簡單的負載平衡。那個cpu空閑就把就緒的進程調度到這個cpu上去執行。或者某個cpu的進程的優先級比某個進程低,就調度到那個cpu上去執行。這樣簡單的負載平衡缺點不言而喻。進程遷移比較頻繁,而且出現2、3的情況。這樣的負載平衡弊大于利!
Linux的O(1)調度器
過程:每個cpu維護一個自己的運行隊列,每個運行隊列有分別維護自己的active隊列與expried隊列。當進程的時間片用完后就會被放入expired 隊列中。當active隊列中所有進程的時間片都用完,進程執行完畢后,交換active隊列和expried。這樣expried隊列就成為了 active隊列。這樣做只需要指針的交換而已。當調度程序要找出下一個要運行的進程時,只需要根據上面提過的位圖宏來找出優先級最高的且有就緒進程的隊 列。這樣的數據組織下,2.6的調度程序的時間復雜度由原來2.4的O(n)提高到O(1)。而其對smp環境具有較好的伸縮性。
Linux的cfs調度器
過程:與之前的Linux調度器不同,CFS沒有將任務維護在鏈表式的運行隊列中,它拋棄了active/expire數組,而是對每個CPU維護一個以時間為順序的紅黑樹。
Linux的CFS調度器詳細。
??Linux進程調度一些設計思想:
??把進程抽象成進程描述符task_struct:包含進程所必需的數據,如狀態信息、調度信息、優先級信息、內存頁信息等。
??把需要調度的東西抽象成調度實體sched_entity:調度實體可以是進程、進程組、用戶等。這里包含負載權重值、對應紅黑樹結點、虛擬運行時vruntime等。
??把調度策略(算法)抽象成調度類sched_class:包含一組通用的調度操作接口,將接口和實現分離。你可以根據這組接口實現不同的調度算法,使得一個Linux調度程序可以有多個不同的調度策略。
??把調度的組織抽象成可運行隊列rq:包含自旋鎖、進程數量、用于公平調度的CFS信息結構、當前正在運行的進程描述符等。實際的進程隊列用紅黑樹來維護(通過CFS信息結構來訪問)。
??把CFS調度的運行隊列信息抽象成cfs_rq:包含紅黑樹的根結點、正在運行的進程指針、用于負載平衡的葉子隊列等。
??
??
??
??
??
??
??
參考
??https://www.cnblogs.com/814467783sweet/p/9634631.html
??https://www.cnblogs.com/zhoug2020/p/3967328.html
??https://blog.csdn.net/zhoudaxia/article/details/7375668
??https://www.docin.com/p-1396901563.html
??《Linux設計與實現》
總結
以上是生活随笔為你收集整理的操作系统 -- 处理器管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF DataGridTemplate
- 下一篇: 已知某分页系统,主存容量为64KB,页面