Bo2SS

Bo2SS

4. 高級進程管理

課程內容#

進程調度#

  • 進程調度是一個內核子系統,用戶管不了
  • 進程調度的主要任務是決定哪一個就緒狀態的進程先運行
  • 就緒進程是非阻塞進程,已具備運行條件,不需要阻塞等待了
  • 阻塞進程就是正在睡眠 [不佔用 CPU] 的進程,需要內核喚醒的進程

三態模型#

  • 阻塞、就緒、運行
  • 圖片
  • 阻塞,不佔用系統資源;就緒,需要等內核調度;運行,在 IO 請求或等待某事件時阻塞

👉 五態模型

  • 圖片
  • 加入新建態、終止態

從單任務到多任務#

  • DOS 是單任務操作系統,每次只運行一個進程
    • 進程交錯運行,如同多任務運行
  • 多處理器可以做到真正的並行
    • 並發 VS 並行
    • 並發:一個時間段內有很多任務進行
    • 並行:有多少個 CPU,就可以有多少個任務同時運行
  • 調度的核心:運行哪個進程,運行多久

時間片#

強影響著系統的全局行為和性能

  • 過長
    • 👍:提升系統吞吐率和全局性能
    • × :降低了並發運行;用戶感到明顯的延遲[響應能力下降,應用過多也會導致調度間隔長]
  • 過短
    • 👍:提升互動性能
    • × :大量時間花在調度大;時間局部性帶來的性能提升大打折扣
      • 時間局部性:緩存,記憶 [高速緩存是隨著時間慢慢建立起來的]
      • 空間局部性:預先多準備部分臨近空間的數據
      • 有學習、預測的意味
  • 所以,時間片長短難以確定,解決方案是幹脆不用時間片,取而代之的是完全公平調度算法
    • 系統根據就緒隊列和優先級調整策略
    • 調度時間和優先級的分配,本質上是為了更好地服務於用戶,並沒有不公平
    • 詳見下文 —— 完全公平調度器

處理器約束型和 IO 約束型進程#

根據進程使用 CPU 的特點劃分,取決於處理器還是 IO 用得多

  • 處理器約束型
    • 【一直消耗完可用時間片的進程】
    • 需要獲取大量的 CPU 資源,會消耗調度器分配的全部 CPU
    • 如:while (1);,很容易將 CPU 使用率達到 100%
    • 時間片的要求
      • 期待更長的時間片,從而最大化緩存命中,儘快完成任務 [不會浪費資源]
  • IO 約束型
    • 【多數時間處於阻塞狀態或者等待資源的進程】
    • 經常阻塞在文件 IO 操作上:文件,網絡,鍵盤,鼠標 [如聽音樂、打字];或者除了請求內核執行 I/O 操作之外什麼也不做 [如 cp]
    • 時間片的要求
      • 需要更短的時間片,被調度的越快,越有無縫銜接的感覺
      • 進程只會運行極短的時間,然後阻塞在內核資源;會用到中斷

調度器分類#

協同式調度器#

[不干預型,實用性不高]

  • 進程會一直運行直到它自己結束
  • 操作系統不做任何干預

搶佔式調度器#

[時間片型]

  • 內核給進程分配時間片,時間片用完,掛起該進程 [不佔用任何資源],執行其他進程
    • 沒有其他就緒的進程時,內核給已經執行過的進程重新劃分時間片
  • 調度器安排進程的運行順序、時長
  • [PS]
    • 新建態進入就緒隊列,終止態退出就緒隊列 [五態模型]
    • 考慮優先級,所有進程都有機會被運行

完全公平調度器#

[非時間片型]

CFS:Completely Fair Scheduler

  • 給 N 個進程,每個進程分別分配 1 / N 的處理器時間
  • 優先級和權值
    • 優先級越高,值越小,權值越大
    • 默認優先級為 0,權值為 1
  • 目標延遲:調度的固定周期
  • 最小粒度:避免目標延遲過小導致每個進程運行的時間過短

👉公平配額

提示#


載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。