總線
總線(Bus)是計算機各種功能部件之間傳送信息的公共通信干線,它是cpu、內存、輸入、輸出設備傳遞信息的公用通道,主機的各個部件通過總線相連接,外部設備通過相應的接口電路再與總線相連接,從而形成了計算機硬件系統。
為什么要有總線?
假設沒有總線這種設計,計算機設備都是分散連接的,如下圖:
此時如果新增了一個輸入設備2,此時需要分別連接存儲器、控制器、運算器,設備一多線路就會十分復雜。
有了總線之后,設備直接連接總線,使得計算機內部結構變得十分清晰,設備的添加和卸載也變得容易。
總線的分類
片內總線
**高集成度芯片內部的信息傳輸線**,用于連接寄存器與寄存器、寄存器和控制器&運算器之間。
系統總線
CPU、主內存、IO設備、各組件之間的信息傳輸線。一般有三類:數據總線、地址總線、控制總線。
數據總線
雙向傳輸各個部件的數據信息
數據總線的位數(總線寬度)是數據總線的重要參數,一般與CPU位數相同(32位、64位)
地址總線
指定源數據或目的數據在內存中的地址
地址總線的位數與存儲單元有關
地址總線位數=n,尋址范圍:0~??^??
控制總線
控制總線是用來發出各種控制信號的傳輸線
控制信號經由控制總線從一個組件發給另外一個組件
控制總線可以監視不同組件之間的狀態(就緒/未就緒)
總線的仲裁
系統中多個設備或模塊可能同時申請對總線的使用權,為避免產生總線沖突,需由總線仲裁機構合理地控制和管理系統中需要占用總線的申請者,在多個申請者同時提出總線請求時,以一定的優先算法仲裁哪個應獲得對總線的使用權。
仲裁方法
鏈式查詢
總線授權信號BG串行地從一個I/O接口傳送到下一個I/O接口。假如BG到達的接口無總線請求,則繼續往下查詢;假如BG到達的接口有總線請求,BG信號便不再往下查詢,該I/O接口獲得了總線控制權。離中央仲裁器最近的設備具有最高優先級,通過接口的優先級排隊電路來實現。
好處:只用很少幾根線就能按一定優先次序實現總線仲裁,很容易擴充設備。
壞處:對詢問鏈的電路故障很敏感,如果第i個設備的接口中有關鏈的電路有故障,那么第i個以后的設備都不能進行工作。查詢鏈的優先級是固定的,如果優先級高的設備出現頻繁的請求時,優先級較低的設備可能長期不能使用總線。
計時器定時查詢
總線上的任一設備要求使用總線時,通過BR線發出總線請求。中央仲裁器接到請求信號以后,在BS線為“0”的情況下讓計數器開始計數,計數值通過一組地址線發向各設備。每個設備接口都有一個設備地址判別電路,當地址線上的計數值與請求總線的設備地址相一致時,該設備 置“1”BS線,獲得了總線使用權,此時中止計數查詢。
每次計數可以從“0”開始,也可以從中止點開始。如果從“0”開始,各設備的優先次序與鏈式查詢法相同,優先級的順序是固定的。如果從中止點開始,則每個設備使用總線的優先級相等。
計數器的初值也可用程序來設置,這可以方便地改變優先次序,但這種靈活性是以增加線數為代價的。
獨立請求
每一個共享總線的設備均有一對總線請求線BRi和總線授權線BGi。當設備要求使用總線時,便發出該設備的請求信號。中央仲裁器中的排隊電路決定首先響應哪個設備的請求,給設備以授權信號BGi。
獨立請求方式的優點:響應時間快,確定優先響應的設備所花費的時間少,用不著一個設備接一個設備地查詢。其次,對優先次序的控制相當靈活,可以預先固定也可以通過程序來改變優先次序;還可以用屏蔽(禁止)某個請求的辦法,不響應來自無效設備的請求。
缺點:設備連線多,總線控制復雜。
輸入輸出設備
常見的輸入輸出設備
鼠標、鍵盤、掃描儀、顯示器等。
輸入輸出接口的通用設計
數據線
是I/O設備與主機之間進行數據交換的傳送線
單向傳輸數據線
雙向傳輸數據線
狀態線
IO設備狀態向主機報告的信號線
查詢設備是否已經正常連接并就緒
查詢設備是否已經被占用
命令線
CPU向設備發送命令的信號線
發送讀寫信號
發送啟動停止信號
設備選擇線
主機選擇I/O設備進行操作的信號線
對連在總線上的設備進行選擇
CPU與IO設備的通信
CPU和IO設備的速度是不一致的
程序中斷
提供低速設備通知CPU的一種異步的方式,CPU可以高速運轉同時兼顧低速設備的響應。
當外圍IO設備準備就緒時,向CPU發送中斷信號,CPU內部有專門的電路響應中斷信號,CPU收到中斷信號后就會中斷當前工作轉為處理外圍設備的工作。待工作完成后,CPU加載之前的工作,繼續處理。
DMA(直接存儲器訪問)
當主存與IO設備交換信息時,不需要中斷CPU,可以提高CPU的效率。一般計算機的硬盤與顯卡都有DMA設備。
存儲器
存儲器的分類
存儲器的層次結構
緩存-主存層次
利用了局部性原理,在CPU和主存之間增加了一層速度快(容量小)的Cache,目的是為了解決主存速度不足的問題。
將程序經常訪問的內存置換到高速緩存即可。
局部性原理
局部性原理是指CPU訪問存儲器時,無論是存取指令 還是存取數據,所訪問的存儲單元都趨于聚集在一個 較小的連續區域中。
主存-輔存層次
利用了局部性原理,在主存之外增加輔助存儲器,目的是解決主存容量不足的問題。
將程序當前使用的數據加載到主存,不使用的數據加載到輔存。
主存儲器與輔存儲器
主存
RAM(隨機存取存儲器:Random Access Memory)
RAM通過電容存儲數據,必須隔一段時間刷新一次
如果掉電,那么一段時間后將丟失所有數據
32位系統主存大小為:2^32 =4×2^30 =4????
64位系統主存大小為:2^64 = 234 × 2^30 = 2^34????
輔存
表面是可磁化的硬磁特性材料
移動磁頭徑向運動讀取磁道信息
磁盤調度算法
先來先服務算法 :按順序訪問進程的磁道讀寫需求
最短尋道時間優先:與磁頭當前位置有關,優先訪問離磁頭最近的磁道
掃描算法(電梯算法) :每次只往一個方向移動,到達一個方向需要服務的盡頭再反方向移動
循環掃描算法:每次只往一個方向移動,到盡頭后回到初始位繼續掃描
高速緩存
在存儲器的層次結構中,高速緩存在CPU和主存之間,主要是為了解決CPU和主存速度不匹配的問題。
高速緩存的工作原理
在往下看之前,先了解下下面的概念:
字: 指存放在一個存儲單元中的二進制代碼組合
字塊:存儲在連續存儲單元中而被看作是一個單元的一組字
假設一個字有32位,一個字塊有A個字,主存共有B個字塊
那么:主存總字數 = A * B ,主存總容量(bits) = A * B * 32
高速緩存的結構和主存類似,但是主存的容量是遠大于緩存的容量。
緩存中存儲的數據是主存中的一份復制,當CPU需要的數據在緩存中,直接從緩存里拿,當CPU需要的數據不在緩存中,則需要從主存里拿。
所以就有了兩個量化指標:
命中率:命中緩存的次數占CPU訪問次數的比例
訪問效率:訪問緩存時間和訪問緩存-主存平均時間之比
高速緩存的替換策略
當CPU所需要的數據不在高速緩存中時,就需要從主存載入數據到高速緩存。一般有四種替換策略。
隨機算法
隨機選取高速緩存中的一個位置再替換
先進先出算法(FIFO)
把高速緩存看做是一個先進先出的隊列,優先替換最先進入隊列的字塊
最不經常使用算法(LFU)
優先淘汰最不經常使用的字塊,需要額外的空間記錄字塊的使用頻率
最近最少使用算法(LRU)
優先淘汰一段時間內沒有使用的字塊
有多種實現方法,一般使用雙向鏈表,把當前訪問節點置于鏈表前面(保證鏈表頭部節點是最近使用的)