計算機組成原理(二)之系統匯流排
在這個系列文章的第一講,漫談計算機組成原理(一)之程式執行的過程 中說過,現代計算機是從馮若伊曼計算機發展起來的。其組成部分有儲存器、運算器、控制器、輸入裝置、輸出裝置,在現代計算機中,人們將運算器與控制器封裝起來成為CPU(中央處理單元)。計算機的各種部件想要進行資料互動,就必須讓這些部件形成一定的連線關係,以便資料互動的進行。
連線的方式有兩種,一種是各個部件之間使用不同的線相互連線,很明顯,這種互動方式有很大的弊端,如連線複雜造成的控制複雜,還有就是當部件較多的情況下,簡直就是個災難。所以就催生了另外一種連線方式——匯流排連線,也就是我們這一講要講述的東西。
匯流排連線是指,將所有就的部件連線在一組公共的資訊傳輸線上,這樣做就避免了上面那種傳輸方式的弊端。現代計算機幾乎所有的都是採用匯流排連線。
概述
從引言中,我們基本上能夠了解到匯流排在計算機系統中的作用。但是上面的說法只是一個概論,我們需要給出更加詳細的匯流排的作用:匯流排是計算機中各個部件的資訊傳輸線。在計算機中,幾乎所有需要資訊傳輸的地方,都是存在匯流排的。
那麼,匯流排傳輸的資訊具體來講是什麼呢?總的來講,匯流排傳輸的資訊可以使資料、地址(詳情請看第一講https://blog.csdn.net/yanmiao0715/article/details/80338802)等,接下來會詳細介紹。
另外,從傳輸方式上來講,共有兩種傳輸方式。一種是並行的,另外一種序列的方式,兩種方式各有利弊。
匯流排的傳輸方式
並行方式
並行傳輸方式很簡單,就是在同一時間內,傳輸多位資料,而計算機的位數,就是按照系統匯流排傳輸的資料位數劃分的,常見的有32位、64位等。
注意,並行方式並不合適遠距離資料傳輸,因為並行傳輸方式,一旦距離過長,那麼各條匯流排的相互干擾則十分強大,資料丟失、錯誤也就成了必然。
所以,並行傳輸用在計算機內部,就非常可靠了。既保證了傳輸速度,又保證了資料傳輸的可靠性。序列方式
序列方式很明顯不適用於計算機內部的資料傳輸,一來一條匯流排傳輸速度實在是慢,另外會導致計算機的匯流排分佈過於複雜。
不過,與上面的方式正好相反的是,這種方式可以避免遠距離傳輸的資料干擾。
匯流排的結構框圖
在瞭解了基本的匯流排傳輸方式後,我們將從比單根匯流排更大的方面來介紹匯流排的具體結構。
所謂的匯流排結構,就是匯流排在計算機中的具體分佈位置,這個位置的不同,會導致計算機的各個方面的不同,下面就來一一介紹。
面向CPU的雙匯流排結構
在這種結構中,包括了M匯流排(CPU與主存之間的資料傳輸匯流排)、I/O匯流排。優點是多條總匯流排,並行傳輸,效率高。缺點也很明顯,其一是事件執行過程容易被打斷,比如當前IO裝置正在佔用匯流排,與CPU或者主存之間在傳輸資料,而另外一個裝置此時卻發起了佔用請求,IO匯流排還要停下來處理佔用請求;其二是IO裝置無法直接與主存進行資訊互動,只能通過CPU這個介質,但是這就無端端的佔用了CPU,CPU完全可以在被佔用的這段時間處理資料,所以,就需要改進。單匯流排結構
這種結構中,只有一條匯流排:系統匯流排。計算機中的所有裝置都連線在這條總線上。這種方式的優點基本可以忽略了,缺點太多:
當CPU進行資料處理的時候,非常容易被打斷,類似於上面的情況,就導致了CPU的效率過低;如果計算機中有很多的裝置,很難想象這條匯流排要長到什麼程度,匯流排越長,延遲越高;最後,這麼多的裝置,只有一條系統匯流排,典型的狼多肉少,這些裝置之間一定會打架的。以儲存器為中心的雙匯流排結構
最後的這種以儲存器為中心的雙系統匯流排結構,也就是在第一講之中提過的現代計算機的結構。這種結構整合了上面兩種方式的結構,做到了揚長避短。雖然和單匯流排結構挺像,但是,它在CPU和主存之間加入了一條儲存匯流排,這樣保證了CPU和主存互動是不佔用系統匯流排,也就避免了CPU的執行被打斷,CPU需要的資料既可以從主存中獲取,又可以從匯流排中獲取,非常強大;另外,系統匯流排和儲存匯流排飛凱,提高了效率的同時,還減輕了系統匯流排的負擔。
匯流排分類
片內匯流排
所謂的片內匯流排,就是CPU內部的匯流排,連線著CPU內部的各個部件。
系統匯流排
- 資料匯流排:資料匯流排是雙向傳輸的,和機器字長、儲存字長有關係
- 地址匯流排:地址匯流排是單向的,包括儲存地址、IO地址
- 控制匯流排:有入、有出,發出各種控制訊號
當然,匯流排分類的內容還有很多,包括一些常見的術語,這裡就不再贅述了,在後面的講解中遇到什麼就會解釋什麼。
匯流排效能指標
- 匯流排寬度:資料匯流排的根數
- 匯流排頻寬:匯流排的資料傳輸速率,也就是每秒傳輸的最大位元組數,單位MBp/S
- 匯流排複用:一條訊號線上分時傳送兩種訊號
- 訊號線數:地址匯流排、資料匯流排 、控制匯流排的數目總和
- 匯流排控制方式
匯流排結構
單匯流排結構
單匯流排結構在匯流排結構框圖中其實已經說過了。就是上面那種問題特別多的匯流排結構。這裡就不再贅述。
多匯流排結構
雙匯流排結構
可以看到,這種方式,是將I/O介面接在了與主存匯流排通訊的通道上,那麼這個通道是什麼呢?這個通道實際上是由計算機作業系統控制的一個特殊的處理器,用來對I/O裝置進行管理。
圖中所示只有一個通道,實際上是有很多通道的。人為的將不同速度的I/O裝置換分為不同的組,進而將這些組分別接在不同的通道上,可以預見,這種結構的匯流排資料吞吐量是十分高的,就實現了一個相當強大的計算機系統。
而這種結構,通常被用在大型計算機上。
三匯流排結構
- 第一種
這種結構的匯流排包括:主存匯流排、DMA匯流排(直接儲存器訪問,顧名思義,使用這條匯流排的I/O裝置可以直接向主存的讀寫資料)、I/O匯流排。
其中,DMA匯流排連線的是告訴I/O裝置,最好能夠和主存(記憶體條)的速度在一定程度上匹配。
在這種結構中,任意時刻,只有一條匯流排被佔用。主存匯流排肯定不能和DMA匯流排同時被佔用,而I/O裝置只在CPU呼叫I/O指令的時候才會被用到。
我覺得你有可能會有這麼個疑問:I/O匯流排會不會和DMA匯流排同時被佔用?肯定是不能的,因為前面說了,I/O匯流排只有在呼叫I/O指令的時候才會被佔用,在佔用的過程中,沒有CPU的控制,高速I/O裝置怎麼可能會和主存互動。
- 第二種
這種結構,是將CPU和Cache(快取裝置)之間加入了局部匯流排,不僅如此,主存和Cache都連線在系統總線上,去掉了CPU和主存的資訊傳輸,此時與CPU直接進行資訊傳輸的是Cache,我們知道,Cache是一種比主存更快的裝置,Cache可以直接通過匯流排讀取主存中的資訊,然後交給CPU,這樣就速度就會飛起。另外,擴充套件匯流排的存在,使得裝置擴充套件變得極為容易。
四匯流排結構
對比三匯流排結構,四匯流排就是將三匯流排更加細分,將I/O匯流排分成了高速匯流排和低速擴充套件匯流排。由於四匯流排結構並不是特別常見,這裡就不詳細說明了,感興趣的小夥伴可以自己查閱一下相關的資料。
匯流排控制(重要內容)
接下來的這個內容,可以說是系統匯流排這一講中最為核心的部分。
概述
匯流排的控制主要是兩個方面的內容。
首先,我們可以想象到,當某一個時間點上,有了多個裝置同時發出匯流排的佔用請求,那麼匯流排應該去響應哪一個裝置的佔用請求呢?再者,我們講了,在資訊傳輸的過程中,不可避免的會出現資訊丟失,如何保證資料傳輸的完整性呢?這就是我們要討論的第一個問題——匯流排的判優控制。
其次,雖然匯流排的判優控制解決了匯流排應該與哪一個裝置互動的問題,但是還是存在這樣一個問題的:兩個裝置,一個主裝置(對匯流排有控制權的裝置)和一個從裝置(只能響應從匯流排發來的命令)進行互動的時候,主裝置何時佔用傳輸資料?從裝置何時傳送響應資料?這就是我們要講的第二個問題,也就是匯流排的通訊控制。它的作用就是解決通訊雙方的協調配合的問題。
匯流排的判優控制
具體的講,匯流排的判優控制共有兩種方式,一種是集中式,將所有的控制邏輯集中在一個部分;另外一種是分散式,也就是將控制邏輯集中在各個部分。而分散式並不常見,這裡只介紹集中式的判優控制。
鏈式查詢
首先來說明一下這張圖片上各個英文名稱的意義。BS:匯流排忙,也就是當前匯流排正在被使用;BR:匯流排請求:裝置的匯流排請求訊號就是從這條線上發出的;BG:匯流排同意,當匯流排同意裝置的佔用請求時,同意訊號將會從這裡發出。
鏈式查詢方式,顧名思義,就是將所有裝置像鏈子一樣串聯起來。
工作流程如下:某一個裝置檢測到當前匯流排空閒,則通過BR線向匯流排發出佔用請求,當匯流排控制部件收到了佔用請求後,他只知道收到了佔用請求,卻不知道是哪個裝置發出的佔用請求;此時就會通過匯流排同意BS線查詢,直到查詢到傳送匯流排佔用請求的裝置即停止。
可以看到,這種判優控制中,裝置的優先順序是按照位置確定的,總是離匯流排最近的那個裝置會有限被查詢到。也就是說,最後一個裝置可能永遠無法佔用到匯流排。這就非常坑了,如果無法佔用匯流排,也就代表著無法正常工作,那還要這個裝置做什麼呢?
還有一點,前面說了,這些裝置是串聯起來的,通過一根BS線,那麼,當BS線某處發生了損壞,則查詢將無法進行。計數器定時查詢
很明顯,第一種鏈式查詢方式在實際使用中肯定是各種問題,這種方式能夠大大的改進種種情況。
相比較於鏈式查詢方式,這種方式去掉了BG(匯流排同意)線,而增加了裝置地址線,也就是定時查詢計數所指示的那條線。
當匯流排接收到BR線的請求訊號後,在匯流排未被佔用的情況下,匯流排控制部件中的計時器開始計數,通過裝置地址線向裝置傳送地址,當某裝置地址與傳送請求的裝置地址一致時,裝置則獲得匯流排控制權,計數器停止計數。
如果在查詢過程中,當前計數地址與傳送請求的裝置地址沒匹配上,則計數器+1,直到找到這個裝置為止。
這個計數器的值是可以通過軟體來設定的,這樣,就能夠人為的確定裝置的優先順序。
【注】這種方式的裝置地址線的條數為[log2n]條(n為裝置數)。獨立請求方式
這種方式就非常有意思思了,簡單的講,就是將匯流排請求(BR)和匯流排同意(BG)線給每個裝置都分配一下,當然,每個裝置都需要連線一下地址線和資料線。
總的過程和上面的方式沒有太大區別,主要的區別在於,這裡的優先權控制變成了排隊器,給每個請求排隊,然後再執行。當然,這種方式是很有好處的,最起碼執行速度非常的快,但是,一旦裝置過多,那又變成了災難。
匯流排的通訊控制
由於匯流排的通訊控制主要解決的就是:通訊雙方的協調配合問題,那麼在不同時間段,就會出現不同的狀態。所以我們這裡引入一個匯流排生命週期的概念。
匯流排的生命週期
匯流排生命週期,是指主從裝置完成一次完整的資訊通訊的過程。這個過程包括三個階段:
申請分配階段
就是主裝置申請匯流排控制權的過程定址階段
也就是匯流排控制器尋找到底是哪個裝置發起的控制請求的過程。資料傳輸階段
- 結束階段
而我們接下來要討論的內容就是資料傳輸階段的通訊過程。
通訊方式
- 同步通訊:由統一時標控制通訊的資料傳輸
這張圖片表示的是某個裝置向CPU傳輸資料的過程。
整個的傳輸過程如下:
- 在T1時間的上升沿(上升沿這個詞其實不難理解,就是時鐘向上走的部分,對應下降沿就是時鐘線向下走的過程),主裝置(CPU)給出讀資料的目的地址
- 在T2上升沿,主裝置(CPU)給出讀命令
- 在T3上升沿,從裝置給出資料資訊,執行讀資料操作
- T3下降沿,讀命令、資料訊號撤銷
- T4,地址線撤銷
這種方式,比較中規中矩,就是說在每一個時間段,執行固定的操作,模組間的配合較為簡單。缺點也很明顯,就是中規中矩的缺點,不夠靈活,裝置必須在規定的時間內執行完成相應的操作。
在這中方式中,主從模組的操作按照統一的時標操作。主從裝置的速度如果相差較大,那麼速度快的裝置必須等待速度慢的裝置執行。
【適用範圍】適用於匯流排長度較短、各部件存取時間比較一致的場合。
- 非同步通訊
非同步通訊就比較靈活了,沒有統一的時標,只需要主裝置發出請求,從裝置發出響應即可。非同步通訊分成了三種方式:
- 不互鎖
想象這樣的一個場景,一個人向另外一個人打招呼,打完招呼就去忙自己的事情了,不管那個人是否聽到了自己的問候,都去做自己的事情。類比這種情況:主裝置發出請求,發完請求後就去執行其他的操作了,不管從裝置是否收到了回答。理想的狀況下肯定是需要從裝置回答的,這就衍生了另外一種方式。 - 半互鎖
再想象一個場景,A向B打招呼,如果B和A沒有仇的話,B肯定是會回覆A的,如果A發現B沒有搭理他,那麼他一般會再和B打招呼,如果B依然不迴應,那麼這個過程就會持續下去。
到這裡也是一樣的,當主裝置向從裝置發出訊號時,如果從裝置接收到這個訊號,那麼就會向主裝置傳送響應資訊。如果主裝置一直沒有接收到這個訊號,就會一直向從裝置傳送資訊。 - 全互鎖
全互鎖,就是半互鎖的升級版本。在半互鎖中,如果主裝置沒有收到從裝置發出的響應訊號,除了是從裝置沒有接收到主裝置的訊號外,還有可能是因為從裝置傳送的訊號主裝置沒有收到,如果是這種情況,主裝置也會一直請求下去。
在全互鎖的情況中,如果主裝置發出訊號後,從裝置也收到了訊號,則會向主裝置傳送響應訊號;如果主裝置接收到了訊號,那麼就會再從裝置傳送一個表示接收到了的訊號,此時從裝置就可以撤銷響應訊號了。如果沒有收到,則從裝置就會保持這個響應訊號。
總結一句話就是,主裝置一直請求,從裝置一直應答。
- 不互鎖
- 半同步通訊(同步、非同步結合)
為什麼說半同步通訊是同步通訊和非同步通訊相互結合的方式呢?因為半同步通訊保留了同步通訊的時鐘週期,又繼承了非同步通訊的能夠使得不同速度的裝置協調工作的優點,可以說是十分的強大。
從圖中可以看到,半同步通訊不同於同步通訊的一個重要的特點就是:增加了兩個Tw週期,還增加了WAIT訊號。下面我們就來說一下它的具體情況。
首先,和同步通訊相同,都是在T1給出地址訊號,T2給出讀命令,讀命令給出後,緊接著的並不一定是資料訊號。如果從裝置的速度很慢,不能在T3時間給出資料,則會通知主裝置,我現在還沒有準備好。隨後主裝置就會給出WAIT訊號,插入等待週期,當從裝置說我已經準備好了的時候,主裝置就會撤銷掉等待訊號,開始讀資料。後面的情況就和同步通訊一致了。 - 分離式通訊:充分發揮系統匯流排每瞬間的潛力
這種通訊方式比較複雜,我們很難在一般的計算機上見到,這裡就不多說了,只需要知道它的這個特性就可以了。感興趣的可以看看這片博文:https://blog.csdn.net/ce123_zhouwei/article/details/6936047,不過我發現這個作者好像是直接摘抄的唐朔飛教授的《計算機組成原理》這本書。無奈╮(╯▽╰)╭,大家看看就行了。
結語
感謝您的閱讀,歡迎指正部落格中存在的問題,也可以跟我聯絡,一起進步,一起交流!
微信公眾號:進擊的程式狗
郵箱:[email protected]
個人部落格:http://roobtyan.cn
在這個系列文章的第一講,漫談計算機組成原理(一)之程式執行的過程 中說過,現代計算機是從馮若伊曼計算機發展起來的。其組成部分有儲存器、運算器、控制器、輸入裝置、輸出裝置,在現代計算機中,人們將運算器與控制器封裝起來成為CPU(中央處理單元)。計算機的各種部件想要進行資料互動,就必須讓這些部件形成一定的連線關係,以便資料互動的進行。
連線的方式有兩種,一種是各個部件之間使用不同的線相互連線,很明顯,這種互動方式有很大的弊端,如連線複雜造成的控制複雜,還有就是當部件較多的情況下,簡直就是個災難。所以就催生了另外一種連線方式——匯流排連線,也就是我們這一講要講述的東西。
匯流排連線是指,將所有就的部件連線在一組公共的資訊傳輸線上,這樣做就避免了上面那種傳輸方式的弊端。現代計算機幾乎所有的都是採用匯流排連線。