1. 程式人生 > >多核CPU演算法

多核CPU演算法

多核CPU環境下的程序排程演算法有哪些,與單核CPU環境下的程序排程有何不同?

多核CPU排程演算法

  • 全域性佇列排程
    • 作業系統維護一個全域性的任務等待佇列。
    • 當系統中有一個CPU核心空閒時,作業系統就從全域性任務等待佇列中選取就緒任務開始在此核心上執行。
    • 這種方法的優點是CPU核心利用率較高。
  • 區域性佇列排程。
    • 作業系統為每個CPU核心維護一個區域性的任務等待佇列。
    • 當系統中有一個CPU核心空閒時,便從該核心的任務等待佇列中選取恰當的任務執行。
    • 這種方法的優點是任務基本上無需在多個CPU核心間切換,有利於提高CPU核心區域性Cache命中率。
    • 目前多數多核CPU作業系統採用的是基於全域性佇列的任務排程演算法。

單核CPU排程演算法

  • FCFS排程

    • 先來的任務先被執行
    • 容易造成convoy effect(護航效果)
    • 其餘程序在等待一個大程序釋放CPU,可能導致CPU和裝置的使用率變低
  • 優先順序排程

    • CPU排程程式根據任務的優先順序來選擇誰先被分配到資源
    • 可能造成inddefinite blocking/starvation(無限等待/飢餓)
    • 某個低優先順序程序會被 無窮等待
    • 解決方法
      • ”老化” 技術: 隨著程序等待時間的增加, 優先順序隨之增加
  • SJF排程(shortest-job-first,SJF)

    • 選取CPU區間最短的任務執行
    • SJF演算法常用於長期排程,控制多道程式設計的程度,平衡IO和CPU的組合程序
    • 不能在短期CPU排程上實現
    • 搶佔SJF(shortest-remaining-time-first scheduling)
    • 如果有新到的程序的CPU時間 比正在執行的程序的剩餘時間短,則發生搶佔
  • RR排程(輪轉法)

    • 專門為分時系統設計的

    • 時間片技術

    • 定義一個較小的時間單元

    • 為每個程序分配不超過一個時間片的CPU

      • 若程序在一個時間片裡結束,則釋放CPU
      • 若程序不能在一個時間片裡結束,還是要釋放CPU,並進行上下文切換,將程序加入到就緒佇列的尾部
    • 時間片的安排

    • 時間片長度和CPU利用率不是線性相關的

這裡寫圖片描述

  • 多級佇列排程

    • 將ready佇列分成多個獨立的佇列
    • 舉例(前後臺)

這裡寫圖片描述

  • 多級反饋佇列排程

    • 多級佇列排程演算法的各各獨立的佇列之間的程序是不能在佇列之間移動的
    • 反饋佇列排程可以移動

這裡寫圖片描述

多核CPU排程演算法與單核CPU排程演算法對比

  1. 多核CPU的排程演算法更為複雜

  2. 鎖競爭導致序列化

    • 有兩個執行緒A和B使用同一個lock,但執行在不同的CPU核上,如果A得到了鎖,則B就發生堵塞。B所在的CPU就浪費了一個CPU執行時間

    這裡寫圖片描述

  3. 負載均衡的區別

    在單核CPU中,並不需要考慮CPU間負載均衡的問題,因為無論執行緒如何切換,CPU始終處於工作狀態,它並不會影響程式執行的總時間。

    但對於多核CPU,則一定要考慮負載均衡的問題,避免出現負載小的CPU出現空閒等待的現象。

  4. 任務排程策略的區別

    單核CPU:保證優先順序高的執行緒可以搶佔CPU時間,先執行。在這種情況下程式設計師更多的是需要考慮任務的優先順序。

    多核CPU:不單是要考慮任務的優先順序,也要考慮各個任務的耗時,使負載均衡,提高加速比和CPU效率。

  5. CPUcache存取區別

    • 在單核系統中,同一時刻只有一個硬體執行緒在執行,因此單核CPU是不存在Cache儲存問題的。
    • 但在多核CPU中,情況則發生了變化。問題主要是因為CPU讀取Cache時是以行為單位。
      • 如果兩個硬體執行緒同時執行時,會造成兩個硬體執行緒寫同一Cache的問題,造成競爭降低效率

參考連結