計算機組成原理之總線設計

文章來源 cxuan 的本身公衆號:計算機組成原理之總線設計程序員

公衆號不少硬核文章,跪求你們關注~~~ 編程

下面開始正題。安全

咱們知道,計算機是由五大部件組成的:運算器、存儲器、控制器、輸入設備和輸出設備,這個概念比較抽象,簡單一點來講就是 CPU 包含運算器和控制器,存儲器也就指的是內存,而輸入輸出設備分別指的是鍵盤和顯示器。計算機這幾個部件之間是須要共同協做完成信息處理的,那麼,這幾大部件之間如何進行通訊呢?靠的是系統總線,這也是咱們這篇文章討論的重點。微信

認識總線

總線是將兩個計算機或者多個功能單元鏈接在一塊兒並容許它們相互交換數據的一種通路。總線還能夠將計算機和外部設備鏈接在一塊兒。總線是計算機系統很是重要的組成部分。關於須要知道下面這幾個概念。編程語言

  • 總線寬度:通常用並行數據通路的數量來定義總線的寬度,通常總線的寬度有 8 位、16 位、32 位、64 位,咱們如今最經常使用的就是 64 位總線,一條 64 位寬的總線一次可以傳輸 64 位也就是 8 個字節信息。
  • 帶寬:帶寬是衡量數據在總線上傳輸速率的一項指標。在保持數據傳輸速率不變的狀況下提升並行通路的數量,能夠提升總線的帶寬。
  • 延遲:延遲是從發出數據傳輸請求到實際數據傳輸的時間間隔。

總線分類

下面咱們主要介紹兩種總線,一種是片內總線,一種是系統總線,片內總線通常指的是 CPU 芯片內部、寄存器和寄存器之間、寄存器和算術單元 ALU 之間的鏈接。spa

而系統總線主要是指 CPU 和內存、內存和 IO 設備、CPU 和 IO 設備等各大部件的信息傳輸介質。系統總線按照傳輸信息的不一樣主要分爲下面三類。線程

  • 地址線
  • 數據線
  • 控制線

下面咱們就來具體瞭解一下這三類總線設計

地址總線

地址總線主要用於傳輸源數據或者目的數據在主存單元中的地址。3d

CPU 經過地址總線來指定存儲單元的位置的,地址總線上能傳送多少信息,CPU 就能夠對多少個存儲單元進行尋址。code

上圖中 CPU 和內存中間信息交換經過了 10 條地址總線,每一條線可以傳遞的數據都是 0 或 1 ,因此上圖一次 CPU 和內存傳遞的數據是 2 的十次方。

因此,若是 CPU 有 N 條地址總線,那麼能夠說這個地址總線的寬度是 N 。這樣 CPU 能夠尋找 2 的 N 次方個內存單元。

數據總線

數據線顧名思義就是一次傳遞數據的位數,數據總線的位數就是數據總線寬度。

CPU 與內存或其餘部件之間的數據傳送是由數據總線來完成的。數據總線的寬度決定了 CPU 和外界的數據傳輸速度。8 根數據總線能夠一次傳送一個 8 位二進制數據(即一個字節)。16 根數據總線一次能夠傳輸兩個字節,32 根數據總線能夠一次傳輸四個字節。。。。。。

控制總線

控制總線是在總線上發出控制信號的傳輸線,常見的控制信號有:時鐘(同步操做)、復位(初始化操做)、中斷請求/響應、存儲器讀寫、IO讀寫等。

CPU 與其餘部件之間的控制是經過 控制總線 來完成的。有多少根控制總線,就意味着 CPU 提供了對外部器件的多少種控制。因此,控制總線的寬度決定了 CPU 對外部部件的控制能力。

以運算器爲主的鏈接方式

在互聯網的早期階段,大多數總線採用的是分散鏈接(還有一種是總線鏈接,後面說),這種鏈接方式以下圖所示

從圖上能夠看到,運算器是這種分散鏈接的核心部分,這種鏈接方式會出現問題,當你的 CPU 正在忙於計算時,發生了 IO 與存儲器的信息交換,此時你的運算器也就是 CPU 不得不停下來,這就致使了運算器運行的中斷,嚴重影響了 CPU 的工做效率。

你想,當你正在寫文章的時候,你對象問你:你今天怎麼不理我?因此你就得放下工做和她聊天;當你處理好她的情緒後繼續寫了 5 分鐘文章,這時你的讀者發表了長篇大論向你諮詢問題,這時候你總不能不回覆吧,因此你此時又要放下寫文章,繼而幫助他解決問題,因而可知,你寫文章的效率會高嗎?CPU 也是同樣的道理。

固然你也能夠選擇進入專一模式不回覆,這就要視事情的優先級而定了,CPU 也是同樣的。

總線設計

以存儲器爲主的鏈接方式

後來,爲了改善這種狀況,出現了以存儲器 爲中心的結構,這種結構以下所示

img

能夠看到,這種鏈接方式以存儲器爲核心,圖中主要涉及的部件功能以下

  • 輸入設備將經常使用的信息轉換爲機器可以識別的數據形式,常見的有鍵盤和鼠標等
  • 存儲器用於存放指令和數據
  • 運算器用來完成算數和邏輯運算,並將運算結果暫存在運算器內
  • 控制器用來完成指揮、控制程序和數據的輸入、運行和處理運算結果
  • 輸出設備的轉換過程就是輸入設備的逆過程,即將運算結果轉換爲人們能夠熟知的形式

因爲運算器和控制器在電路結構上的關係很是緊密,因此一般將運算器和控制器統稱爲 CPU,把輸入/輸出設備統稱爲 IO設備,存儲器就是內存

因此現代計算機的構成通常就是 CPU + 存儲器 + 輸入/輸出設備

使用這種鏈接方式後,使 IO 與主存之間的信息交換能夠不通過運算器,而且隨着中斷、DMA 技術的發展和成熟,使 CPU 效率獲得很大的提升。

可是使用這種方式,仍然不能解決 IO 設備和主機之間鏈接的靈活性,由於當咱們想增長一種 IO 設備時,這種鏈接方式卻沒法處理,由此出現了總線的鏈接方式。

以 CPU 爲主的雙總線鏈接方式

總線採用的是多種 IO 部件共享的鏈接方式,總線其實是由許多傳輸線組成,每條線可一位一位的傳輸二進制數據,好比 16 條傳輸線能夠同時傳輸 16 位二進制代碼。

下面是一種以 CPU 爲中心的雙總線結構

上圖的這種鏈接方式就是一種總線的鏈接方式,它將各部件鏈接到一組公共傳輸線上。從圖中能夠體會出雙總線的概念:其中一組總線鏈接 CPU 和內存,稱爲存儲總線;另外一組用來創建 CPU 和各 I/O 設備之間交換信息的通道,稱爲 IO 總線。

這種鏈接方式也會出現問題,當多個部件與總線相連時,若是兩個及以上的部件同時發送消息,那麼勢必會產生信號衝突,致使傳輸無效。因此,在同一時刻只容許有一個部件發送消息,可是能夠有多個部件接收消息。

單總線結構設計

若是將 CPU 、主存和 IO 設備經過 IO 接口都掛到一組總線上,就造成了單總線的鏈接方式。

這裏思考一個問題,你以爲單總線的鏈接方式和以 CPU 爲主的雙總線的鏈接方式相比,最大的區別在哪裏?

以 CPU 爲主的雙總線鏈接方式中,CPU 和 IO 總線的交互須要 CPU 參與,CPU 和內存的交互也須要 CPU 參與,因此 CPU 無時無刻都在作功,這也得虧是 CPU ,換個其餘人得累死。

單總線鏈接鏈接方式,由於 CPU 、內存和 IO 都掛在同一個總線上,因此內存和 IO 交互不須要 CPU 的參與,這就是最大的改變。這種鏈接方式一樣也會出現問題,由於只有一組總線,當各個部件都須要交換信息時,就會發生衝突,因此,在這種設計中,須要設定總線佔用優先級,讓各個組件按照優先級順序來依次佔用總線。這也是爲何編程語言中使用鎖做爲線程安全性的真正緣由。

還有一個問題是 CPU 沒有和內存直接交互,大大影響工做效率。

以存儲器爲中心的雙總線結構

還有一種鏈接方式是以存儲器爲中心的雙總線結構,它的設計以下

這種總線設計結構就很舒服了。它是在上面單總線結構的基礎上,在 CPU 和內存之間增長了一條存儲總線,在 IO 使用系統總線頻率比較高的時候,CPU 和內存能夠經過存儲總線交互,這樣既大大加快了系統工做效率,又下降了總線開銷。還保留了內存和 IO 交互時不須要通過 CPU 的特色。

我本身肝了六本 PDF,全網傳播超過10w+ ,微信搜索「程序員cxuan」關注公衆號後,在後臺回覆 cxuan ,領取所有 PDF,這些 PDF 以下

六本 PDF 連接

相關文章
相關標籤/搜索