一、概述
計算機系統的組成
硬件系統和軟件系統共同構成了一個完整的計算機系統。
馮諾依曼機的特點
1)計算機由運算器、存儲器、控制器、輸入設備和輸出設備五大部分組成;
2)指令和數據存儲在存儲器中,並可以按地址訪問;
3)指令和數據均以二進制表示;
4)指令由操作碼和地址碼構成,操作碼指明操作的性質,地址碼錶示操作數在存儲器中的位置;
5)指令在存儲器內按順序存放,通常按自動的順序取出執行;
6)機器以運算器爲中心,I/O設備與存儲器交換數據也要通過運算器。(因此,後來有了以存儲器爲中心的計算機結構)
現代計算機的組成框圖
由於運算器和控制器在邏輯關係和電路結構上聯繫十分緊密,通常將它們合起來統稱爲中央處理器,簡稱CPU,把輸入輸出設備簡稱爲I/O設備,這樣現代計算機可以認爲由三大部分組成:CPU與主存儲器可以稱爲主機,I/O設備稱爲外部設備,結構圖如下
關於存儲器相關概念
存儲器的功能:
存儲器是計算機系統中的記憶設備,用來存放程序(指令)和數據(二進制代碼形式存放)。
存儲器中最小單位就是存儲元,可以存儲一個二進制代碼(0或1),即1個 bit
什麼是存儲單元、存儲字、存儲字長、存儲體?
存儲單元:存儲一個存儲字並具有特定存儲地址的存儲單位;
存儲字:一個存儲單元中存放的所有的二進制數據,按照某個地址訪問某個存儲單元獲取的二進制數據。
存儲字長:存儲字中二進制數據的位數,即按照某個地址訪問某個存儲單元獲取的二進制數據的位數;
存儲體:由多個存儲單元構成的存儲器件。
什麼是機器字長,指令字長和存儲字長?
機器字長:CPU一次能夠處理的二進制數據的位數。
存儲字長:一個存儲單元存儲二進制代碼的長度。
指令字長:一個指令字中包含二進制代碼的位數。
主存儲器中,什麼是MAR,什麼是MDR,存儲器的最大容量由什麼決定?
1)MAR:存儲地址寄存器,保存需要訪問的存儲單元地址。反映存儲單元的個數。
2)MDR:存儲數據寄存器,緩存讀出/寫入存儲單元的數據。反映存儲字長。
3)存儲器的最大容量由MAR寄存器的位數和MDR寄存器的位數決定。
CPU如何區分當前讀取的是指令還是數據?
根據時間判斷,當前工作時間是在取指階段,從內存中讀取出來的一定是指令,當前工作時間是在執行階段,從內存中讀取出來的一定是數據。
一條指令在CPU的執行過程
幾乎所有的馮·諾伊曼型計算機的CPU,其工作都可以分爲5個階段:
取指令 --> 指令譯碼 --> 執行指令 --> 訪存取數 --> 結果寫回
1.取指令階段
取指令(Instruction Fetch,IF)階段是將一條指令從主存中取到指令寄存器的過程。
程序計數器PC中的數值,用來指示當前指令在主存中的位置。當一條指令被取出後,PC中的數值將根據指令字長度而自動遞增。
//PC -> AR -> Memory
//Memory -> IR
2.指令譯碼階段
取出指令後,計算機立即進入指令譯碼(Instruction Decode,ID)階段。
在指令譯碼階段,指令譯碼器按照預定的指令格式,對取回的指令進行拆分和解釋,識別區分出不同的指令類別以及各種獲取操作數的方法。
// { 1.Ad
//Memory -> IR -> ID -> { 2.PC變化
// { 3.CU(Control Unit)
3.訪存取數階段
根據指令需要,有可能要訪問主存,讀取操作數,這樣就進入了訪存取數(Memory,MEM)階段。
此階段的任務是:根據指令地址碼,得到操作數在主存中的地址,並從主存中讀取該操作數用於運算。
//Ad -> AR -> AD -> Memory
4.執行指令階段
執行指令(Execute,EX)階段,此階段的任務是完成指令所規定的各種操作,具體實現指令的功能。爲此,CPU的不同部分被連接起來,以執行所需的操作。
//Memory -> DR -> ALU
5.結果寫回階段
結果寫回(Writeback,WB)階段把執行指令階段的運行結果數據“寫回”到內存中。
//DR -> Memory
6.循環階段
在指令執行完畢、結果數據寫回之後,若無意外事件(如結果溢出等)發生,計算機就接着從程序計數器PC中取得下一條指令地址,開始新一輪的循環,下一個指令週期將順序取出下一條指令。
//重複 1~5
//遇hlt(holt on)停止
性能指標
主頻 CPU工作主時鐘的頻率,機器主頻Rc
CPI 執行一條指令所需時鐘週期數
MIPS 每秒執行多少百萬條指令
FLOPS 每秒執行多少次浮點運算
時鐘週期 節拍脈衝,CPU中最小的時間單位
二、數據的表示和運算
數制與編碼
數值
BCD碼
8421碼:本質就是十六進制
加法修正:
大於(1010)_2的時候需要加6修正
(1010)_2到(1111)_2爲無效碼
字符和字符串
-
ASCII碼:
有7位,用一個字節可以表示(最高位不用,爲0)
-
字符串的存放(大端,小端)
大端模式:是指數據的低位保存在內存的高地址中,而數據的高位,保存在內存的低地址中;(符合人的正常思維)
一個字節一個字節的倒着放。(注:一個字節=2位16進制=8位2進制)
小端模式:是指數據的低位保存在內存的低地址中,而數據的高位保存在內存的高地址中。
常用校驗碼
-
奇偶校驗碼
奇校驗碼:整個校驗碼(有效位和信息位)中“1”的個數爲奇數 偶校驗碼:整個校驗碼(有效位和信息位)中“1”的個數爲偶數 優缺點:只能檢錯,不能糾錯
-
海明(漢明)校驗碼
分組多個校驗位 優缺點:能發現2位錯誤,糾正一位錯誤
-
循環冗餘校驗(CRC)碼
K位信息位後再拼接R位的校驗碼,整個編碼長度爲N位 優缺點:可以糾正一位或多位錯誤(與多項式的選取有關
定點數
定點數:小數點固定在某個位置上的數據。 就好像 0.0000001 ,0.0001111;
二進制的原碼,反碼及補碼
原碼
例如:
X=+101011 , [X]原= 0010_1011
X=-101011 , [X]原= 1010_1011
位數不夠的用0補全。
PS:正數的原、反、補碼都一樣,0的原碼跟反碼都有兩個,因爲這裏0被分爲+0和-0。
反碼
例如:
X=-101011 , [X]原= 1010_1011 ,[X]反=1101_0100
補碼
例如:
X=-101011 , [X]原= 1010_1011 ,[X]反=1101_0100,[X]補=1101_0101
PS:0的補碼是唯一的,如果機器字長爲8那麼[0]補=0000_0000。
除此之外,還可以用 [1000_0000]補 表示-128:
(-1) + (-127) = [1000_0001]原 + [1111_1111]原 = [1111_1111]補 + [1000_0001]補 = [1000_0000]補
-1-127的結果應該是-128,在用補碼運算的結果中, [1000_0000]補 就代表-128。
注意,-128並沒有原碼和反碼錶示。
使用補碼不僅僅修復了0的符號以及存在兩個編碼的問題,而且還能夠多表示一個最低數,這就是爲什麼8位二進制使用原碼或反碼錶示的範圍爲 [-127, +127],而使用補碼錶示的範圍爲 [-128, 127] 的原因。
移碼
移碼最簡單了,不管正負數,只要將其補碼的符號位取反即可。
例如:
X=-101011 , [X]原= 1010_1011 ,[X]反=1101_0100,[X]補=1101_0101,[X]移=0101_0101
浮點數
小數點位置可以浮動的數據。就像數學中的 1222.2103也可以表示爲1.2222106;
IEEE754表示浮點數
EEE754標準包含一組實數的二進制表示法。它有三部分組成:
- 符號位
- 指數位
- 尾數位
三種精度的浮點數各個部分位數如下:
IEEE 754標準中定義浮點數的表示範圍爲:
單精度浮點數
± (2-2-23) × 2127
雙精度浮點數
± (2-2-52) × 21023
三、存儲系統
存儲器分類
按在計算機中的作用分類
(1)主存
(a)RAM:操作系統被加載到RAM
SRAM:(Static Random Access Memory)靜態隨機存儲器。常用製作二級緩存。不必刷新電路就能保存數據。但體積大,集成度低
DRAM:(Dynamic Random Access Memory)動態隨機存取存儲器。常用語製作系統內存。DRAM用電容存儲數據,需要定時充電,刷新電路,否則出處的數據丟失。集成度高
(b)ROM:存儲機器自檢和引導程序,BIOS等程序
MROM:(Mask Read-Only Memory)掩模式只讀存儲器。MROM的內容在出廠前一次寫入,之後不能更改
PROM:(Programmable Read-Only Memory)-可編程只讀存儲器。只能寫入一次數據的只讀存儲器,寫入錯誤只能更換存儲芯片
EPROM:(Erasable Programmable Read Only Memory)可擦除可編程只讀寄存器
EEPROM: (Electrically Erasable Programmable Read-Only Memory),電可擦可編程只讀存儲器。SSD
(2)輔存
磁盤,磁帶,光盤
存儲器的存儲結構
主存中存儲單元地址的分配
(1)尋址的個數有2個因素:
(a)地址線的個數:這是內存中總的可尋址字節數
(b)一個地址所佔用的字節數:表明了一個內存單元,佔用多少個字節
(2)內存可尋址的總字節數 ÷ 多少字節形成一個內存單元=可尋址數
(3)eg:地址線24根,按字節尋址,可尋址224=16M224=16M個
若字長爲16位,按字尋址,可尋址8M個
若字長爲32位,按字尋址,可尋址4M個
主存的指標
(1)存儲容量:存放二進制代碼的總位數。存儲字數\times字長
(2)存取速度:數據的寬度/存取週期
存取時間:存儲器的訪問時間(讀出時間,寫入時間)
存取週期:連續兩次獨立的讀寫存儲器操作之間,最小的時間間隔。用於讀電路,寫電路,地址電路清空一次
(3)存儲器帶寬 (位/秒)
半導體隨機存儲器
SRAM
(1)SRAM:靜態隨機存儲器,不用刷新電路,使用雙穩態管存儲數據,不掉電情況下數據存在。
(2)SRAM基本電路
DRAM
(1)DRAM:動態隨機存儲器,定時刷新電路,使用電容存儲數據,不掉電情況下也需要定時對電容充電。
(2)DRAM的存儲矩陣是二維的,有行有列。所以要對行和列進行片選。行列片選的片選片進行復用,即同一個針腳,先選擇行,後選擇列。
(3)動態RAM刷新 (刷新與行地址有關:默認數據能保持2ms)
(a)集中刷新(存取週期0.5μs)
集中刷新是一次刷新存儲矩陣中所有的存儲單元。即,在數據能保持的這2ms內,分爲能讀寫的週期時間,和不能讀寫的電路刷新時間。這個刷新時間,也稱爲"死區“。
(b)分散刷新(存取週期爲1μs)
分散刷新是,在每次讀寫數據後,立刻刷新該行存儲矩陣。即一個存取週期=讀寫時間+電路刷新時間。而讀寫時間等於電路刷新時間,所以,1個存取週期等於2個讀寫時間,爲2*0.5=1μsμs。
分散刷新不存在死區,但是使得一次存取時間變成原來的2倍
(c)異步刷新
異步刷新不在一次刷新所有行,也不再每次讀寫後立刻刷新,而是保證在2ms內,每一行得到刷新即可。所以其死區時間爲0.5μs。如果將刷新安排在指令譯碼階段,則不會有死區時間(指令譯碼階段,不產生cpu去內存的io)
主存與CPU的連接
存儲容量的擴展
(1)位擴展
(2)字擴展(增加存儲字的數量)
(3)字位擴展
連線
數據總線(連着CPU MDR)
讀/寫控制線(CPU控制主存)
地址總線(連着CPU MAR,CPU提供主存地址)
存取速度的提升
雙端口RAM
存儲器有兩個獨立的端口,兩組線,可以異步的被使用。
訪問衝突:
同時 同一地址 寫入 會發生寫入錯誤
同時 同一地址 一寫一讀 會發生讀出錯誤
解決訪問衝突:
BUSY#信號
多模塊存儲器
單體多字
一個存取週期取出連續的多個字
優缺點:連續存取速度快,但是必須是連續的。
多體並行
多個存儲體獨立工作
優缺點:不同的請求源可以請求不同的存儲體。
- 高位交叉編址(順序存儲)
高位作爲選擇存儲體的信號,低位是體內地址。
優缺點:有利於存儲器的擴充。 - 低位交叉編址(交叉存儲)
低位作爲選擇存儲體的信號,高位是體內地址。
優缺點:連續讀取速度快,大大增加了儲存器的帶寬。
可能的訪存衝突 如果相鄰的訪問序列中(體數個相鄰),儲存體體號相同。
Cache
引入目的:解決主機與CPU在速度上的矛盾。
利用局部性原理
- 空間局部
- 時間局部
工作原理
(1)主存單位稱爲塊,cache稱爲行,實質是一個東西
(2)CPU讀主存時,把地址同時送給cache和主存,cache通過地址查看此字是否在cache中,若在則立即傳送給cpu。若不在,則用主存讀週期把此字從主存中讀出送到cpu,與此同時,把含有此字的整個數據塊從主存讀出送到cache的行中。
Cache層次結構
(1)cache是分層次的:L1 cache,L2 cache,L3 cache。
(2)寄存器取值時,先從L1取,去不到則向下層的L2 cache取,L2再取不到,去內存取。
(3)每個核心享有獨自的L1 cache和L2 cache,所有核心共享L3 cache。 L1,L2cache是片內cache
(4)L1 cache分爲L1P和L1D,分開存儲指令和數據。使指令和數據可以同時讀取
現代CPU多級Cache的策略
按離CPU遠近命名爲 L1 Cache,L2 Cache,L3 Cache
L1最近
L1對L2使用全寫法,L2對主存使用寫回法
cache與內存的映射關係(讀方式)
(1)全關聯:full associative cache
主存中的字塊可以被映射到任意Cache塊
(2)直接映射:Direct Associated Cache
一個Cache快對應多個主存塊
(3)組相聯:Set Associated Cache
將Cache塊分組,組件是直接映射,組內是全相聯映射。
Cache中主存塊的替換算法
- 隨機算法
實現簡單,沒有依據局部性原理,可能命中率較低。
- 先進先出算法
比較容易實現,也沒有依據局部性原理,可能會吧需要經常使用的快替換掉。(比如循環程序)
- 近期最少用算法
依據了局部性原理,平均命中率比FIFO高,是堆棧類算法。
- 最不經常使用算法
採用計數器,每次替換計數最小的。
虛擬存儲器
虛地址 (邏輯地址) 實地址 (物理地址)
主存地址空間 (實地址空間) 虛擬空間 (程序空間)
頁式虛擬存儲器
虛擬地址結構
虛頁號+頁內地址
頁表
頁表基址寄存器:存放頁表的起始地址
頁錶行:虛頁號,裝入位,實頁號
地址映射過程
- 取出頁表基址寄存器裏的頁表起始地址。
- 根據頁表起始地址加上虛頁號在頁表裏面找到對應的實頁號。
- 頁表裏裝入位表示該頁是否已裝入,未裝入則需裝入。
- 實頁號拼接上頁內地址就是物理地址。
優缺點
要查表,增加了訪問主存次數。
長度固定,頁表簡單,調入方便。
頁面不可能完全被利用,空間浪費。
段式虛擬存儲器
虛擬地址結構
段號+段內地址
段表
段表基址寄存器:存放段表起始地址
段錶行:段號、裝入位、段起點、段長
地址映射過程
- 根據段號與段表起始地址得到對應的段錶行。
- 根據裝入位判斷是否已裝入。
- 段起點+段內地址=物理地址
段頁式虛擬存儲器
程序分段,段的基本單位是頁
虛擬地址結構
段號+段內頁號+頁內地址
地址映射過程
根據段號得到段錶行,段錶行取出頁表起始地址,與段內頁號一起得到頁錶行,從頁錶行中取出實頁號,與頁內地址拼接爲物理地址。
置換算法
- OPT:選擇以後不用的頁面
- FIFO:選擇最先裝入的頁面
- LRU:選擇最近最久未用的頁面
- CLOCK:選擇最近未用的頁面
- 改進型CLOCK:考慮頁面修改問題
快表TLB
虛擬存儲器中總是要查表,使用高速的緩衝區存儲經常訪問的頁對應的頁表項,就是快表。以前的表(在內存中)叫做慢表(Page)。
快表根據內容指定地址,使用相聯存儲器。
查找時,快錶慢表一起工作,快表找到慢表的工作就作廢。
命中的關係
Cache命中,Page必然命中
Cache命中,說明有主存地址了,必然被調入主存了
TLB命中,Page必然命中
TLB是Page的子集
Page不命中,Cache和TLB不會命中
Page不命中則沒有調入主存,沒有主存地址Cache不會命中
地址翻譯:TLB --> 頁表 --> Cache --> 主存 --> 外存
四、指令系統
指令格式
基本格式
操作碼+地址碼
操作碼
- 指出指令執行什麼操作
- 提供區分地址碼組成信息
地址碼
被操作的數的地址
指令尋址方式
採用不同尋址方式的目的
縮短指令字長,擴大尋址空間,提高編程靈活性。
指令尋址
- 順序尋址
- 跳躍尋址
數據尋址
與數據有關的尋址方式劃分爲三類:立即尋址方式,寄存器尋址方式,存儲器尋址方式。
可以劃分爲下列與數據有關的尋址方式:
- 隱含尋址
- 立即尋址(Immediate addressing)
- 間接尋址
- 直接尋址(Direct addressing)
- 寄存器尋址
- 寄存器間接尋址
- 相對尋址
- 基址尋址
- 變址尋址
CISC與RISC
CISC和RISC的比較
CISC
設置更復雜的新指令來實現軟件功能的硬化。
主要特點
- 指令複雜,數目多
- 指令長度不固定,指令格式多,尋址方式多
- 可以訪存的指令不受限制
- 各種指令使用頻率相差大(2-8定律)
- 各種指令執行時間相差大,大多數指令需要多個時鐘週期
- 控制器大多采用微程序控制
- 難以優化爲高效的程序
RISC
減少指令種類,簡化指令功能,從而提高指令的執行速度。
主要特點
- 選取使用頻率最高的簡單指令,複雜指令功能由簡單指令組合來實現
- 指令長度固定,指令格式種類少,尋址方式少
- 只有Load/Store 指令訪存,其餘指令的操作都在寄存器之間進行
- CPU中寄存器數量多
- 一定使用指令流水線技術,大部分指令在一個時鐘週期內完成
- 以硬佈線控制爲主,不用或少用微程序控制
- 特別重視編譯優化,以減少程序執行時間
五、中央處理器
基本結構
運算器:對數據進行加工和處理
控制器:發出每條指令對應的操作序列對計算機進行控制
指令的執行
指令週期
- 取址週期
- 間址週期
- 執行週期
- 中斷週期
三種週期
- 指令週期:
(1)指令從取指,分析指令,到執行完成的全過程所需的全部時間。
(2)有時指令週期還包括間指週期(間接尋址訪問主存)和中斷週期(響應中斷)
(3)執行完指令後才能進入中斷週期,響應中斷 - 機器週期:
(1)通常把一個指令週期劃分爲若干個機器週期,每個機器週期完成一個基本操作
(2)不同的指令包含不同個數的機器週期
(3)因爲指令的而全部過程有多個步驟,取耗時最長的那個步驟作爲機器週期 - 時鐘週期(節拍)
(1)一個機器週期內,要完成若干個微操作,每個微操作要耗費1個節拍,一個節拍就是一個時鐘週期
機器速度與機器主頻的關係
(1)機器主頻高,使得節拍耗時短,此時相同指令在執行過程中每個階段雖然節拍數一樣,但是每個節拍的耗時變短了。
(2)但是機器速度不只與機器主頻有關,還與指令集有關。指令集每個階段的微操作數越少,機器速度越快
指令執行方案
管理多個需要執行的指令的執行步驟順序和時間。
- 單指令週期
- 多指令週期
- 流水線方案
控制器
控制器的結構
程序計數器、控制信號產生電路、指令寄存器
硬佈線控制器
輸入:節拍發生器、操作碼譯碼器
處理:硬佈線控制器
輸出:控制信號
優缺點:
- 控制器的速度取決於電路延遲,所以速度快。
- 不能修改添加新功能
微程序控制器
指令作爲微程序存儲,然後被執行。
一條機器指令對應一個微程序(微程序可以由更小的微程序組成,如取址),微程序存儲在控制存儲器(ROM)中。
一個微程序裏面包含多個微指令
一個微指令對應一個或多個微操作(M(MAR)\toMDR)
一個微操作對應一個微命令
一個微命令就是發出一個控制信號
一條機器指令執行過程
- 執行取指微程序,獲得一條機器指令
- 取指微程序的地址送入CMAR
- CM(CMAR)\toCMDR
- 執行取指微程序,主存中的一條機器指令就送入了指令寄存器(IR)
- 得到機器指令對應的微程序
機器指令的操作碼字段 通過 微地址形成部件 產生對應的微程序的入口地址 送入 CMAR - 執行微程序中的微指令序列
- 執行完繼續第1步
微程序與硬佈線的區別
- 微指令執行控制方式
硬佈線什麼時候執行什麼,有時序邏輯控制。
微程序每次執行完一條微指令需要給出下一條微指令的地址。特別地,寫在ROM中的微程序(取指微程序)它的每一條指令的下一個指令地址寫在每個指令的下地址字段中(寫在ROM中)。
取指微程序執行完之後,其後繼微指令的地址是由微地址形成部件形成的。
是由取指微程序放在CMAR中
- 取指階段
硬佈線在取指階段把指令操作碼送至譯碼器,再由譯碼器譯碼之後作爲CU的輸入生成下個控制信號。
微程序在取指階段(取指微程序運行時)把指令的操作碼送到微地址形成部件,生成執行週期微程序的首地址。
指令流水線
把指令分成更小的過程(段),多條指令的某些過程可以並行運行,達到提高計算機運行速度的目的。
指令分段:
- IF:取指週期
- ID:譯碼/讀寄存器堆
- EX:執行/訪存有效地址計算
- MEM:存儲器訪問
- WB:寫回寄存器
影響流水線的因素和解決辦法
-
結構相關(資源衝突)
兩個指令都要用一個資源
解決:
1.排隊,後面的等
2.增加資源
-
數據相關(數據衝突)
後面的指令依賴前面指令的執行結果,不能並行運行。
WAR 讀後寫相關
WAW 寫後寫相關
解決:
1.後面等
2.數據旁路技術,兩個指令直接私下交流
3.編譯器優化,調整指令順序
-
控制相關(控制衝突)
碰見轉移指令,流水線後面的指令都作廢了
解決:
1.分支預測
靜態預測:總是預測條件不滿足
動態預測:根據歷史情況
2.兩個分支的指令都先存着
3.加快形成條件碼
4.提高分支預測的猜中率
流水線的性能指標
- 吞吐率(TP) 單位時間流水線完成的任務數量
- 加速比(S) 不使用流水線和使用流水線所用時間之比
- 效率(E) 流水線中各功能段的利用率
流水線中的多發技術
超標量技術、超流水線技術、超長指令字
六、總線
總線概念
定義
(1)總線是連接各個部件的信息傳輸線
(2)總線是各個部件共享的傳輸介質
(3)總線上信息的傳送分爲串行和並行。(eg:usb串行,數據總線,地址總線並行傳輸)
(4)總線上的多個部件只能分時的向總線發送數據,但可以同時從總線上傳輸數據
引入總線結構的好處:
- 簡化系統結構
- 減少連線數目,提高系統可靠性
- 便於接口設計
- 便於系統擴充,易於實現系統地模塊化
- 便於故障的診斷和維修
總線分類
(1)片內總線:芯片內部的總線
(2)系統總線:計算機各部件之間的信息傳輸總線
(a)數據總線:雙向,與機器字長,存儲字長有關
(b)地址總線:單向,與存儲地址,IO地址有關
(c)控制總線:有出有入。(入的爲中斷響應)
(3)通信總線:用於計算機系統之間的通信(控制儀表盤,移動通信等)
總線的特性和性能指標
(1)總線寬度:數據線的根數
(2)總線帶寬:每秒傳輸的最大字節數(Mbps)
總線帶寬 = 總線寬度 * 總線頻率
總線仲裁 (總線的控制)
總線的判優控制 (由哪個部件發數據)
主設備(模塊):該模塊對總線有控制權
從設備(模塊):響應從主設備發送來的總線命令
仲裁方式:
集中式 :
- 鏈式查詢:
- 計數器定時查詢
- 獨立請求方式
分佈式
總線週期
- 申請分配階段
- 尋址階段
- 傳輸階段
- 結束階段
一個總線設備在某一時刻可以有多對主從設備進行同行嗎?
不可以,在某一時刻,總線上只有一個主設備控制總線,選擇一個從設備與之進行通信(即一對一關係),或對所有設備進行廣播通信(即一對多關係)。所以不能有多對主從設備同時進行通信。
七、I/O系統
IO設備與主機信息傳送的控制方式
程序查詢
CPU不斷查詢IO設備是否ready,CPU工作效率不高,是串行工作方式。
程序中斷
IO設備發出中斷請求,予以響應,大大提高了工作效率,是並行工作方式。
工作流程
- CPU響應中斷
- 中斷隱指令(硬件實現的)
- 轉去執行中斷服務程序
大部分中斷處理的大致流程
中斷隱指令:
- 關中斷
保存現場之前要關中斷,CPU不能響應更高級中斷源的請求。 - 保存斷點
將原來程序的指令地址保存下來 - 引出中斷服務程序
中斷服務程序的入口地址叫做中斷向量
所有的中斷向量存在中斷向量表
中斷服務程序:
- 進入中斷服務程序時保存現場和屏蔽字
- 開中斷(可以實現多重中斷)
- 中斷事件處理
- 關中斷
- 恢復現場和屏蔽字
- 開中斷,中斷返回
多重中斷和中斷屏蔽
中斷源與屏蔽字與優先級
例如有四個中斷源A、B、C、D
優先級 D>A>C>B
D的中斷屏蔽字爲:1 1 1 1 屏蔽所有
A的中斷屏蔽字爲:1 1 1 0 屏蔽ABC
DMA方式
主存與IO設備之間有一條數據通路,如果CPU和DMA同時訪問主存,讓給DMA。
DMA方式只用於傳數據,鼠標和鍵盤不能用DMA,他們要處理事件
傳送方式
-
停止CPU訪問主存
-
DMA與CPU交替訪問訪存
-
週期挪用
CPU不在訪存時
CPU正在訪存
CPU和IO同時發出請求
傳送過程
- 預處理
CPU執行IO指令設置DMA控制器的寄存器初值和傳送方向,啓動DMA控制器。等到IO設備準備好要發送的數據,接收的數據,IO設備向DMA控制器發出DMA請求,DMA向CPU發出總線請求。 - 數據傳送
完全由DMA控制器實現 - 後處理
DMA向CPU發出中斷請求,DMA執行中斷服務程序做DMA結束處理(數據校驗…)。