5-输入输出系统IO
【README】
1.本文總結自B站 《計算機組成原理(哈工大劉宏偉)》的視頻講解,非常棒,墻裂推薦;
【1】 IO概述
【1.1】輸入輸出系統(tǒng)的發(fā)展概況
?
?通道(通道是netty的io多路復用的底層原理,需要重點了解):
- 可以看做是一個小型的功能更強的DMA控制器;能夠執(zhí)行通道程序,具有自己的指令系統(tǒng); 通過執(zhí)行通道程序,可以連接通道上的IO設備與主機直接聯(lián)系;
【1.2】輸入輸出系統(tǒng)組成
1)IO指令
- 操作碼:類似于標志,標識該條指令為IO指令;
- 命令碼:io命令,表示對io設備做什么操作;
- 設備碼:io設備地址,或io設備中的寄存器地址(io端口);
3)通道:
- 小型DMA處理器; 能夠?qū)崿F(xiàn)IO設備與CPU間的信息傳送;通道有自己的控制器,存儲器; 通道執(zhí)行通道指令; 通道下面可以連多個子通道;每個子通道可以連接設備控制器;每個設備控制器還可以連接多個設備;
硬件:
- 設備通過接口連接到總線上,和cpu完成信息交換;
- 如果是通道的話,那設備連接設備控制器,設備控制器連接通道,通道連接子通道;
【1.3】 IO設備與主機的聯(lián)系方式
統(tǒng)一編址: io設備地址,看做是內(nèi)存地址的一部分;
4)聯(lián)絡方式:
方式1:立即響應,如led燈; ?
方式2: 異步工作采用應答信號;
Cpu與IO接口間采用并行傳輸;步驟如下(輸出):
- 步驟1:io接口(端口)把數(shù)據(jù)準備好了后,就發(fā)送 ready信號通知io設備說數(shù)據(jù)準備好;
- 步驟2: io設備接收到信號后,從io接口中讀取數(shù)據(jù)并給出應答信號(strobe-閃光或選通脈沖);
- 若是輸入的話,則 IO接口(端口)的緩沖器一旦空了,則發(fā)送ready信號給io設備;io設備收到信號后,發(fā)送數(shù)據(jù)給io端口,并發(fā)送應答信號(strobe);io端口把數(shù)據(jù)傳輸給cpu;
方式3: 同步工作采用同步時標:
- 某時間點,必須開始某項工作;
- 某時間點,必須結束某項工作;
5)IO設備與主機的連接方式
連接方式1:
- 輻射式連接 == 分散連接; 即增加一個外設,主機或cpu就會增加一套io控制線路;成本非常高;
連接方式2:
- 總線連接;可移植性高;
?【1.4】IO設備與主機信息傳送的控制方式(非常重要*)
- 程序查詢方式:cpu與外設采用串行方式工作 ;
- 程序中斷方式: cpu與IO設備采用部分并行工作;
- DMA方式: 把cpu進一步從數(shù)據(jù)輸入輸出中解放出來,使得外部設備和內(nèi)存間可以直接建立連接,由DMA控制器或DMA接口直接控制 外部設備與內(nèi)存間的數(shù)據(jù)交換 ;
1)程序查詢方式:
在等待過程中,cpu處于原地踏步等待狀態(tài);大致過程為:
- cpu向外設發(fā)請求讀取數(shù)據(jù);
- 外設準備好數(shù)據(jù)后通知cpu取數(shù)據(jù)(在外設準備數(shù)據(jù)期間,cpu一直等待);
- cpu取數(shù)據(jù)到自身寄存器;
- cpu把寄存器的數(shù)據(jù)寫入內(nèi)存;(但在外設準備數(shù)據(jù)的時候,cpu一直在等待,造成cpu效率非常低下);
盡管cpu比較快,但外設準備數(shù)據(jù)比較慢;
2)程序中斷方式:
2.0)對程序查詢方式進行改進:
- 在io設備在準備數(shù)據(jù)時,cpu不會等待(不查詢);
- 只有當外部設備與內(nèi)存間開始進行信息交換的時候,cpu才會暫停現(xiàn)行程序;然后為輸入輸出進行服務;
2.1)中斷方式過程:
2.2)上圖中表示:
2.3 在整個過程中,在外設準備階段,cpu沒有踏步等待;
- 這種方式可以使得 cpu與io部分的并行工作(cpu沒有參與外設準備階段,但參與了數(shù)據(jù)傳輸);
2.4)缺點:
- 因為cpu保存程序現(xiàn)場,恢復程序現(xiàn)場是需要執(zhí)行額外指令的,比如10幾條指令; 如果傳輸?shù)臄?shù)據(jù)量非常小,如1個字節(jié),耗費的成本是多執(zhí)行10幾條保存與恢復現(xiàn)場指令,那么cpu利用率就不高;
2.5)小結
上述兩種方式的數(shù)據(jù)io都需要cpu來參與; cpu架起了 外設與內(nèi)存間的信息傳輸?shù)臉蛄?#xff1b;能不能不經(jīng)過cpu來進行數(shù)據(jù)傳輸,這就引入了DMA;
3)DMA方式
3.0)dma方式簡介:
- 內(nèi)存與io設備之間通過DMA控制器進行數(shù)據(jù)交換, 完全不需要cpu的參與,不需要程序中斷;
- 但DMA控制器需要用到 地址總線,數(shù)據(jù)總線,控制總線;
- 如果DMA使用了以上總線,則cpu需要讓出這些總線控制權給DMA控制器(周期挪用的意思);
3.1) dma方式過程
- 步驟1:Cpu執(zhí)行主程序,在主程序中,碰到了io指令;
- 步驟2:Cpu發(fā)出啟動io指令;cpu繼續(xù)執(zhí)行自己操作;
- 步驟3:Io設備在dma控制器的控制下完成數(shù)據(jù)準備;
- 步驟4:當數(shù)據(jù)準備好以后,由DMA控制器發(fā)出DMA請求,占用總線使用權;占用一個存取周期,利用這個周期實現(xiàn) 外設與內(nèi)存間的數(shù)據(jù)交換;
3.2)缺點:在這個存取周期中,cpu無法使用總線,無法訪問內(nèi)存;
3.3)但是:
- 現(xiàn)代cpu并不是每執(zhí)行一條指令就取一條指令,指令是可以預取的;
- 在指令執(zhí)行之前,可能若干條指令已經(jīng)被預取到指令緩存中了;
- 只要這些指令不需要訪問內(nèi)存;
- 那么cpu就可以利用指令緩存中的指令和數(shù)據(jù)緩存中的數(shù)據(jù)繼續(xù)執(zhí)行主程序中的指令;
- 那么在這一個存取周期中,cpu也是可以并行操作的;(并行效率取決于指令是否訪問內(nèi)存,更加確切的說,cpu是否使用總線,如不使用總線,則cpu執(zhí)行指令,dma控制器利用總線完成數(shù)據(jù)io,兩者相互獨立不影響);
補充:通道結構方式,IO處理機方式,參考其他材料;
?三種方式下的cpu工作效率比較
在io數(shù)據(jù)傳輸場景下,推薦使用dma控制器方式進行io傳輸;
【2】 外部設備
?
【2.1】 概述
機機通信設備,如網(wǎng)卡;
【2.2】 輸入設備
補充:鍵盤字母傳輸給cpu的過程:
- 步驟1:把若干鍵排列成矩陣,用計數(shù)器經(jīng)過行譯碼,列譯碼后,對鍵盤進行掃描;確定是哪個鍵被按下了;
- 步驟2:一旦掃描到被按下的鍵,則計數(shù)器可以停止;同時把計數(shù)器的輸出作為 rom 的輸入地址;這個rom就保存了鍵盤上每個鍵的 ascii 碼; cpu通過中斷方式可以讀入這個ascii碼;
- 步驟3:cpu讀入指令,經(jīng)過一段時間延遲后,可以輸入到中斷控制裝置來清除中斷標記;可以用于再一次啟動計數(shù)器,使計數(shù)器可以再一次對鍵盤進行掃描;為下一個字符的輸入做準備;?
【2.3】輸出設備
?
【2.4】其他
【3】 IO 接口
【3.1】 IO接口概述
為什么要設置接口(端口,或編址為內(nèi)存地址或其他地址)?
- 1)采用總線來連接外部設備與cpu;cpu通過地址來確認是和哪個設備傳輸;接口有地址(端口),可以實現(xiàn)設備選擇;
- 2)接口實現(xiàn)數(shù)據(jù)緩沖; 不同外設速度不同,如硬盤快,但鍵盤慢;
- 3)Cpu與接口間采用并行傳輸,一次傳輸1個字或1個字節(jié);但接口與外部設備間可能采用串行傳輸,一個bit一個bit的傳;數(shù)據(jù)要在接口當中完成組裝或拆解,以便做格式轉(zhuǎn)換;
- 4)電平轉(zhuǎn)換: cpu與外部設備工作的電平不一致,需要接口來完成轉(zhuǎn)換;
- 5)傳送控制命令:cpu把控制命令傳輸?shù)浇涌?#xff0c;由控制命令來控制外設來工作 ;
- 6)接口中有一些狀態(tài)標志,用于標識外設是忙,還是閑; 外部設備是否有中斷請求 ?
【3.2】接口的功能和組成
?
1)總線包括:
- 設備選擇線(設備地址或端口地址);
- 數(shù)據(jù)線(完成數(shù)據(jù)的輸入和輸出);
- 命令線(cpu命令,控制外設);
- 狀態(tài)線(反應外設是忙,還是準備,還是已完成);?
2)外部設備接口的功能和組成
設備狀態(tài)標記由一些列的觸發(fā)器來完成。如下:
- 完成觸發(fā)器 D;
- 工作觸發(fā)器 B;
- 中斷請求觸發(fā)器INTR;(設備準備好以后,主動向cpu提出中斷請求)
- 屏蔽觸發(fā)器 MASK ;(接口可能有中斷請求,但是否允許它向主機提出中斷請求,要看設備中斷請求的重要性,因此可以屏蔽中斷請求)
- 如果 屏蔽觸發(fā)器=1,那么盡管外設已經(jīng)完成了工作,但仍然不能向cpu發(fā)出中斷請求,因為cpu當前所處理工作的重要性比這次 io操作要高;
3)IO接口的基本組成
命令譯碼器:通過對命令譯碼,才知道cpu是要輸入,還是輸出還是其他操作;
【3.3】 接口類型
【4】 程序查詢方式
詳細內(nèi)容參見本文【1.4】程序查詢方式;
?
檢查狀態(tài)標記: 測試指令;
準備就緒: 轉(zhuǎn)移指令;
交換數(shù)據(jù): 傳送指令; 輸入輸出指令;訪存指令;
設置計數(shù)器的值: 要傳送的字的個數(shù);每傳輸一個字,就減1;
?
- 觸發(fā)器B(BUSY信號):標記B為1,表示設備開始工作 ;設備處于忙的狀態(tài);
- 觸發(fā)器D(READY信號):標記D為0,表示數(shù)據(jù)沒有準備好;數(shù)據(jù)是否準備好的信號;數(shù)據(jù)準備好后,標記D設置為1;;
- DBR:數(shù)據(jù)緩沖寄存器;
【5】 程序中斷方式
詳細內(nèi)容參見 本文【1.4】程序中斷方式;
1)中斷定義:
- cpu在執(zhí)行程序過程中,如果發(fā)生意外事件,cpu要中斷當前程序的執(zhí)行轉(zhuǎn)而處理意外事件;通過執(zhí)行中斷服務程序的方式來處理意外事件;
如: cpu在執(zhí)行第k條指令的過程中,外設通過中斷請求線向cpu發(fā)送中斷請求;cpu在執(zhí)行完第k條指令后,會去查詢是否有中斷請求;如果有,能不能進行響應; 如果可以響應,則cpu執(zhí)行中斷服務程序處理中斷請求;
【5.1】中斷的概念
【5.2】IO中斷的產(chǎn)生
?
【5.3】 程序中斷方式的接口電路?
?
1)中斷請求觸發(fā)器:;
中斷屏蔽觸發(fā)器: ;
2)排隊器:同一個時刻,向cpu發(fā)出中斷請求的有多個設備;需要對中斷請求按照優(yōu)先級進行排序;
3)中斷向量地址形成部件:;
?【排隊器】
INTR1為1,則后面INTR(I,I>1)的為0;
確定了中斷源之后, 下一步是找到中斷服務程序的入口地址;因為cpu是執(zhí)行中斷服務程序來處理意外事件(中斷)的;
3)中斷向量地址形成部件:
中斷號:
- 如8086cpu支持256個中斷,那中斷號可以編為0~255 ;
中斷向量:
- 理解為中斷服務程序的入口地址; 在x86cpu中,可以理解為中斷服務程序的段地址和偏移量 組成的向量;也指程序狀態(tài)字; 如cpu發(fā)生中斷時,一些非體系結構寄存器或程序狀態(tài)寄存器,這些寄存器指令無法進行讀取,那么就把它集成為一個字,這個字稱為程序狀態(tài)字;
向量地址:
- 中斷向量所屬指令所在的內(nèi)存地址; 如中斷服務程序的入口地址,所保存的內(nèi)存單元地址;或跳轉(zhuǎn)指令所在的內(nèi)存地址;cpu通過跳轉(zhuǎn)指令轉(zhuǎn)到中斷服務程序(這時,向量地址指的是跳轉(zhuǎn)指令所在內(nèi)存地址,跳轉(zhuǎn)指令內(nèi)部再保存了入口地址);如向量地址為 12H;存儲的指令為 JMP 200 ;而200是入口地址;
4)程序中斷方式接口電路的基本組成
?【5.4】IO中斷處理過程
?
地址線的設備選擇信號和啟動命令一并達到,才會啟動外設接口;
?
【5.5】中斷服務程序流程
2)多重中斷:
- 表示的是中斷嵌套;
- 即 cpu正在執(zhí)行中斷服務程序1; 這時,又有優(yōu)先級更高的中斷2產(chǎn)生;則cpu保存中斷服務程序1的執(zhí)行現(xiàn)場,然后轉(zhuǎn)而執(zhí)行中斷服務程序2;這就叫嵌套;
3)單重中斷和多重中斷的服務程序流程 :
中斷隱指令:
- 并不是一條實際指令,它指定的是中斷處理的一系列指令的集合;
4)主程序和服務程序搶占CPU示意圖
?
cpu響應中斷過程如下:
- 步驟1:Cpu向io設備發(fā)送啟動外設請求;
- 步驟2:io設備啟動,準備數(shù)據(jù);
- 步驟3:io設備準備好數(shù)據(jù)后,向cpu發(fā)送中斷請求;
- 步驟4:cpu執(zhí)行完指令后,查看是否存在中斷請求;若有,則保存現(xiàn)場,轉(zhuǎn)而執(zhí)行中斷服務程序;
- 步驟5:cpu執(zhí)行完中斷服務程序后,恢復程序現(xiàn)場,繼續(xù)執(zhí)行主程序;
?【6】DMA方式(非常重要*)
詳情可以參見 本文 【1.4】-dma方式 ;
【6.1】DMA方式特點
1)DMA和程序中斷兩種方式的數(shù)據(jù)通路比較
?
1.11)引入DMA的背景:
- 因為中斷方式中,當io設備把數(shù)據(jù)準備好之后,cpu會響應io設備的中斷請求;暫停執(zhí)行主程序,保存現(xiàn)場,然后轉(zhuǎn)而執(zhí)行中斷服務程序;影響了主程序的執(zhí)行效率;
- 所以io設備的數(shù)據(jù)傳輸還是會影響cpu的執(zhí)行;
1.2)DMA不一樣: 把cpu從io數(shù)據(jù)傳輸?shù)倪^程中解放出來;
- 主存和io設備間的數(shù)據(jù)傳輸直接通過DMA控制器,而不是cpu;
- 但DMA控制器需要占用總線,而此時cpu不能使用總線,無法訪問內(nèi)存;
- 所以DMA還是會影響cpu的執(zhí)行;(但cpu可以預取指令,如果執(zhí)行的指令不訪問內(nèi)存或不使用總線,則影響比較小)
2)DMA與主存交換數(shù)據(jù)的三種方式 :
方式1: 停止cpu訪問主存;
該方式的問題在于, DMA工作期間,cpu無法訪問內(nèi)存;
方式2:周期挪用(推薦*);
方式3:DMA與 CPU交替訪問(不推薦,效率低):
?DMA與cpu交替使用內(nèi)存,但實用性不強;
【6.2】 DMA接口功能與組成
1)DMA 接口功能 :
?
- 步驟1:DMA向cpu申請總線和內(nèi)存的控制權;
- 步驟2:總線和內(nèi)存控制器的轉(zhuǎn)交;
- 步驟3: 管理系統(tǒng)總線,控制數(shù)據(jù)傳送; 是輸入還是輸出;
- 步驟4:;
- 步驟5:;
2)DMA 接口組成 :
2.1)寄存器列表:
- 地址寄存器AR:給出傳輸數(shù)據(jù)的內(nèi)存地址;
- 計數(shù)器:WC,傳輸?shù)臄?shù)據(jù)量(word count);
- 數(shù)據(jù)緩沖器:BR, buffer;
- 設備地址寄存器:DAR(把io設備地址保存在其中),供設備選擇電路使用; 或當硬盤訪問內(nèi)存是,可以保持盤面好,磁柱,扇區(qū)號;
2.2)信號列表:
- DREQ:設備請求縮寫;
- DACK:應答信號;
- HRQ: 總線請求信號;
- HLDA:總線應答信號;
2.3)中斷機構:
- 用于數(shù)據(jù)傳輸完成后,對后續(xù)工作進行處理; 如當WC=0,表示數(shù)據(jù)準備完成;
- WC就會向中斷機構的中斷觸發(fā)器發(fā)送請求,表示數(shù)據(jù)準備完成;
- 再由中斷機構向cpu發(fā)出中斷請求;
【6.3】 DMA數(shù)據(jù)傳輸方式
1)DMA傳送過程:
1.1)預處理:
1.2)DMA傳送過程示意:
?
1.3)數(shù)據(jù)傳送過程(輸入 ) :
步驟列表(數(shù)據(jù)從外設送入到內(nèi)存) : ?
- 步驟1: 外部設備把數(shù)據(jù)送入br 數(shù)據(jù)緩沖器;
- 步驟2: 外部設備向DMA控制器發(fā)送DREQ信號,說我已經(jīng)把數(shù)據(jù)準備好了;
- 步驟3: DMA控制器向cpu發(fā)送 HRQ信號,申請占用總線請求;
- 步驟4: cpu在允許的情況下,會給出應答 HLDA,這時cpu會放棄對總線和內(nèi)存的占用; 而總線和內(nèi)存由DMA接口來控制;
- 步驟5: DMA接口中的AR寄存器把內(nèi)存地址(目的地址)通過地址總線傳給內(nèi)存;
- 步驟6:DMA控制器給外設返回一個應答信號DACK,告訴外設數(shù)據(jù)傳輸可以開始了;
- 步驟7: DMA控制器發(fā)出讀寫控制指令,同時BR寄存器把數(shù)據(jù)送入到數(shù)據(jù)總線上,進而送入到AR寄存器指定的內(nèi)存地址;
- 步驟8:每傳輸一個數(shù)據(jù),AR內(nèi)容加1(以便下一次傳輸使用加1后的地址);WC字計數(shù)器也加1;
- 步驟9:判斷是否傳輸完成? 若沒有完成,則繼續(xù)傳輸下一個字;若完成,則WC的值發(fā)生溢出,溢出信號發(fā)送給中斷機構,使得中斷機構中的中斷請求觸發(fā)器設置為1,參加中斷排隊;然后發(fā)出中斷請求;
- 步驟10:cpu接收到中斷請求后,暫停當前出現(xiàn)執(zhí)行,轉(zhuǎn)而執(zhí)行中斷服務程序(以便進行后置處理);
1.4)數(shù)據(jù)傳送過程(輸出)
1.5)后處理
?
?
2)DMA接口與系統(tǒng)的連接方式
2.1)具有公共請求線的 DMA 請求
一臺機器可以有多個DMA接口;多個DMA接口可以連接到總線上; ?
- 即,所有DMA接口共享一條DMA請求線,連接到CPU;
2.2)獨立的DMA請求
每個DMA接口都有獨立的 請求和響應總線;
3)DMA方式與程序中斷方式比較:
【6.4】 DMA接口的類型 (非常重要,netty中io多路復用底層原理)
【6.4.1】選擇型
設備地址寄存器用于選擇是哪個設備(是否當前設備)與主存進行連接; 一旦設置后, 只能有1個設備使用DMA接口;
【6.4.2】 多路型
多路型的DMA接口應用到了通道-io多路復用技術上,如netty(非常重要);
- 但真正傳輸數(shù)據(jù)的時候,也只能有1個外設與內(nèi)存進行數(shù)據(jù)傳輸;
- 邏輯上連接多個設備,指的是數(shù)據(jù)準備階段,可以有多個設備同時進行數(shù)據(jù)準備; ?
以通道為例:
- 通道也是一個小型的DAM控制器,用的也是DMA接口;
- 1個通道包含多個子通道;每個子通道有自己獨立的寄存器,包括字計數(shù)器,地址寄存器,數(shù)據(jù)緩沖寄存器等;
- 多個外部設備對應不同的子通道,可以同時進行數(shù)據(jù)準備;如磁盤和磁帶同時準備數(shù)據(jù);
- 外部設備準備好了,通過子通道向通道提出數(shù)據(jù)傳輸請求;
- 在數(shù)據(jù)傳輸過程中,只能有一個外設與內(nèi)存進行傳輸,即數(shù)據(jù)傳輸是串行的,但數(shù)據(jù)準備可以并行同時進行;
?【6.4.3】多路型 DMA接口原理
據(jù)上圖,我們看出:
- 一個多路型的通道,即便連接了多個外設,但在傳輸過程中,可以看出通道還有很多個時間片是空閑狀態(tài); 還可以連接更多的外設;
總結
以上是生活随笔為你收集整理的5-输入输出系统IO的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人生如白驹过隙这句话是什么意思 人生如白
- 下一篇: 7-指令系统