計算機組成原理之匯流排設計

程式設計師cxuan發表於2021-05-26

文章來源 cxuan 的自己公眾號:計算機組成原理之匯流排設計

公眾號很多硬核文章,跪求大家關注~~~

下面開始正題。

我們知道,計算機是由五大部件組成的:運算器、儲存器、控制器、輸入裝置和輸出裝置,這個概念比較抽象,簡單一點來說就是 CPU 包含運算器和控制器,儲存器也就指的是記憶體,而輸入輸出裝置分別指的是鍵盤和顯示器。計算機這幾個部件之間是需要共同協作完成資訊處理的,那麼,這幾大部件之間如何進行通訊呢?靠的是系統匯流排,這也是我們這篇文章討論的重點。

認識匯流排

匯流排是將兩個計算機或者多個功能單元連線在一起並允許它們相互交換資料的一種通路。匯流排還可以將計算機和外部裝置連線在一起。匯流排是計算機系統非常重要的組成部分。關於需要知道下面這幾個概念。

  • 匯流排寬度:一般用並行資料通路的數量來定義匯流排的寬度,一般匯流排的寬度有 8 位、16 位、32 位、64 位,我們現在最常用的就是 64 位匯流排,一條 64 位寬的匯流排一次能夠傳輸 64 位也就是 8 個位元組資訊。
  • 頻寬:頻寬是衡量資料在匯流排上傳輸速率的一項指標。在保持資料傳輸速率不變的情況下提高並行通路的數量,可以提高匯流排的頻寬。
  • 延遲:延遲是從發出資料傳輸請求到實際資料傳輸的時間間隔。

匯流排分類

下面我們主要介紹兩種匯流排,一種是片內匯流排,一種是系統匯流排,片內匯流排一般指的是 CPU 晶片內部、暫存器和暫存器之間、暫存器和算術單元 ALU 之間的連線。

而系統匯流排主要是指 CPU 和記憶體、記憶體和 IO 裝置、CPU 和 IO 裝置等各大部件的資訊傳輸介質。系統匯流排按照傳輸資訊的不同主要分為下面三類。

  • 地址線
  • 資料線
  • 控制線

下面我們就來具體瞭解一下這三類匯流排

地址匯流排

地址匯流排主要用於傳輸源資料或者目的資料在主存單元中的地址。

CPU 通過地址匯流排來指定儲存單元的位置的,地址匯流排上能傳送多少資訊,CPU 就可以對多少個儲存單元進行定址。

上圖中 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 連結

相關文章