I/O控制方式

??設(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ù)雜团秽,需要專門的硬件支持主胧。

4 小結(jié)

??本文完

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市习勤,隨后出現(xiàn)的幾起案子踪栋,更是在濱河造成了極大的恐慌,老刑警劉巖图毕,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夷都,死亡現(xiàn)場離奇詭異,居然都是意外死亡予颤,警方通過查閱死者的電腦和手機囤官,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門冬阳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人党饮,你說我怎么就攤上這事肝陪。” “怎么了刑顺?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵氯窍,是天一觀的道長。 經(jīng)常有香客問我蹲堂,道長狼讨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任贯城,我火速辦了婚禮熊楼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘能犯。我一直安慰自己鲫骗,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布踩晶。 她就那樣靜靜地躺著执泰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渡蜻。 梳的紋絲不亂的頭發(fā)上术吝,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音茸苇,去河邊找鬼排苍。 笑死,一個胖子當(dāng)著我的面吹牛学密,可吹牛的內(nèi)容都是我干的淘衙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼腻暮,長吁一口氣:“原來是場噩夢啊……” “哼彤守!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哭靖,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤具垫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后试幽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筝蚕,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年饰及,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔗坯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡燎含,死狀恐怖宾濒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屏箍,我是刑警寧澤绘梦,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站赴魁,受9級特大地震影響卸奉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颖御,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一榄棵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潘拱,春花似錦疹鳄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至禽最,卻和暖如春腺怯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背川无。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工呛占, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懦趋。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓晾虑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親愕够。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349