圖解電腦內部的高速公路 —— 匯流排系統

本文已收錄到  GitHub · AndroidFamily,有 Android 進階知識體系,歡迎 Star。技術和職場問題,請關注公眾號 [彭旭銳] 進 Android 面試交流群。

前言

大家好,我是小彭。

在之前的文章中,我們聊到了電腦的馮·諾依曼電腦架構,電腦由五大部件組成。那麼,電腦的五大部件是如何連接成一個整體的呢?這就需要依賴匯流排系統。


學習路線圖:


1. 認識電腦匯流排系統

1.1 什麼是匯流排?

在馮·諾依曼電腦架構中,電腦由控制器、運算器、存儲器、輸入設備和輸出設備五個部分組成,而這五個部分必須進行 「連接」 起來相互通訊才能形成一個完整的整體。 匯流排就是連接多個電腦部件的數據通訊規範。

PC 電腦主板

—— 圖片引用自 Wikipedia

1.2 為什麼要使用匯流排結構?

先解釋一下為什麼現代的電腦系統要採用匯流排結構:

  • 原因 1 – 降低複雜性: 這個設計思路跟軟體開發中的中介者模式是相同的。匯流排結構將 N-N 網型拓撲結構簡化為 N-1-N 匯流排型結構或星型+匯流排型拓撲結構,不僅整體的系統結構清晰許多,可以提高系統穩定性。而且需要使用的布線數目也減少了,製造成本也更低;
  • 原因 2 – 促進標準化: 匯流排結構提供了一個標準化的數據交換方式,各個硬體按照匯流排的標準實現介面,而無需考慮對方介面或匯流排的工作原理,有利於各個部件模組化設計。

網狀拓撲和匯流排拓撲對比


2. 匯流排的內部結構

匯流排本身的電路功能,又可以拆分成 3 部分:

  • 1、地址匯流排(Address Bus,AB): 地址匯流排傳輸的是地址訊號。地址匯流排是單向的,地址資訊只能從主設備發往從設備。地址匯流排寬度也決定了一個 CPU 的定址能力,即多大可以訪問多少數據空間。舉個例子,32 位地址匯流排可以定址 4GB 的數據空間;
  • 2、控制匯流排(Control Bus,CB): 控制匯流排傳輸控制或狀態訊號。控制匯流排是雙向的,訊號可以從主模組發往從模組,也可以從從模組發往主模組(例如 CPU 對存儲器的讀寫控制訊號,例如 I/O 設備對 CPU 中斷請求訊號);
  • 3、數據匯流排(Data Bus,DB): 數據匯流排傳輸的是實際的數據資訊。數據匯流排是雙向的,數據可以從主模組發往從模組(例如 CPU 向記憶體的寫入操作),也可以從從模組發往主模組(例如 CPU 向記憶體的讀取操作)。

舉個例子,當 CPU 要從存儲器讀取數據時,三類匯流排的工作過程概要如下:

  • 1、CPU 通過地址匯流排發送要訪問的存儲單元的地址資訊;
  • 2、CPU 通過控制匯流排發送讀控制訊號;
  • 3、存儲器通過數據匯流排發送指定存儲單元上的數據,從 CPU 的視角就是讀取。

匯流排內部結構


3. 匯流排系統的架構

理解了匯流排的概念後,我們先來看匯流排系統的整體架構,現代電腦中的匯流排大多採用分層次多匯流排架構。

3.1 單匯流排架構和多匯流排架構

在早期電腦中,會使用單一匯流排來連接電腦的各個部件,這種結構叫單匯流排架構。這種結構實現簡單,但缺點有 2 個:

  • 缺點 1: 電腦不同組件之間的速度差較大,例如 CPU 與記憶體或 I/O 設備的速度差非常大,當傳輸數據量很大時,CPU 經常需要等待;
  • 缺點 2: 所有的訊號都要經過同一個共享的匯流排,不允許兩個以上的部件同時傳輸訊號。

單匯流排架構

因此,單匯流排系統很容易形成系統的性能瓶頸,就算是增大匯流排的頻寬也無法從根本上解決系統性缺陷。目前,單匯流排結構只出現在微型電腦中。大多數現代電腦都採用了分層次多匯流排結構,所有的設計思路都是圍繞單匯流排架構存在的 2 個缺點展開的:

  • 應對缺點 1: 將高速部件和低速部件分為不同層級,不同層級之間使用獨立的匯流排,減少高速部件對低速部件的等待;
  • 應對缺點 2: 增加多條匯流排,使得數據可以同時在多個部件之間傳輸。

3.2 雙獨立匯流排:片內 & 片外

現代 CPU 中通常會使用高速快取,由於 「CPU-高速快取」 和 「CPU – 記憶體」 的速度差非常大,電腦系統選擇在 CPU 晶片內和 CPU 晶片外使用 雙獨立匯流排(Dual Independent Bus,DIB):

  • 前端匯流排(Front Side Bus,FSB): CPU 與外部連接的匯流排(即 CPU 連接北橋晶片的匯流排);
  • 後端匯流排(Back Side Bus,BSB): 也叫本地匯流排(Local Bus)或片內匯流排(On-chip Bus),是 CPU 晶片內部獨立使用的匯流排。CPU 晶片內部一個或多個核心、Cache 之間的通訊將不需要佔用晶片外的系統匯流排。

提示: 前端匯流排和系統匯流排的概念容易混淆,不同資料的說法不一。我的理解是:前端匯流排是 「特指」 某些 Intel CPU 架構中,CPU 晶片與外部連接的這條匯流排,而系統匯流排 「泛指」 連接電腦各個部件的所有匯流排。小彭在後續專欄內容都會按照此理解討論。

前端匯流排和後端匯流排

3.3 南北橋架構

南北橋架構是 Intel 提出的匯流排架構,也叫 Hub 架構 。它將電腦部件分為高速部件和低速部件兩類,分為北橋晶片組合和南橋晶片組,中間用兩顆橋晶片連接。使用南北橋設計有 2 個優點:

  • 1、緩衝功能: 南北橋晶片實現了兩類匯流排訊號速度緩衝;
  • 2、橋接功能: 南北橋晶片實現了兩類匯流排訊號的轉換,有利於系統升級換代。例如在升級 CPU 時,只需要改動 CPU 和北橋晶片,其它南橋部分不需要改動。

南北橋架構

  • 北橋晶片(Northbridge): 北橋處理高速訊號。北橋晶片連接的設備都是高速傳輸設備,包含 CPU、GPU、存儲器與南橋的通訊。北橋晶片也是 CPU 與外部連接的紐帶;
  • 南橋晶片(Southbridge): 南橋處理低速訊號。南橋晶片連接的大多是 I/O 設備,例如 PCI 匯流排、USB 適配器、顯示卡適配器、硬碟控制器;
  • 記憶體控制器(Memory Controller): 管理 CPU 和記憶體之間的匯流排數據傳輸,控制著存儲器的讀取和寫入訊號,並且定時刷新 DRAM 內的數據(DRAM 的存儲單元包含電容,會自動漏電);
  • 記憶體匯流排(Memory Bus): 連接北橋晶片與存儲器的匯流排;
  • DMI 匯流排(Direct Media Interface): 連接北橋晶片和南橋晶片的專用匯流排;
  • I/O 匯流排: 連接南橋晶片與 I/O 設備的匯流排;
    • PCI 局部匯流排: 連接高速 I/O 設備的標準;
    • ISA 局部匯流排: 連接低速 I/O 設備的標準。

3.4 前端匯流排瓶頸

前端匯流排是 CPU 連接外界的唯一通道,因此前端匯流排的數據傳輸能力對於電腦系統的整體性能影響非常大。 近年來隨著 CPU 主頻不斷提升,前端匯流排頻率卻一直跟不上後端匯流排頻率,從而出現性能瓶頸。

為了解決這個問題,傳統的南北橋架構被重新設計,北橋晶片的功能幾乎都移動到 CPU 內部變成 「片上北橋」。前端匯流排被淘汰,CPU / 片上北橋繼續使用 DMI 連接南橋或 PCH 等外部設備。


4. 匯流排仲裁

匯流排既有共享性又有獨佔性,聽起來有點矛盾,其實是表現的時機不一樣:

  • 共享性: 匯流排的共享性是指匯流排對所有連接的設備共享,主從模組能通過匯流排傳輸數據。
  • 獨佔性: 匯流排的獨佔性是指同一時刻,只允許一個部件佔有匯流排的控制權,這個部件就是主模組,主模組可以與一個或多個從模組通訊,但同一時刻只有一個主模組。

匯流排的獨佔性天然地將事務串列化: 如果多個部件同時向匯流排發出匯流排事務,匯流排仲裁(Bus Arbitration)單元會對競爭做出總裁,未獲勝的事務只能等待獲勝的事務處理完成後才能執行。當其中一個匯流排事務在執行時,其他匯流排事務都會被禁止。


5. 總結

  • 1、匯流排就是連接多個電腦部件的數據通訊規範;

  • 2、匯流排的電路結構由地址匯流排、控制匯流排和數據匯流排組成。舉個例子,當 CPU 要從存儲器讀取數據時,三類匯流排的工作過程概要如下:

    • CPU 通過地址匯流排發送要訪問的存儲單元的地址資訊;
    • CPU 通過控制匯流排發送讀控制訊號;
    • 存儲器通過數據匯流排發送指定存儲單元上的數據,從 CPU 的視角就是讀取。
  • 3、現代電腦中的匯流排大多採用分層次多匯流排架構,由片內+片外雙獨立匯流排平衡高速快取和記憶體的速度差,由南北橋架構平衡高速部件和低速部件的速度差;

  • 4、由於前端匯流排瓶頸和晶片集成度提高,南北橋架構逐漸被片上系統替代;

  • 5、匯流排具有共享性和獨佔性,當多個部件同時向匯流排發出匯流排事務,匯流排天然地將事務串列化;


參考資料

Tags: