加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 認(rèn)識(shí)總線
    •  
    • 以運(yùn)算器為主的連接方式
    •  
    • 總線設(shè)計(jì)
    •  
    • 后記
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

計(jì)算機(jī)組成原理之總線設(shè)計(jì)

2021/05/26
571
閱讀需 11 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

hey guys ,我是 cxuan ,最近有小伙伴們說 cxuan 你能不能出一些關(guān)于計(jì)算機(jī)組成相關(guān)的文章,因?yàn)樾』锇橛行枨?,所以咱得滿足呀,這不,計(jì)算機(jī)組成系列來了!這一篇文章和你聊聊總線設(shè)計(jì)。

我們知道,計(jì)算機(jī)是由五大部件組成的:運(yùn)算器、存儲(chǔ)器、控制器、輸入設(shè)備和輸出設(shè)備,這個(gè)概念比較抽象,簡(jiǎn)單一點(diǎn)來說就是 CPU 包含運(yùn)算器和控制器,存儲(chǔ)器也就指的是內(nèi)存,而輸入輸出設(shè)備分別指的是鍵盤和顯示器。計(jì)算機(jī)這幾個(gè)部件之間是需要共同協(xié)作完成信息處理的,那么,這幾大部件之間如何進(jìn)行通信呢?靠的是系統(tǒng)總線,這也是我們這篇文章討論的重點(diǎn)。

認(rèn)識(shí)總線

總線是將兩個(gè)計(jì)算機(jī)或者多個(gè)功能單元連接在一起并允許它們相互交換數(shù)據(jù)的一種通路??偩€還可以將計(jì)算機(jī)和外部設(shè)備連接在一起??偩€是計(jì)算機(jī)系統(tǒng)非常重要的組成部分。關(guān)于需要知道下面這幾個(gè)概念。

總線寬度:一般用并行數(shù)據(jù)通路的數(shù)量來定義總線的寬度,一般總線的寬度有 8 位、16 位、32 位、64 位,我們現(xiàn)在最常用的就是 64 位總線,一條 64 位寬的總線一次能夠傳輸 64 位也就是 8 個(gè)字節(jié)信息。

帶寬:帶寬是衡量數(shù)據(jù)在總線上傳輸速率的一項(xiàng)指標(biāo)。在保持數(shù)據(jù)傳輸速率不變的情況下提高并行通路的數(shù)量,可以提高總線的帶寬。

延遲:延遲是從發(fā)出數(shù)據(jù)傳輸請(qǐng)求到實(shí)際數(shù)據(jù)傳輸?shù)臅r(shí)間間隔。

總線分類

下面我們主要介紹兩種總線,一種是片內(nèi)總線,一種是系統(tǒng)總線,片內(nèi)總線一般指的是 CPU 芯片內(nèi)部、寄存器和寄存器之間、寄存器和算術(shù)單元 ALU 之間的連接。

而系統(tǒng)總線主要是指 CPU 和內(nèi)存、內(nèi)存和 IO 設(shè)備、CPU 和 IO 設(shè)備等各大部件的信息傳輸介質(zhì)。系統(tǒng)總線按照傳輸信息的不同主要分為下面三類。

地址線

數(shù)據(jù)線

控制線

下面我們就來具體了解一下這三類總線。

地址總線

地址總線主要用于傳輸源數(shù)據(jù)或者目的數(shù)據(jù)在主存單元中的地址。

CPU 通過地址總線來指定存儲(chǔ)單元的位置的,地址總線上能傳送多少信息,CPU 就可以對(duì)多少個(gè)存儲(chǔ)單元進(jìn)行尋址。

上圖中 CPU 和內(nèi)存中間信息交換通過了 10 條地址總線,每一條線能夠傳遞的數(shù)據(jù)都是 0 或 1 ,所以上圖一次 CPU 和內(nèi)存?zhèn)鬟f的數(shù)據(jù)是 2 的十次方。

所以,如果 CPU 有 N 條地址總線,那么可以說這個(gè)地址總線的寬度是 N 。這樣 CPU 可以尋找 2 的 N 次方個(gè)內(nèi)存單元。

數(shù)據(jù)總線

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

CPU 與內(nèi)存或其他部件之間的數(shù)據(jù)傳送是由數(shù)據(jù)總線來完成的。數(shù)據(jù)總線的寬度決定了 CPU 和外界的數(shù)據(jù)傳輸速度。8 根數(shù)據(jù)總線可以一次傳送一個(gè) 8 位二進(jìn)制數(shù)據(jù)(即一個(gè)字節(jié))。16 根數(shù)據(jù)總線一次可以傳輸兩個(gè)字節(jié),32 根數(shù)據(jù)總線可以一次傳輸四個(gè)字節(jié)。。。。。。

控制總線

控制總線是在總線上發(fā)出控制信號(hào)的傳輸線,常見的控制信號(hào)有:時(shí)鐘(同步操作)、復(fù)位(初始化操作)、中斷請(qǐng)求/響應(yīng)、存儲(chǔ)器讀寫、IO 讀寫等。

CPU 與其他部件之間的控制是通過 控制總線 來完成的。有多少根控制總線,就意味著 CPU 提供了對(duì)外部器件的多少種控制。所以,控制總線的寬度決定了 CPU 對(duì)外部部件的控制能力。

 

以運(yùn)算器為主的連接方式

互聯(lián)網(wǎng)的早期階段,大多數(shù)總線采用的是分散連接(還有一種是總線連接,后面說),這種連接方式如下圖所示

從圖上可以看到,運(yùn)算器是這種分散連接的核心部分,這種連接方式會(huì)出現(xiàn)問題,當(dāng)你的 CPU 正在忙于計(jì)算時(shí),發(fā)生了 IO 與存儲(chǔ)器的信息交換,此時(shí)你的運(yùn)算器也就是 CPU 不得不停下來,這就導(dǎo)致了運(yùn)算器運(yùn)行的中斷,嚴(yán)重影響了 CPU 的工作效率。

你想,當(dāng)你正在寫文章的時(shí)候,你對(duì)象問你:你今天怎么不理我?所以你就得放下工作和她聊天;當(dāng)你處理好她的情緒后繼續(xù)寫了 5 分鐘文章,這時(shí)你的讀者發(fā)表了長篇大論向你咨詢問題,這時(shí)候你總不能不回復(fù)吧,所以你此時(shí)又要放下寫文章,繼而幫助他解決問題,由此可見,你寫文章的效率會(huì)高嗎?CPU 也是一樣的道理。

當(dāng)然你也可以選擇進(jìn)入專注模式不回復(fù),這就要視事情的優(yōu)先級(jí)而定了,CPU 也是一樣的。

 

總線設(shè)計(jì)

以存儲(chǔ)器為主的連接方式

后來,為了改善這種情況,出現(xiàn)了以存儲(chǔ)器 為中心的結(jié)構(gòu),這種結(jié)構(gòu)如下所示

可以看到,這種連接方式以存儲(chǔ)器為核心,圖中主要涉及的部件功能如下

輸入設(shè)備將常用的信息轉(zhuǎn)換為機(jī)器能夠識(shí)別的數(shù)據(jù)形式,常見的有鍵盤和鼠標(biāo)等

存儲(chǔ)器用于存放指令和數(shù)據(jù)

運(yùn)算器用來完成算數(shù)和邏輯運(yùn)算,并將運(yùn)算結(jié)果暫存在運(yùn)算器內(nèi)

控制器用來完成指揮、控制程序和數(shù)據(jù)的輸入、運(yùn)行和處理運(yùn)算結(jié)果

輸出設(shè)備的轉(zhuǎn)換過程就是輸入設(shè)備的逆過程,即將運(yùn)算結(jié)果轉(zhuǎn)換為人們可以熟知的形式

由于運(yùn)算器和控制器在電路結(jié)構(gòu)上的關(guān)系非常緊密,所以通常將運(yùn)算器和控制器統(tǒng)稱為 CPU,把輸入/輸出設(shè)備統(tǒng)稱為 IO設(shè)備,存儲(chǔ)器就是內(nèi)存。

所以現(xiàn)代計(jì)算機(jī)的構(gòu)成一般就是 CPU + 存儲(chǔ)器 + 輸入/輸出設(shè)備。

使用這種連接方式后,使 IO 與主存之間的信息交換可以不經(jīng)過運(yùn)算器,并且隨著中斷、DMA 技術(shù)的發(fā)展和成熟,使 CPU 效率得到很大的提高。

但是使用這種方式,仍然不能解決 IO 設(shè)備和主機(jī)之間連接的靈活性,因?yàn)楫?dāng)我們想增加一種 IO 設(shè)備時(shí),這種連接方式卻無法處理,由此出現(xiàn)了總線的連接方式。

以 CPU 為主的雙總線連接方式

總線采用的是多種 IO 部件共享的連接方式,總線實(shí)際上是由許多傳輸線組成,每條線可一位一位的傳輸二進(jìn)制數(shù)據(jù),比如 16 條傳輸線可以同時(shí)傳輸 16 位二進(jìn)制代碼。

下面是一種以 CPU 為中心的雙總線結(jié)構(gòu)

上圖的這種連接方式就是一種總線的連接方式,它將各部件連接到一組公共傳輸線上。從圖中可以體會(huì)出雙總線的概念:其中一組總線連接 CPU 和內(nèi)存,稱為存儲(chǔ)總線;另一組用來建立 CPU 和各 I/O 設(shè)備之間交換信息的通道,稱為 IO 總線。

這種連接方式也會(huì)出現(xiàn)問題,當(dāng)多個(gè)部件與總線相連時(shí),如果兩個(gè)及以上的部件同時(shí)發(fā)送消息,那么勢(shì)必會(huì)產(chǎn)生信號(hào)沖突,導(dǎo)致傳輸無效。所以,在同一時(shí)刻只允許有一個(gè)部件發(fā)送消息,但是可以有多個(gè)部件接收消息。

單總線結(jié)構(gòu)設(shè)計(jì)

如果將 CPU 、主存和 IO 設(shè)備通過 IO 接口都掛到一組總線上,就形成了單總線的連接方式。

這里思考一個(gè)問題,你覺得單總線的連接方式和以 CPU 為主的雙總線的連接方式相比,最大的區(qū)別在哪里?

以 CPU 為主的雙總線連接方式中,CPU 和 IO 總線的交互需要 CPU 參與,CPU 和內(nèi)存的交互也需要 CPU 參與,所以 CPU 無時(shí)無刻都在做功,這也得虧是 CPU ,換個(gè)其他人得累死。

單總線連接連接方式,因?yàn)?CPU 、內(nèi)存和 IO 都掛在同一個(gè)總線上,所以內(nèi)存和 IO 交互不需要 CPU 的參與,這就是最大的改變。這種連接方式同樣也會(huì)出現(xiàn)問題,因?yàn)橹挥幸唤M總線,當(dāng)各個(gè)部件都需要交換信息時(shí),就會(huì)發(fā)生沖突,所以,在這種設(shè)計(jì)中,需要設(shè)定總線占用優(yōu)先級(jí),讓各個(gè)組件按照優(yōu)先級(jí)順序來依次占用總線。這也是為什么編程語言中使用鎖作為線程安全性的真正原因。

還有一個(gè)問題是 CPU 沒有和內(nèi)存直接交互,大大影響工作效率。

以存儲(chǔ)器為中心的雙總線結(jié)構(gòu)

還有一種連接方式是以存儲(chǔ)器為中心的雙總線結(jié)構(gòu),它的設(shè)計(jì)如下

這種總線設(shè)計(jì)結(jié)構(gòu)就很舒服了。它是在上面單總線結(jié)構(gòu)的基礎(chǔ)上,在 CPU 和內(nèi)存之間增加了一條存儲(chǔ)總線,在 IO 使用系統(tǒng)總線頻率比較高的時(shí)候,CPU 和內(nèi)存可以通過存儲(chǔ)總線交互,這樣既大大加快了系統(tǒng)工作效率,又降低了總線開銷。還保留了內(nèi)存和 IO 交互時(shí)不需要經(jīng)過 CPU 的特點(diǎn)。

 

后記

這次嘗試寫了一下計(jì)算機(jī)組成原理相關(guān)的文章,到時(shí)候可以和計(jì)算機(jī)基礎(chǔ)那本 PDF 合并一下,不知道計(jì)算機(jī)組成相關(guān)的大家感興趣么,如果感興趣,可以幫我點(diǎn)個(gè)贊喲~

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

cxuan 寫的文章還不錯(cuò)。會(huì)分享計(jì)算機(jī)底層、計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng),Java基礎(chǔ)、框架、源碼等文章。