面試常見問題——計算機組成原理(一)
目錄:
- Cache和寄存器、虛擬存儲器的區別
- 計算機組成有哪些
- CISC和RISC
- 數據尋址方式
- 指令流水線
- 中斷處理流程
- DMA和中斷的區別
1、Cache和寄存器、虛擬存儲器的區別
- 定義:
- Cache定義:
- 利用程序訪問的局部性原理,把程序中正在使用的部分存放在一個高速的、容量較小的臨時存儲器中,可用SRAM實現,使CPU的訪存操作大多針對Cache進行,從而大大提高程序的執行速度。
- 引入目的:解決CPU和主存之間運算速度的差異。
- 寄存器定義:
- 寄存器是中央處理器內的組成部分。寄存器是有限存儲容量的高速存儲部件,它們可用來暫存指令、數據和位址。在控制器中,包含的寄存器有指令寄存器(IR)、程序計數器(PC)、指令譯碼器(ID)等。在運算器中,包含的寄存器主要有累加寄存器(ACC)、暫存寄存器、程序狀態字寄存器(PSW)。
- 虛擬存儲器定義:
- 將主存或輔存的地址空間統一編址,從邏輯上對內存容量加以擴存。
- 引入目的:解決主存不足的問題。
- 依據:程序訪問的局部性原理
- 通常採用相聯存儲器,可按內容、按地址訪問。
- 實現技術:
- 請求分頁存儲管理
- 請求分段存儲管理
- 請求段頁式存儲管理
- Cache定義:
- 存儲器分層體系結構中,存儲器速度由快到慢依次爲寄存器、Cache、主存、輔存。
- 虛擬存儲器和Cache的對比:
- 相同點:
- 都把數據劃分爲塊,並作爲基本的傳輸單位。
- 都有地址的映射、替換算法、更新策略等問題。
- Cache替換算法:
- RAND(隨機算法):隨機地確定替換的Cache塊
- FIFO(先進先出):選擇最早調入的存儲行進行替換
- LRU(最近最少使用):選擇最近最久未被訪問的存儲行進行替換
- LFU(最不經常使用):將一段時間內被訪問次數最少的存儲行進行替換
- 虛擬存儲器替換算法:
- OPT(最佳頁面替換算法,OPTimal replacement):選擇以後不再使用的頁面進行替換(目前無法實現)
- FIFO(先進先出):選擇最早進入內存的頁面進行替換。可能出現Belady異常,即所分配的物理塊數增大而缺頁數也增大
- LRU(最近最少使用):選擇最近最久未使用的頁面進行替換
- CLOCK(時鐘置換算法,也稱爲最近未用算法Not Recently Used,NRU):選擇最近未使用的頁面進行替換
- 改進型CLOCK:除了使用位,增加修改位,置換順序如下:
- 未訪問,未修改
- 未訪問,已修改
- 已訪問,未修改
- 已訪問,已修改
- 虛擬存儲器頁面更新策略:
- 固定分配局部置換
- 可變分配局部置換
- 可變分配全局置換
- Cache替換算法:
- 都依據程序訪問的局部性原理,應用快速緩存的思想,將相對活躍的數據放在相對高速的部件中。
- 不同點:
- 解決問題不同。Cache主要解決系統速度;虛擬存儲器主要解決主存容量。
- 實現方式不同。Cache全部由硬件實現;虛擬存儲器由操作系統和硬件共同實現,是邏輯上的存儲器。
- 不命中時性能影響不同。虛擬存儲器系統不命中時對系統影響性能更大。
- 能否與CPU直接通信。Cache不命中時,主存能與CPU直接通信,同時將數據調入Cache;虛擬存儲器系統不命中時,只能先由磁盤調入主存,而不能直接和CPU通信。
- 相同點:
- 一些定義:
- 程序訪問的局部性原理:
- 時間局部性:程序中某條指令一旦執行,不久後該指令可能再次執行;某數據被訪問過,不久後該數據可能再次被訪問。因爲程序存在循環。
- 空間局部性:一旦程序訪問了某個存儲單元,不久後,其附近的存儲單元也將被訪問。因爲指令通常是順序存放,順序執行的,數據一般也是以向量,數組,表等形式聚集地存儲在一起的。
- 虛地址(邏輯地址):用戶編程允許涉及的地址
- 實地址(物理地址):實際的主存單元
- 虛擬存儲器工作流程:
- 由硬件對虛地址和實地址之間進行映射,並判斷這個虛地址對應的存儲單元內容是否已裝入主存。
- 若已在主存中,則通過地址轉換,CPU可訪問主存指示的實際單元。
- 若不在主存中,則把包含這個字的一頁或一段調入主存後再由CPU訪問。若主存已滿,則採用替換算法置換主存中的一段或一頁。
- Cache工作流程:
- 當Cache發出讀請求時,若訪存地址在Cache中命中,就將此地址轉換成Cache地址,直接對Cache進行讀操作,不訪問主存。
- 若Cache不命中,則需要訪問主存,並把此字所在的塊一次性地從主存調入Cache。若Cache已滿,則採用替換算法置換Cache塊中原來某塊的信息。
- 程序訪問的局部性原理:
2、計算機組成有哪些
- 根據馮諾依曼體系中存儲程序的思想:
- 計算機硬件系統由運算器、存儲器、控制器、輸入設備和輸出設備組成。
- 指令和數據以二進制代碼表示,存儲在存儲器中,可以按地址訪問。
- 指令由操作碼、地址碼組成,操作碼用來表示操作的性質,地址碼用來表示操作數在存儲器中的位置。
- 指令在存儲器中按順序存放。
- 運算器:接收從控制器傳來的命令,對數據進行加工處理,完成算術運算和邏輯運算,核心是算術邏輯單元(ALU)
- 算術邏輯單元(ALU):算術 / 邏輯運算
- 累加寄存器(ACC):用於暫時存放ALU運算的結果,可作爲加法運算的一個輸入
- 暫存寄存器:暫存從主存讀來的數據
- 乘商寄存器(MQ)
- 操作數寄存器(X)
- 變址寄存器(IX)
- 基址寄存器(BR)
- 程序狀態字寄存器(PSW):保留由算術邏輯運算指令或測試指令的結果而建立的各種狀態信息。PSW中的位參與並決定微操作的形成
- 溢出標誌(OF)
- 符號標誌(SF)
- 零標誌(ZF)
- 進位標誌(CF)
- 移位器:移位計算
- 通用寄存器組:存放操作數(包括源操作數、目的操作數、中間結果)和各種地址信息等
- 存儲器:用來存放程序和數據
- 主存儲器(內存)
- 存儲器地址寄存器(MAR):用於存放所要訪問的主存單元的地址。
- 存儲器數據寄存器(MDR):用於存放向主存寫入的信息或從主存讀出的信息。
- 輔存儲器(外存)
- 主存儲器(內存)
- 控制器:執行指令,控制各部件自動協調地進行工作
- 程序計數器(PC):指出下一條指令在主存中的存放地址
- 指令寄存器(IR):保存當前正在執行的指令
- 指令譯碼器:對操作碼字段進行譯碼,向控制器提供特殊的操作信號
- 時序系統:產生各種時序信號,由統一時鐘(CLOCK)分頻得到
- 微操作信號發生器:根據IR中的指令,PSW的狀態信息及時序信號,產生控制整個計算機各部件要用到的控制信號。
- 輸入設備:將程序和數據以機器所能識別和接受的信息形式輸入到計算機
- 輸出設備:將計算機的處理結果以某些形式輸出
3、CISC和RISC
- CISC:複雜指令系統計算機,指令數目多,字長不固定,尋址方式多,寄存器數量少,一般爲微程序控制。
- RISC:精簡指令系統計算機,指令數目少,字長固定,尋址方式少,寄存器數量多,一般爲組合邏輯控制。
4、數據尋址方式
- 數據尋址:格式爲:操作碼 + 尋址特徵 + 形式地址A
- 常見的數據尋址方式:
- 隱含尋址:不顯式的給出第二操作數的地址,規定累加器作爲第二操作數地址
- 立即(數)尋址:地址字段存放操作數本身,數據以補碼形式存放
- 直接尋址:形式地址A即爲操作數的有效地址EA
- 間接尋址:形式地址是操作數有效地址所在的存儲單元的地址
- 寄存器尋址:在指令字中直接給出操作數所在的寄存器編號,操作數在寄存器中
- 寄存器間接尋址:在指令字中給出操作數所在的寄存器編號,寄存器中給出的是操作數所在主存單元的地址
- 相對尋址:程序計數器PC的內容加上指令格式中的形式地址而形成操作數的有效地址,廣泛應用於轉移指令
- 基址尋址:基址寄存器BR的內容加上指令格式中的形式地址而形成操作數的有效地址,利於多道程序設計,可用於編制浮動程序
- 變址尋址:變址寄存器IX的內容加上指令格式中的形式地址而形成操作數的有效地址,適用於編制循環程序,處理數組問題
- 基址寄存器的內容由操作系統確定,值不可變,指令字的形式地址可變
- 變址寄存器的內容由用戶確定,值可變,指令字的形式地址不可變
- 堆棧尋址:從規定的堆棧中取出操作數
5、指令流水線
- 定義:將指令的執行過程分爲多個階段,每個階段與其他階段並行執行。
- 指令的執行階段:
- 取指(Instruction Fetch,IF):根據PC內容訪問主存,取出一條指令送到IR中。
- 譯碼(Instruction Decode,ID):指令譯碼器按照預定的指令格式,對取回的指令進行拆分和解釋,識別區分出不同的指令類別以及各種獲取操作數的方法。
- 執行(Execute,EX):根據操作碼字段,完成指令規定的功能。
- 訪存(Memory,MEM):根據指令地址碼,得到操作數在主存中的地址,並從主存中讀取該操作數用於運算。
- 寫回(Writeback,WB):把執行指令階段的運行結果數據寫回到某種存儲形式。
- 影響流水線的因素:
- 結構相關(資源衝突):多條指令在同一時刻爭用同一資源而形成的衝突。
- 解決方法:
- 後面的指令暫停一個時鐘週期
- 單獨設置數據存儲器和指令存儲器
- 解決方法:
- 數據相關(數據衝突):必須等前一條指令執行完才能執行後一條指令的情況。
- 解決方法:
- 數據旁路技術:設置相關專用通路,把前一條指令的ALU的計算結果作爲自己的輸入數據開始計算過程。
- 指令編譯優化,調整指令順序。
- 硬件阻塞,軟件插入“NOP”指令。
- 解決方法:
- 控制相關(控制衝突):遇到轉移指令和其他改變PC值的指令而造成斷流。
- 解決方法:
- 提前預測,和提高預測準確率。
- 解決方法:
- 結構相關(資源衝突):多條指令在同一時刻爭用同一資源而形成的衝突。
- 流水線的性能指標:
- 吞吐率(TP)
- 加速比(S)
- 效率(E)
6、中斷處理流程
- 一些定義:
- 中斷分類:
- 按照中斷源的類別:
- 內中斷:處理器和內存內部產生的中斷,如地址非法、校驗錯、存取訪問控制錯、算術操作溢出、數據格式非法、除數爲零、非法指令、用戶程序執行特權指令、分時系統的時間片中斷、用戶態到核心態的切換等
- 外中斷:處理器和內存外部產生的中斷,如I/O中斷等
- 按照軟硬件:
- 軟件中斷(內中斷):通過某條指令產生的中斷
- 硬件中斷(外中斷):通過外部的硬件產生的中斷
- 按照是否可屏蔽:
- 可屏蔽中斷(外中斷):在關中斷情況下不接受中斷請求
- 非屏蔽中斷(外中斷):在關中斷情況下可以接受中斷請求
- 按照中斷源的類別:
- 中斷隱指令(硬件直接實現):
- 關中斷(保護中斷現場,即CPU主要寄存器中的內容不被新的中斷打斷)
- 保存斷點(即保存程序計數器中的內容)
- 引出中斷服務程序(取出中斷服務程序的入口地址並傳送給程序計數器PC)
- 中斷屏蔽技術:在處理中斷時,用中斷屏蔽字屏蔽掉某些中斷源。
- 中斷分類:
- 處理流程如下:
- 發送中斷請求:中斷源向CPU發送中斷請求信號。
- 進行中斷判優:中斷系統在任意一個瞬間只能響應一箇中斷源的請求。
- 硬件中斷 > 軟件中斷
- 非屏蔽中斷 > 可屏蔽中斷
- DMA > I/O設備
- 高速設備 > 低速設備
- 輸入設備 > 輸出設備
- 實時設備 > 普通設備
- 執行中斷隱指令:
- 關中斷
- 保存斷點
- 引出中斷服務程序
- 保存現場和屏蔽字:現場信息一般指程序狀態字和中斷屏蔽寄存器等
- 執行中斷服務程序,進行中斷事件處理
- 恢復現場和屏蔽字:將現場和屏蔽字狀態恢復到原來的狀態
- 開中斷:允許其他中斷得到響應
- 中斷返回:執行中斷返回指令,使其返回到原程序的斷點處,以便繼續執行原程序
7、DMA和中斷的區別
- I/O方式:
- 程序查詢方式(軟件):由程序不斷的查詢外設的狀態,直到外設準備就緒
- 程序中斷方式:在計算機執行現行程序的過程中,出現某些急需處理的異常情況或特殊請求,CPU暫時中止現行程序,而轉去對這些異常情況或特殊請求進行處理,在處理完畢後CPU又自動返回到現行程序的斷點處,繼續執行原程序。
- DMA:在外設和主存之間開闢一條直接數據通道,信息傳送不再經過CPU,降低CPU在傳送數據時的開銷,不必中斷現行程序,I/O與主機並行工作,程序和傳送並行工作。
- 通道:輸入/輸出通道是一個獨立於CPU的,專門管理I/O的處理機,它控制設備與主存直接進行數據交換。
- DMA傳送過程:
- 預處理:完成寄存器置初始值之類的準備工作。
- 數據傳送:佔用總線傳輸數據,數據傳送完全由DMA控制。
- 後處理:CPU執行中斷服務程序做結束DMA處理。
- DMA和中斷的區別:
- 中斷是程序的切換,需要保護和恢復現場;DMA除了預處理和後處理,其他時候不佔用CPU的任何資源。
- 對中斷請求的響應只能發生在指令的執行週期後;對DMA請求的響應可以發生在取指週期、間址週期、執行週期後,只要CPU不佔用總線就可被響應。
- 中斷傳送過程需要CPU的干預;DMA傳送過程不需要CPU的干預。
- DMA請求的優先級高於中斷請求。
- 中斷方式靠程序傳送,DMA方式靠硬件傳送。
參考文獻:
[1]王道論壇. 2020計算機組成原理考研複習指導. [M]北京:電子工業出版社,2019.1;