首先這門課跟計算機系統概論的區別在于這個更偏向于底層實現(最煩的東西……),而后者則是在此基礎上進行優化和改進
那么就先看總線
首先就要回顧一下之前所學習過的只是,也就是計算機的基本架構馮諾依曼或者是哈夫架構(后者的去區別只不過是將程序和數據的存儲分開來了),其中包含了五大部件,而這些不見的互聯方式有兩種,其中一個是使用單獨的連線,稱為分散連接,還有一種是將各部件都連接到一組公共信息的傳輸線上,稱為總線連接
早期的計算機大多數是分散連接方式,以運算器為中心。
這種內部連線復雜,尤其是當i/o與存儲器交換信息的時候需要經過運算器,致使后者停止了運算,嚴重影響了cpu的工作效率。
后來改進為以存儲器為中心,交換信息可以不用經過運算器,還添加了中斷、DMA等技術,使得cpu工作效率得到了提高,但是仍然不具有靈活性
于是總線連接出現了
總線,也即是連接多個部件的信息傳輸線,是各部件共享的傳輸介質,可以想象為是一大堆部件掛在一條線上跟葡萄一樣,在某一個時刻只允許一個部件發送信息,但是可以有多個部件同時接收信息
總線實際上是由許多傳輸線或者是通路組成的,每條都可以一位一位地傳輸二進制代碼,這樣16條傳輸線所組成的總線就可以同時傳輸16條二進制代碼
其中一種是雙總線結構,也就是主存與cpu連接(這個稱之為存儲總線(m總線))而cpu與i/o總線連接,i/o總線又管理了若干的外接i/o接口和對應的設備(這邊的稱為輸入輸出總線),這種結構便于設備的增刪,但是在與主存進行交換信息的時候由于必定要經過cpu所以會影響到后者的效率
還有一種是單總線結構,其實就是去掉了主存和cpu之間的線而保留了主存和總線的直接連接,原則上避免了對于cpu的影響,cpu仍然可以繼續處理不用訪問主存和i/o設備的別種無關操作,效率提高,但是因為只有一組總線,會在各部件都使用總線的時候發生沖突,所以必須設置判優邏輯
眾所周知,任何事物的最佳解決方法一定是折中,所以又出現了以存儲器為中心的雙總線結構,總的來說就是能連的都連了,順帶一提這個鏈接了cpu和主存的總線稱之為存儲總線,這組總線速度很高,只提供為在cpu和主存之間傳輸信息,同時提高了傳輸效率并且減輕了系統負擔,并且保留了iO設備和存儲器交換信息不用經過主存的特點
總線的分類:
按照數據傳送方式可以分為:并行和串行(沒有絕對的優劣關系)
在并行傳輸中 ,又可以按照傳輸數據的寬度分為8位,16位,32位,64位,等傳輸總線
按照總線的使用范圍又可以劃分為,計算機總線(外設總線),測控總線,網絡通信總線
片內總線
也就是芯片內部的總線,比如cpu芯片啦寄存器和寄存器之間啦寄存器和算數邏輯單元alu之間啦
系統總線
也就是cpu、主存、io設備各大部件之間的信息傳輸線,又由于這些部件通常都是安在主板和插件版上的,那么又稱之為是班級總線或者是板間總線
按照系統總線傳輸的信息的不同又可以分為三類
1、數據總線
也就是用來傳輸各功能部件之間的數據信息,同時它也是雙向傳輸總線,位數和機器字長、存儲字長有關,一般都是8位、16位、32位,這個總線的位數也就稱之為是數據總線寬度,是衡量系統性能的重要參數,好比說這個是8位寬度而指令字長是16位的話,那么cpu取值階段必須兩次訪問
2、地址總線
主要是用來指出數據總線上的源數據或者是目的數據在主存單元上的地址或者是io設備上的地址,比如要從存儲器讀出一個數據,cpu就得把這個數據所在的存儲單元的地址先送到地址線上(然后再讀),再比如要將數據經過io輸出,cpu除了要將數據送到數據總線,還需要將輸出設備的地址 (通常是經由io接口)這個地址也送到地址總線上
可見地址總線上的代碼們呢就是用來指明cpu想要訪問的存儲單元和io端口的地址的,由cpu輸出并且單向傳輸(cpu管理地址,單向到了地址總線上)
地址線的位數跟存儲單元的個數有關,比方說地址線是20根的話對應的存儲單元的個數就應該是2的20方
3、控制總線
數據總線和地址總線都是由掛在總線上的所有部件共享的,如何使各部件在不同時刻占有其使用權
所以控制總線出現了
控制總線呢總是用來發出各種控制信號的傳輸線
對于任何一條控制線來說應該都是單向的,信號嘛,給了你你知道了就行了別墨跡,好比說相應的存儲器讀寫命令,io設備讀寫命令都是由cpu發出的。
但是對于控制總線總體又是雙向的,比如某設備準備就緒就向cpu發出中斷請求,當某部件(DMA接口)獲得總線使用權的時候,也需要發出總線請求
另外呢這個控制總線還有監視其他各部件狀態的作用,比如忙不忙,比如有沒有出錯,所以從這方面,對于cpu來說,控制信號,輸入和輸出都有
常見的控制信號?
時鐘:同步操作
復位:初始化所有部件(注意對象都是部件)
總線請求:某部件需要獲得使用權
總線允許:某部件已經獲得控制權
中斷請求:某部件提出中斷請求
中斷響應:中斷請求被接收
存儲器寫:將數據總線上的數據寫到存儲器的指定地址單元內(別誤會這個“指定”是 cpu指定的)
存儲器讀:同上
io讀:從指定的io端口中將數據讀到數據總線上
io寫:將數據總線上的數據輸出到指定的io端口內
傳輸響應:表示數據已被接收或者已被傳送至數據總線上