(2021) 20 [虛擬化] 進程調度

(2021) 20 [虛擬化] 進程調度

南京大學操作系統課蔣炎巖老師網絡課程筆記。

視頻:https://www.bilibili.com/video/BV1HN41197Ko?p=20
講義:http://jyywiki.cn/OS/2021/slides/11.slides#/

背景 — 機制與策略分離

  • 機制:一個通用的、可定制的抽象
  • 策略:在機制上實現的具體
  • 例子:
    • 分頁和存儲保護(機制) VS. 進程實現(策略)
    • 操作系統API(機制)VS. 應用程序(策略)

中斷和虛擬存儲為我們提供了進程抽象(機制),操作系統的實現者在中斷時獲得了 ”選擇一個程序執行“ 的權利,但是到底應該選哪個呢?(策略)

本次課內容與目標

理解常見的處理器調度策略

  • 輪轉調度(round - robin)
  • 優先級 / 反饋調度
  • 公平調度

了解調度是操作系統領域重要的、未解決的問題。

虛假的(課本上的)處理器調度

一組基本的假設

我們接下來的討論,基于這樣一組基本的假設,這使得我們能夠更好地聚焦與調度問題。

  1. 系統中有一個處理器(1970s)
  2. 多個進程共享CPU
    • 包括系統調用(進程的一部分代碼在syscall中運行)
    • 偶爾會等待I/O返回,不適用CPU(通常時間較長)
  3. 處理器以固定的頻率被中斷
  4. 隨時有可能有新的進程被創建 / 舊的進程退出

中斷機制:在中斷 / 系統調用中可以切換到其他進程執行

策略:Round-Robin 輪轉

假設檔期 TiT_iTi? 運行,中斷之后會試圖切換到下一個線程 T(i+1)modnT_{(i+1)\ mod\ n}T(i+1)?mod?n? ,如果下一個線程正在等待 I / O返回,就繼續嘗試下一個,如果所有的線程都不需要 CPU,就調度idle進程執行。

中斷之間進程的執行稱為時間片 (time-slicing)

沒有優先級的處理。

策略:引入優先級

UNIX niceness

  • -20 … 19
    • 越 nice,越被不 nice 的人搶占
    • -20: 極壞; most favorable to the process
    • 19: 極好; least favorable to the process
  • 基于優先級的各種策略
    • 有壞人,永遠輪不到好人 (RTOS; 好人流下了悔恨的淚水),除非高優先級的進程在等待IO,否則永遠是高優先級先執行
    • nice 相差 10, CPU 獲得相差 10 倍 (Linux)(linux實測應為1:9)
  • 不妨試一試: nice/renice
    • taskset -c 0 nice -n 19 ./a.out &
    • taskset -c 0 nice -n 9 ./a.out &
  • top命令除了查看進程的CPU和內存的占用情況之外,也可以查看進程的NICE值,即NI

真實的處理器調度

策略:動態優先級,多級反饋隊列調度(MLFQ)

不會設置優先級?能不能讓系統自動設定?

  • 交互進程 (vi, vscode, …),大部分時候在等待外界輸入,這時這種進程會主動讓出CPU
    • 優先調度它們能提升用戶體驗,減少卡頓 (試想 Round-Robin)
  • 計算進程 (gcc, ld, …),拼命使用 CPU

調度策略

設置若干個 Round-Robin 隊列,每個隊列對應一個優先級。

如果將時間片用完了,則判定該進程執行大量運算,就下調其的優先級

  • 優先調度高優先級隊列
  • 用完時間片 → 壞人,請你變得更好
  • 讓出 CPU I/O → 好人,可以變得更壞

詳見教科書OSTEP

問題

這種方式在早年間可以很好地工作,但是在現代操作系統中,大量的進程之間會有通信和互動。這時,如果兩個進程之間彼此頻繁通信,我們的多級反饋調度也會把它們識別成互動進程,提高其優先級。

策略:Complete Fair Scheduling (CFS)

基本策略

隨著現代操作系統越來越復雜,操作系統的設計者已經放棄了設計一個完美的調度算法,而是轉而使用一種按執行時間完全公平的調度算法。注意其中還有NICE機制來調節優先級,但其他情況下完全公平。

所有復雜系統的調度都是拙劣的 Workaround

試圖去模擬一個 “ideal multi-task CPU”

“讓系統里的所用進程盡可能公平地分享處理器”。具體來說,它會為每個進程記錄精確的運行時間,中斷 / 異常發生之后,就切換到運行時間最少的進程來執行,而當下次中斷 / 異常之后,當前進程可能就不是運行時間最少的了,這時再選擇當前最少運行時間的進程來執行。

CFS實現優先級

讓好人的時間變得快一些,壞人的時間變得慢一些……

  • 不再是運行時間,而是 “vruntime” (virtual runtime)
  • vrt[i]/vrt[j]vrt[i]\ /\ vrt[j]vrt[i]?/?vrt[j] 的增加比例 =wt[j]/wt[i]= wt[j]\ /\ wt[i]=wt[j]?/?wt[i]
const int sched_prio_to_weight[40] = {/* -20 */ 88761, 71755, 56483, 46273, 36291,/* -15 */ 29154, 23254, 18705, 14949, 11916,/* -10 */  9548,  7620,  6100,  4904,  3906,/*  -5 */  3121,  2501,  1991,  1586,  1277,/*   0 */  1024,   820,   655,   526,   423,/*   5 */   335,   272,   215,   172,   137,/*  10 */   110,    87,    70,    56,    45,/*  15 */    36,    29,    23,    18,    15,
};

CFS 的復雜性

  1. 新進程 / 線程:子進程繼承符進程的vruntime

  2. I/O (例如 1 分鐘) 以后回來 vruntime 嚴重落后。為了趕上,CPU 會全部歸它所有。

    Linux 的實現:被喚醒的進程獲得 “最小” 的 vruntime (可以立即被執行)。

  3. vruntime 有優先級的 “倍數”,如果溢出了 64-bit 整數怎么辦?

    假設:系統中最近、最遠的時刻差不超過數軸的一半。我們可以比較它們的相對大小,a < b 不再代表 “小于” !

    bool less(u64 a, u64 b) {return (i64)(a - b) < 0;
    }
    

實現CFS的數據結構

用什么數據結構維護所有進程的 vruntime?考慮:我們需要什么操作?

為每個進程維護映射 t?vt(t)t?v_t(t)t?vt?(t)

  • 維護進程的 vruntimevt(t)←vt(t)+Δt/wvruntime v_t(t)←v_t(t)+Δt/wvruntimevt?(t)vt?(t)+Δt/w
  • 找到 ttt 滿足 vt(t)v_t(t)vt?(t) 最小
  • 進程創建/退出/睡眠/喚醒時插入/刪除 ttt

Linux內核中的實現:紅黑樹。

調度與互斥鎖

處理器調度:不僅是計算

線程不是 while (1) 的循環,還可能等待互斥鎖/信號量/設備 (比一個時間片短很多)。在此情形下,會發生什么?

  • round-robin?
    • 考慮三個進程/線程: producer, consumer, while (1)
    • 主要是因為沒有精確的時間統計
  • CFS?
    • (似乎沒問題?) 線程有精確的 accounting 信息

優先級反轉(priority inversion)

void bad_guy() { // 高優先級mutex_lock(&lk);...mutex_unlock(&lk);
}void nice_guy() { // 中優先級while (1) ;
}void very_nice_guy() { // 最低優先級mutex_lock(&lk);...mutex_unlock(&lk);
}

very nice guy 在持有鎖的時候讓出了處理器……

  • bad guy 順便也無法運行了 (nice guy 搶在了它前面 )

解決優先級反轉問題

Linux: CFS 湊合用吧;實時系統(RTOS):火星車在 CPU Reset 啊喂??

  • 優先級繼承 (Priority Inheritance)/優先級提升 (Priority Ceiling)
    • 持有 mutex 的線程/進程會繼承 block 在該 mutex 上的最高優先級
    • 不總是能 work (例如條件變量喚醒)
  • 在系統中動態維護資源依賴關系
    • 優先級繼承是它的特例
    • 似乎更困難了……
  • 避免高/低優先級的任務爭搶資源
    • 對潛在的優先級反轉進行預警 (lockdep)
    • TX-based: 沖突的 TX 發生時,總是低優先級的 abort

由于在現代操作系統中進程 / 線程之間的資源依賴(如互斥鎖等)過于復雜,Linux選擇躺平。

實際情況下的一些問題

多處理器調度:多用戶、多任務

還沒完:我們的 CPU 里有多個共享內存的處理器啊!

  • 不能簡單地每個處理器上執行 CFS
    • 出現 “一核出力,七核圍觀”
  • 也不能簡單地一個全局 CFS 維護隊列
    • 在處理器之間遷移會導致 L1 cache/TLB 全都白給
      • 遷移?可能過一會兒還得移回來
      • 不遷移?造成處理器的浪費

注意L1、L2緩存是每個CPU獨立的,L3緩存共享的。

實際情況(1)

  • A 要跑一個任務,因為要調用一個庫,只能單線程跑
  • B 跑并行的任務,創建 1000 個線程跑
    • CFS 會發生什么?
    • 提示: CFS 公平地在線程之間共享 CPU

更糟糕的是,優先級解決不了這個問題……

  • B 不能隨便提高自己進程的優先級
    • “An unprivileged user can only increase the nice value and such changes are irreversible…”

Linux Control Groups (cgroups)

可以去讀一下手冊,man 7 cgroups

順便提一下:cgroups也是docker實現所依賴的機制之一。

實際情況(2):Big.LITTLE/能耗

處理器的計算能力不同

  • 均分 workloads 會讓小核上的任務饑餓
  • Linux Kernel EAS (Energy Aware Scheduler)
  • 移動平臺的考慮 (能耗 vs. 速度 vs. 吞吐量)。頻率越低,IPC (Instruction per Cycle) 和能效都更好

如驍龍888中:Snapdragon 888

  • 1X Prime Cortex-X1 (2.84GHz)
  • 3X Performance Cortex-A78 (2.4GHz)
  • 4X Efficiency Cortex-A55 (1.8GHz)
    在這里插入圖片描述

實際情況(3):Non-Uniform Memory Access

線程看起來在 “共享內存”,但共享內存卻是 memory hierarchy 造就的假象,roducer/consumer 位于同一個/不同 module 性能差距可能很大。
在這里插入圖片描述

實際情況(4):CPU Hot-plug

指CPU的熱插拔的情況,就像彈出U盤一樣彈出CPU。

總結

本次課內容與目標

  • 理解常見的處理器的調度策略
  • 了解調度是操作系統領域重要的、未解決的問題

Takeaway messages

  • 機制和策略分離
  • “做系統” 的矛盾
    • 必須把問題簡單化,才能做 “第一個” 東西出來
    • 但隨著需求的增長,復雜系統會失控
  • 所有復雜系統的調度都是拙劣的 Workaround

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532748.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532748.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532748.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機組裝過程英文版,計算機組裝與維護試題及答案(國外英文資料).doc

計算機組裝與維護試題及答案(國外英文資料)計算機組裝與維護試題及答案(國外英文資料)(1) choiceIn the following equipment, the input device is (b)A. b. b. c. c. c. d. d.In Windows 98, the combination of CTRL Alt Del is (c)A. cold start b. heat start c. interr…

make命令及makefile

make命令及makefile 轉自&#xff1a;https://www.ruanyifeng.com/blog/2015/02/make.html Make 命令教程 作者&#xff1a; 阮一峰 日期&#xff1a; 2015年2月20日 代碼變成可執行文件&#xff0c;叫做編譯&#xff08;compile&#xff09;&#xff1b;先編譯這個&#…

局域網中計算機網絡密碼查看,Win10怎么查看電腦上已知的wifi網絡密碼

方法一&#xff1a;網絡和共享中心查詢1、在Windows 10桌面最左下角的【Windwos開始圖標上右鍵】&#xff0c;在彈出的菜單中點擊打開【網絡連接】&#xff0c;如下圖所示。2、在打開的網絡連接設置中&#xff0c;雙擊已經連接的【無線網絡名稱】&#xff0c;在彈出的【WLAN狀態…

(2021) 22 [持久化] 1-Bit的存儲

(2021) 22 [持久化] 1-Bit的存儲 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p22 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/12.slides#/ 背景 回顧 操作系統是什么&#xff1f;一組對象 一組API…

計算機一級試題論述,計算機一級考試理論題及答案要點

計算機一級考試IT1必做題[1]. 著名的計算機科學家尼.沃思提出了________。A&#xff0e;數據結構&#xff0b;算法程序B&#xff0e;存儲控制結構C&#xff0e;信息熵D&#xff0e;控制論[2]. 下面有關掃描儀的敘述中&#xff0c;錯誤的是________。A&#xff0e;分辨率是掃描儀…

(2021) 23 [持久化] I/O設備與驅動

(2021) 23 [持久化] I/O設備與驅動 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p23 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/13.slides#/ 背景 很多人 (你們的同學們、家長們) 都有一個認識&…

計算機考研計劃時間,2019計算機考研時間安排:復習時間規劃

隨著考研競爭越來越激烈&#xff0c;考研復習一定要做好規劃&#xff0c;每天的時間要做好管理&#xff0c;分清輕重緩急&#xff0c;這樣才能高效率復習。管理的5個原則&#xff0c;大家抓緊調整個人復習。小編還為大家精心準備了計算機考研復習資料還有計算機考研報考指導助力…

(2021) 24 [持久化] 文件系統API

(2021) 24 [持久化] 文件系統API 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p24 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/14.slides#/ 背景 回顧 硬件視角&#xff1a;持久化的“層層抽象” 物…

計算機輔助應用的縮寫有什么,計算機輔助設計的英文縮寫是什么

2008-10-09是什么的英文縮寫?BOBO......頭型里的.....其實"BOBO頭"準確的名稱應該是BOB頭。它是娃娃頭的一種。BOB頭有許多變種&#xff0c;標準的類似于櫻桃小丸子的發型&#xff0c;專業發型師把它稱為BOB。最初是由巴黎發型師Antoine 在1909年發明&#xff0c;但…

Linux中的硬鏈接和軟鏈接

Linux中的硬鏈接和軟鏈接 節選自南大蔣炎巖老師操作系統網絡課程筆記&#xff1a;(2021) 24 [持久化] 文件系統API 硬&#xff08;hard&#xff09;鏈接 UNIX文件指針 在UNIX中&#xff0c;文件和目錄完全不是同一個概念&#xff0c;雖然我們平時看著它們仿佛并列地躺在某個…

計算機win10開機音樂,大師傳授win10系統電腦開機總是自動播放音樂的方案

今天小編分享一下win10系統電腦開機總是自動播放音樂問題的處理方法&#xff0c;在操作win10電腦的過程中常常不知道怎么去解決win10系統電腦開機總是自動播放音樂的問題&#xff0c;有什么好的方法去處理win10系統電腦開機總是自動播放音樂呢&#xff1f;今天本站小編教您怎么…

Linux中的tty、pts、pty等概念辨析

Linux中的tty、pts、pty等概念辨析 基本概念 tty、pty、pts、ptmx tty&#xff08;終端設備的統稱&#xff09;&#xff1a;tty一詞源于Teletypes&#xff0c;或teletypewriters&#xff0c;原來指的是電傳打字機&#xff0c;是通過串行線用打印機鍵盤通過閱讀和發送信息的東…

(2021) 25 [持久化] 文件系統實現:FAT和UNIX文件系統

(2021) 25 [持久化] 文件系統實現&#xff1a;FAT和UNIX文件系統 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p25 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/15.slides#/ 背景 回顧 應用眼中的文件…

用計算機模擬地球誕生,計算機模擬顯示早期金星或像地球一樣宜居

雖然金星的綽號是“地球的邪惡孿生化身”&#xff0c;但它和地球上的一切都不同&#xff1a;灼熱、干燥并且被有毒煙云籠罩。不過&#xff0c;就在10億或20億年前&#xff0c;這兩個任性的“兄弟”可能更加相似。最新的計算機模擬顯示&#xff0c;早期的金星看上去和地球很像&a…

海南大學計算機原理,海南大學微機原理課件 第一章 計算機基礎知識

第一章計算機基礎知識數 制1.1一.計算機使用的數制及其相互轉換 十進制(D)、二進制(B)、八進制(O)和十六進制(H). 數制中用少量數碼按次序排列成數位&#xff0c;并按由低到高的進位方式進行計 數。(數碼的個數稱為基數) D---0,1,2,3,4,5,6,7,8,9------數碼十個(基為10)-------…

Linux中的二進制可執行文件和腳本可執行文件及Shebang

Linux中的二進制可執行文件和腳本可執行文件及Shebang 二進制可執行文件 我們知道&#xff0c;一個C程序經過預處理、編譯、匯編、鏈接就會得到一個二進制可執行文件&#xff0c;這種文件在Linux中叫做ELF文件。比如我們有一個C源代碼hello.c&#xff1a; #include <stdi…

pe能用的固態硬盤測試軟件,通用pe工具箱教你如何讓硬盤4K對齊

昨天小編教大家如何查看電腦硬盤是否4K對齊&#xff0c;馬上就有讀者告訴小編&#xff0c;查看電腦硬盤是否4K對齊的方法學到了&#xff0c;那么我使用的固態硬盤如何做到4K對齊呢&#xff1f;問的好啊&#xff01;現如今用戶對電腦硬件的要求是越來越高。很多用戶都不僅僅滿足…

[2020-ECCV]PIPAL-a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration論文簡析

[2020-ECCV] PIPAL: a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration 論文簡析 論文&#xff1a;https://arxiv.org/abs/2007.12142 代碼及數據集&#xff1a;https://github.com/HaomingCai/PIPAL-dataset 概述 本文認為隨著圖像重建&…

郫都區計算機老師周俊老師,教師節,帶你走進郫都教師背后的故事

點擊“郫都教育”關注我們&#xff1a;)有這樣一群人“師者&#xff0c;所以傳道&#xff0c;授業&#xff0c;解惑也”是他們奉獻一生的事業“隨風潛入夜&#xff0c;潤物細無聲”是他們培養英才的責任“春蠶到死絲方盡&#xff0c;蠟炬成灰淚始干”是他們追求終生的信仰值此第…

(2021) 18 [代碼講解] 可執行文件

(2021) 18 [代碼講解] 可執行文件 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p18 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/C8.slides#/ 背景 回顧 程序 狀態機 狀態機執行 狀態機上的路徑狀…