[現代操作系統] 多處理機系統

1. 多處理機簡介

  • 共享存儲器多處理機
    每個 cpu 都可同樣訪問

  • 消息傳遞多計算機
    通過某種高速互聯網絡連接在一起, 每個存儲器局部對應一個 cpu, 且只能被該 cpu 訪問, 這些 cpu 通過互聯網絡發送多字消息通信
    易於構建, 編程難

  • 廣域分佈式系統
    通過廣域網連接, 如 Internet,

    多處理機是共享存儲器多處理機的簡稱, 多個 cpu 共享一個公用的 RAM.

2. 多處理機硬件

所以多處理機都具有每個 cpu 可訪問全部存儲器的性質, 而有些多處理機有一些特性,

2.1. UMA(Uniform Memory Access)

讀出每個存儲器字的速度一樣快

2.1.1. 基於總線的 UMA 多處理機體系結構

bus

2.1.2. 基於交叉開關的 UMA 多處理機

2.1.3. 基於多級交換的 UMA 多處理機

開關

原理
此開關檢查 module 域來決定連入哪個存儲器, 即連接 x 還是 y

例如 Omega網絡

n 個 cpu / 存儲器, 有 log2n 級, 每級只需 n/2 個開關,

比較:

網絡 開關數 是否阻塞
交叉開關 n2 不阻塞
Omega 網絡 n/2*log2n 阻塞

2.2. NUMA(nonuniform memory access)

特性:
* 具有對所有 cpu 都可見的單個地址空間
* 通過 LOAD 和 STORE 指令來訪問運程存儲器
* 訪問遠程存儲器慢於訪問本地存儲器

基於文件的多處理機
基本思想: 維護一個數據庫來記錄告訴緩存行的位置及其狀態. 當一個高速緩存行被引用時, 就查詢數據庫找出高速緩存行的位置以及它的 dirty 記錄,(是否被修改過),

2.3. 多核芯片

每個核就是一個完整的 CPU , 可以共享內存, 但是 cache 不一定共享. 時常被成爲 片級多處理機(Chip-level MultiProcessors, CMP).

與基於總線的多處理機和使用交換網絡的多處理機的差別不大:
* 基於總線的 每個 CPU 都有自己的 cache
* CMP 容錯性低: 連接緊密, 一個共享模塊的失效可能導致其他 CPU 出錯

片上系統 (system on a chip)
芯片包含多個核, 但是同時還包含若干個專業核, 比如視頻與音頻解碼器, 加密芯片, 網絡接口等

3. 多處理機操作系統類型

3.1. 每個 CPU 都有自己的操作系統

優點: 共享操作系統代碼

注意
* 在一個進程進行系統調用時, 是在本機的 CPU 上被捕獲並處理的, 並使用操作系統表中的數據結構
* 因爲每個操作系統都有自己的表, 那麼也有自己的進程集合, 通過自身調度這些進程, 而沒有進程共享. 如果一個用戶登陸到 CPU1 , 那麼他的進程全在 CPU1 上, 也就是可能導致其他 CPU 空載
* 沒有頁面共享: 可能出現 CPU2 不斷進行頁面替換而 CPU1 卻有多餘的頁面
* cache 不一致

3.2. 主從多處理機

主從多處理機

問題
如果有很多 CPU , 主 CPU 會成爲瓶頸, 速度慢

3.3. 對稱多處理機 (Symmetric MultiProcessor, SMP)

消除了主從處理機的不對稱性, 在存儲器中有操作系統的一個副本, 但任何 CPU 都可以運行它.

這個模型動態平衡進程和存儲器, 因爲它只有一套操作系統數據表.
它存在的問題: 當兩個或多個 CPU 同時運行操作系統代碼時, 如請求同一個空閒存儲器頁面, 這時應該使用互斥信號量 (鎖), 使整個系統成爲一大臨界區. 這樣在任一時刻只有一個 CPU 可運行操作系統

4. 多處理機調度

調度對象: 單進程還是多進程, 線程是內核進程還是用戶線程.
* 用戶線程: 對內核不可見, 那麼調度單個進程,.
* 內核線程: 調度單元是線程,

4.1. 分時

單一數據結構調度

先討論調度獨立線程的情況, 如果有 CPU 空閒則選擇優先級隊列中的最優先線程到此 CPU

缺點:
* 隨着 CPU 數量增加引起對調度數據結構的潛在競爭
* 當線程在 I/O 阻塞時引起上下文切換的開銷 (overhead)

親和調度: 基本思想, 儘量使一個線程在它前一次運行過的 CPU 上運行,

4.2. 空間共享

當線程之間以某種方式彼此相關時, 可以使用此方法. 假設一組相關的線程是一次性創建的, 創建時, 檢查是否有足夠的空閒 CPU, 有 則 各自獲得專用的 CPU, 否則等待,

優點: 消除了多道程序設計, 從而消除上下文切換開銷
缺點: 當 CPU 被阻塞或根本無事可做時時間被浪費了

4.3. 羣調度 (Gang Scheduling)

4.3.1. 基本思想

讓一個進程的所有線程一起運行, 這樣互相通信更方便, 在一個時間片內可以發送和接收大量的消息.

4.3.2. 調度方法

  • 把一組相關線程作爲一個單位, 即一個羣, 一起調度
  • 一個羣中的所有成員在不同的分時 CPU 上同時運行
  • 羣中的所有成員共同開始和結束其時間片

示例

5. 參考資料

  1. 現代操作系統
  2. Multi-Processor Systems | UCLA
發佈了78 篇原創文章 · 獲贊 16 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章