??設(shè)備管理的主要任務(wù)之一是控制設(shè)備和內(nèi)存或處理機之間的數(shù)據(jù)傳送油宜。外圍設(shè)備和內(nèi)存的輸入/輸出控制方式有4種掂碱,即本文的內(nèi)容。
1 I/O控制器
??在介紹I/O控制方式前慎冤,先需要了解I/O控制器疼燥。
??I/O設(shè)備是由機械部件和電子部件組成的。
??I/O設(shè)備的機械部件主要用來執(zhí)行具體的I/O操作蚁堤。如鼠標(biāo)醉者、鍵盤的按鈕但狭、顯示器的LED屏等。
??I/O 設(shè)備的電子部件通常是一塊插入主板擴充槽的印刷電路板撬即。
??CPU無法直接控制I/O設(shè)備的機械部件立磁,因此I/O設(shè)備還要一個電子部件作為CPU和I/O設(shè)備機械部件之間的中介,用于實現(xiàn)CPU對設(shè)備的控制剥槐。
??這個電子部件就是I/O控制器唱歧,又稱設(shè)備控制器。CPU可控制I/O控制器粒竖,又由I/O控制器來控制機械部件颅崩。
??I/O控制器需要提供的功能
(1) 接受和識別CPU發(fā)出的命令:CPU可以控制I/O控制器,所以I/O控制器肯定要能接受并識別CPU的命令蕊苗。如CPU發(fā)來的read/write命令沿后,I/O控制器中會有相應(yīng)的的控制寄存器來存放命令參數(shù)。
(2) 向CPU報告設(shè)備的狀態(tài):I/O控制器會有相應(yīng)的狀態(tài)寄存器朽砰,用于記錄I/O設(shè)備當(dāng)前的狀態(tài)尖滚。如1表示空閑,0表示忙碌瞧柔。
(3) 數(shù)據(jù)交換:I/O控制器作為機械部件和CPU的中介漆弄,需要實現(xiàn)兩者之間的數(shù)據(jù)交換。I/O控制器中會設(shè)置相應(yīng)的數(shù)據(jù)寄存器非剃。輸出時置逻,數(shù)據(jù)寄存器用于暫存CPU發(fā)出的數(shù)據(jù),之后再由控制器傳動設(shè)備备绽。輸入時券坞,數(shù)據(jù)寄存器用于暫存設(shè)備發(fā)來的數(shù)據(jù),之后CPU從數(shù)據(jù)寄存其中取走數(shù)據(jù)肺素。
地址識別:類似于內(nèi)存地址恨锚,為了區(qū)分上面提到的各個寄存器,也需要給各個寄存器設(shè)置一個特定的地址倍靡。I/O控制器通過CPU提供的地址來判斷CPU要讀/寫哪個寄存器猴伶。
2 I/O控制器的組成
??I/O控制器由以下三個部分組成:CPU與控制器的接口、I/O邏輯塌西、控制器與設(shè)備的接口他挎。
??IO控制器作為CPU和設(shè)備之間的中介,左邊的部分是中介與CPU連接的部分捡需,即CPU與控制器的接口办桨,用于實現(xiàn)CPU與控制器之間的通信。CPU通過控制線發(fā)出命令站辉,通過地地址線指明要操作的設(shè)備呢撞;通過數(shù)據(jù)線來取出(輸入)數(shù)據(jù)损姜,或放入(輸出)數(shù)據(jù)。
??右邊的部分是中介與設(shè)備之間的連接殊霞,即控制器與設(shè)備的接口摧阅,用于實現(xiàn)控制器和設(shè)備之間的通信。
??中間的部分I/O邏輯是用于負(fù)責(zé)接收和識別CPU的各種命名(如地址譯碼)绷蹲,并根據(jù)CPU的命令對相應(yīng)的設(shè)備發(fā)送命令棒卷。
??以一個輸出的例子說明,如果CPU想通過設(shè)備輸出一個數(shù)據(jù)祝钢,首先CPU控制線向IO邏輯發(fā)出一個輸出的指令娇跟,同時在地址線上說明自己要操作哪個設(shè)備,并把要輸出的數(shù)據(jù)存放在數(shù)據(jù)寄存器中(如果指令中帶有參數(shù)太颤,那么參數(shù)就會存放在控制寄存器中),I/O邏輯接收命令并識別了CPU的指令盹沈,找到相應(yīng)的設(shè)備龄章,并得根據(jù)該設(shè)備的狀態(tài)寄存器判斷當(dāng)前設(shè)備的狀態(tài),如果當(dāng)前設(shè)備是空閑的乞封,那么I/O邏輯將數(shù)據(jù)寄存器中的值取出做裙,通過設(shè)備與控制器的接口將數(shù)據(jù)輸出外部設(shè)備上。
這里總結(jié)一下各個寄存器的作用:
(1) 數(shù)據(jù)寄存器:存放從設(shè)備發(fā)送來的輸入數(shù)據(jù)或從CPU發(fā)送來的輸出數(shù)據(jù)肃晚。
(2) 控制期存器:存放從CPU發(fā)送來的控制信息锚贱。
(3) 狀態(tài)寄存器:用于存放從設(shè)備發(fā)送來的設(shè)備的狀態(tài)信息。
注:一個I/O控制器可能會對應(yīng)多個設(shè)備关串,所以數(shù)據(jù)寄存器拧廊、控制寄存器和狀態(tài)寄存器可能會有多個(如每個控制器/狀態(tài)寄存器對應(yīng)一個具體的設(shè)備)。并且這些寄存器要有相應(yīng)的地址晋修,才能方便CPU操作吧碾。
3 I/O控制方式
?? 3.1程序直接控制方式
??以完成一次讀操作為例
??程序直接控制的流程:
(1) CPU通過控制線向I/O控制器發(fā)出一個讀指令,I/O控制器會根據(jù)CPU的要求啟動相應(yīng)的設(shè)備墓卦,并將這個設(shè)備相應(yīng)的狀態(tài)設(shè)置為1倦春,表示設(shè)備忙碌(未就緒)。
(2) 接下來設(shè)備就準(zhǔn)備CPU想要讀入的數(shù)據(jù)落剪,但是由于設(shè)備和CPU處理速度的差異睁本,所以在設(shè)備還沒有完成I/O之前,CPU會一直不斷的輪詢檢查設(shè)備的狀態(tài)忠怖,即狀態(tài)寄存器的值呢堰。其實就是在不在的執(zhí)行程序的循環(huán),若狀態(tài)為一直是1脑又,說明設(shè)備還沒有準(zhǔn)備好要輸入的數(shù)據(jù)暮胧,于是CPU會不斷輪詢锐借。
(3) 如果設(shè)備已經(jīng)準(zhǔn)備好了輸入的數(shù)據(jù),設(shè)備會向I/O控制器傳送要輸入的數(shù)據(jù)往衷,并且報告自身的裝填=態(tài)是已就緒狀態(tài)钞翔。
(4) 之后I/O邏輯將要輸入的數(shù)據(jù)放到數(shù)據(jù)寄存器中,并且將狀態(tài)寄存器的值改為0(已就緒)席舍。
(5) 在狀態(tài)寄存器改為0時布轿,CPU輪詢檢查到了數(shù)據(jù)已經(jīng)準(zhǔn)備好了,就設(shè)備已就緒来颤,即可將數(shù)據(jù)寄存器中的內(nèi)容讀入CPU自己的寄存器中汰扭,再把寄存器的內(nèi)容放入內(nèi)存的值(數(shù)據(jù)從設(shè)備到內(nèi)存需要經(jīng)過CPU)。這樣就完成了一次讀操作福铅。
??程序直接控制方式分析
(1) CPU 干預(yù)頻率:很頻繁萝毛,I/O操作開始之前、完成之后需要需要CPU介入滑黔,并且在等待I/O完成的過程中需要CPU不斷輪詢檢查笆包。
(2) 數(shù)據(jù)的傳送單位:每次讀/寫一個字。
(3) 數(shù)據(jù)流向
??讀操作(數(shù)據(jù)輸入):I/O設(shè)備—>CPU—>內(nèi)存
??寫操作(數(shù)據(jù)輸出):內(nèi)存—>CPU—>I/O設(shè)備
??每個字的讀/寫都需要CPU的幫忙略荡。
(4) 主要優(yōu)缺點
??優(yōu)點:實現(xiàn)簡單庵佣。在讀/寫指令之后,加上實現(xiàn)循環(huán)檢查的一系列指令即可(因此才稱為“程序直接控制方式”)汛兜。
??缺點:CPU和I/O設(shè)備只能串行工作巴粪,CPU需要一直輪詢檢查,長期處于"忙等"狀態(tài)粥谬,CPU利用率低肛根。
?? 3.2 中斷驅(qū)動方式
??對于程序直接控制方式CPU利用率低的問題,引入了中斷機制帝嗡。由于I/O設(shè)備速度很慢晶通,因此在CPU發(fā)出讀/寫命令后,可將等待I/O的進(jìn)程阻塞哟玷,先切換到別的進(jìn)程執(zhí)行狮辽,但I(xiàn)/O完成之后,控制器會向CPU發(fā)出一個中斷信號巢寡,CPU會在每個指令周期的末尾檢查中斷喉脖,當(dāng)CPU檢測到中斷信號后,會保存當(dāng)前進(jìn)程的運行環(huán)境信息抑月,轉(zhuǎn)去執(zhí)行中斷處理程序處理該中斷树叽。當(dāng)處理中斷的過程中,CPU從I/O控制器讀一個字的數(shù)據(jù)傳送的CPU寄存器谦絮,再寫入主存题诵。接著洁仗,CPU恢復(fù)等待I/O的進(jìn)程(或者其他進(jìn)程)的運行環(huán)境,然后繼續(xù)執(zhí)行性锭。
??中斷驅(qū)動方式分析:
(1) CPU 干預(yù)頻率:每次I/O操作開始之前赠潦、完成之后需要需要CPU介入,等待I/O完成的過程中CPU可以切換到別的進(jìn)程執(zhí)行草冈。
(2) 數(shù)據(jù)的傳送單位:每次讀/寫一個字她奥。
(3) 數(shù)據(jù)流向
??讀操作(數(shù)據(jù)輸入):I/O設(shè)備—>CPU—>內(nèi)存
??寫操作(數(shù)據(jù)輸出):內(nèi)存—>CPU—>I/O設(shè)備
(4) 主要優(yōu)缺點
??優(yōu)點:與“程序直接控制方式相比”,在“中斷驅(qū)動方式”中怎棱,I/O控制器會通過中斷信號主動報告I/O已完成哩俭,CPU不再需要不停的輪序。CPU可以和I/O設(shè)備并行工作拳恋,CPU利用效率明顯提升凡资。
??缺點:每個字在I/O設(shè)備和內(nèi)存之間傳輸,都需要經(jīng)過CPU谬运。而頻繁的中斷處理會消耗較多的CPU時間讳苦。
?? 3.3 DMA方式
??與“中斷驅(qū)動方式”相比,DMA(Direct Memory Access吩谦,直接存儲器存取。主要用于塊設(shè)備的I/O控制)有這樣幾個改進(jìn):
(1) 數(shù)據(jù)傳送的單位是塊膝藕,不再是一個字一個字的傳送式廷。
(2) 數(shù)據(jù)的流向是從設(shè)備直接放入內(nèi)存,或者直接從內(nèi)存到設(shè)備芭挽,不再需要CPU干預(yù)滑废。
(3) 僅在一個塊或多個塊的開始和結(jié)束時,才需要CPU干預(yù)袜爪。
??DMA控制器組成:主機(CPU)—控制塊的接口蠕趁、I/O控制邏輯、塊設(shè)備—控制器接口辛馆。
(1) 數(shù)據(jù)寄存器(DR俺陋,Data Register):暫存從設(shè)備到內(nèi)存,或者從內(nèi)存到設(shè)備的數(shù)據(jù)昙篙。
(2) 內(nèi)存地址寄存器(MAR腊状,Memory Address Register):在設(shè)備向內(nèi)存輸入數(shù)據(jù)時,MAR表示輸入的數(shù)據(jù)應(yīng)該存放到內(nèi)存的什么位置苔可,在內(nèi)存向設(shè)備輸出數(shù)據(jù)時缴挖,MAR表示要輸出的數(shù)據(jù)放在內(nèi)存的什么位置。
(3) 數(shù)據(jù)計數(shù)器(DC焚辅,Data Counter):表示剩余要讀/寫的字節(jié)數(shù)映屋。
(4) 命令/狀態(tài)寄存器(CR苟鸯,Command Register):用于存放CPU發(fā)來的I/O命令,或設(shè)備的狀態(tài)信息棚点。
??DMA方式過程:首先CPU給I/O模塊一個的指令早处,CPU指明此次要進(jìn)行的操作(如讀操作),并說明要讀入多少數(shù)據(jù)乙濒、數(shù)據(jù)存放在內(nèi)存什么地方陕赃,以及數(shù)據(jù)在外部設(shè)備上的地址等,之后CPU就可以去做其他事了颁股。
??接下來DMA控制器就可以根據(jù)CPU的命令參數(shù)來完成指令一系列的讀工作么库,DMA控制器從磁盤的指定位置讀取一個字(DMA一次讀取的也是一個字),然后存儲在DR中甘有,再從DR寫入到CPU指定的內(nèi)存位置中诉儒,當(dāng)一個(多個)塊的數(shù)據(jù)讀完后,DMA控制器會向CPU發(fā)出一個中斷信號亏掀,CPU檢測到中斷信號后會處理這個中斷忱反。
??DMA方式分析:
(1) CPU 干預(yù)頻率:僅在傳送一個或多個數(shù)據(jù)塊開始和結(jié)束時,才需要CPU干預(yù)滤愕。
(2) 數(shù)據(jù)的傳送單位:每次讀/寫一個或多個塊温算。(注:每次讀寫的只能是連續(xù)的多個塊,且這些塊讀入內(nèi)存后在內(nèi)存中也必須是連續(xù)的)
(3) 數(shù)據(jù)流向(不再需要經(jīng)過CPU)
??讀操作(數(shù)據(jù)輸入):I/O設(shè)備—>內(nèi)存
??寫操作(數(shù)據(jù)輸出):內(nèi)存—>I/O設(shè)備
(4) 主要優(yōu)缺點
??優(yōu)點:數(shù)據(jù)傳輸以“塊”為單位间影,CPU介入的頻率進(jìn)一步降低注竿。數(shù)據(jù)的傳輸不再需要先經(jīng)過CPU再寫入內(nèi)存,數(shù)據(jù)傳輸效率進(jìn)一步增加魂贬,CPU和I/O設(shè)備的并行性能得到提升巩割。
??缺點:CPU每發(fā)出一條I/O指令,只能讀/寫一個或多個連續(xù)的數(shù)據(jù)塊付燥。如果要讀/寫多個離散的塊宣谈,或者要將數(shù)據(jù)分別寫到不同的內(nèi)存區(qū)域時,CPU要分別發(fā)出多條I/O指令键科,進(jìn)行多次中斷操作闻丑。
?? 3.4 通道
??通道:一種硬件,可以把通道理解為一種“低配版的CPU”勋颖。通道可以識別并執(zhí)行一系列通道指令梆掸。
??通道方式過程:當(dāng)CPU要完成一組相關(guān)的讀(或?qū)懀┎僮骷跋嚓P(guān)控制時,只需向I/O通道發(fā)送一條I/O指令牙言,以給出其所要指向的通過程序的首地址和要訪問的I/O設(shè)備酸钦,之后CPU就可以去執(zhí)行其他操作了。
??通道在接收到該指令后,根據(jù)通道程序首地址來找到通道程序在內(nèi)存中的位置并執(zhí)行通道程序卑硫,當(dāng)通道完成通道程序完成數(shù)據(jù)傳送后就會向CPU發(fā)出一個中斷信號徒恋,CPU檢測到中斷信號后會處理這個中斷。
??通道方式中欢伏,讀/寫入多少數(shù)據(jù)入挣,數(shù)據(jù)存放的位置都是通道控制的。通道控制方式通俗來說就是CPU告訴通道去執(zhí)行一個任務(wù)硝拧,CPU把任務(wù)的清單已經(jīng)放在內(nèi)存中径筏,具體的任務(wù)并不是CPU告訴通道的,而是直接讀取通道程序中的內(nèi)容知道的障陶。
(1) 通道和CPU的區(qū)別在于:通道能識別的指令單一滋恬,通道沒有自己的內(nèi)存,需要和CPU共享內(nèi)存抱究。所以說可以把通道看作“低配版的CPU”恢氯。
(2) 通道和DMA方式的區(qū)別:DMA方式需要CPU來控制傳輸?shù)臄?shù)據(jù)塊的大小、傳輸?shù)奈恢霉乃拢ǖ婪绞街械倪@些信息是由通道控制的勋拟。另外,每個DMA控制器對應(yīng)一臺設(shè)備與內(nèi)存?zhèn)鬟f數(shù)據(jù)妈候,而一個通道可以控制多臺設(shè)備與內(nèi)存數(shù)據(jù)交換敢靡。
??通道控制方式分析:
(1) CPU 干預(yù)頻率:極低,通道會根據(jù)CPU的指示執(zhí)行相應(yīng)的通道程序苦银,只有完成一組數(shù)據(jù)塊的讀/寫后才需要發(fā)出中斷信號醋安,請求CPU干預(yù)。
(2) 數(shù)據(jù)的傳送單位:每次讀/寫一組塊墓毒。
(3) 數(shù)據(jù)流向(不再需要經(jīng)過CPU)
??讀操作(數(shù)據(jù)輸入):I/O設(shè)備—>內(nèi)存
??寫操作(數(shù)據(jù)輸出):內(nèi)存—>I/O設(shè)備
(4) 主要優(yōu)缺點
??優(yōu)點:CPU、通道亲怠、I/O設(shè)備可并行工作所计,資源利用率很高。
??缺點:實現(xiàn)復(fù)雜团秽,需要專門的硬件支持主胧。