操作系統:I/O控制方式 詳細彙總+形象舉例

目錄:

  • 程序直接控制方式
  • 中斷驅動方式
  • DMA方式
  • 通道控制方式
  • 舉個栗子

一、程序直接控制方式

思想:計算機從外部設備讀取數據到存儲器,每次讀一個字的數據。對讀入的每個字,CPU 需要對外設狀態進行循環檢查(輪詢),直到確定該字已經在I/0 控制器的數據寄存器中。在程序直接控制方式中,由於CPU 的高速性和I/0設備的低速性,致使CPU 的絕大部分時間都處於等待I/0 設備完成數據I/0 的循環測試中,造成了CPU 資源的極大浪費。在該方式中, CPU 之所以要不斷地測試I/0 設備的狀態,就是因爲在CPU 中未採用中斷機構,使I/0 設備無法向CPU報告它已完成了一個字符的輸入操作。
在這裏插入圖片描述
缺點:程序直接控制方式雖然簡單且易於實現,但其缺點也顯而易見,由於CPU 和I/0 設備只能串行工作,導致CPU 的利用率相當低

二、中斷驅動方式

思想:允許I/0 設備主動打斷CPU 的運行並請求服務,從而“解放"CPU, 使得其向I/0 控制器發送讀命令後可以繼續做其他有用的工作。如下圖所示,我們從I/0 控制器和CPU 兩個角度分別來看中斷驅動方式的工作過程:
【1】從I/0 控制器的角度來看:I/0 控制器從CPU 接收一個讀命令,然後從外圍設備讀數據。一且數據讀入該I/0控制器的數據寄存器,便通過控制線給CPU 發出一箇中斷信號,表示數據已準備好,然後等待CPU 請求該數據。I/0 控制器收到CPU 發出的取數據請求後,將數據放到數據總線上,傳到CPU 的寄存器中。至此,本次I/0 操作完成, I/0 控制器又可開始下一次I/0操作。
【2】從CPU 的角度來看: CPU 發出讀命令,然後保存當前運行程序的上下文(現場,包括程序計數器及處理機寄存器),轉去執行其他程序。在每個指令週期的末尾, CPU 檢查中斷。當有來自I/0 控制器的中斷時, CPU 保存當前正在運行程序的上下文,轉去執行中斷處理程序以處理該中斷。這時, CPU 從I/0 控制器讀一個字的數據傳送到寄存器,並存入主存。接着, CPU 恢復發出I/0 命令的程序(或其他程序)的上下文,然後繼續運行。
在這裏插入圖片描述
缺點:中斷驅動方式比程序直接控制方式有效,但由於數據中的每個字在存儲器與I/0 控制器之間的傳輸都必須經過CPU, 這就導致了中斷驅動方式仍然會消耗較多的CPU 時間。
補充:什麼叫經過CPU呢?——在DMA(Direct memory access 直接存儲器訪問)之前,輸入數據流大概是這樣的:外圍設備->I/O控制器的數據寄存器->CPU寄存器->存儲器,這就叫經過CPU,或者說傳輸數據的過程需要CPU的干預,於是引出了所謂的DMA(直接在I/O設備和內存之間建立數據通路)。

三、DMA方式

DMA方式的改進:
1.基本單位是數據塊(前面是一個字)
2.所傳送的數據,是從設備直接送入內存的,或者相反
3.僅在傳送一個或多個數據塊的開始和結束時,才需CPU 干預,整塊數據的傳送是在DMA控制器的控制下完成的

DMA控制器的組成:
1.命令/狀態寄存器(CR) 。用於接收從CPU 發來的I/0 命令或有關控制信息,或設備的狀態。
2.內存地址寄存器(MAR) 。在輸入時,它存放把數據從設備傳送到內存的起始目標地址;在輸出時,它存放由內存到設備的內存源地址。
3.數據寄存器(DR) 。用於暫存從設備到內存或從內存到設備的數據。
4.數據計數器(DC) 。存放本次要傳送的字(節)數。
在這裏插入圖片描述
DMA方式的思想:CPU 接收到I/O 設備的DMA 請求時,它給I/0 控制器發出一條命令,啓動DMA 控制器,然後繼續其他工作。之後CPU 就把控制操作委託給DMA 控制器,由該控制器負責處理。DMA 控制器直接與存儲器交互,傳送整個數據塊,每次傳送一個字,這個過程不需要CPU 參與。傳送完成後,DMA 控制器發送一箇中斷信號給處理器。因此只有在傳送開始和結束時才需要CPU的參與(預處理【設置CR、MAR、DC等】和後處理【中斷處理、喚醒因該I/O阻塞的進程等】)。
在這裏插入圖片描述
DMA方式與中斷驅動方式的區別:
1.中斷驅動方式在每個數據需要傳輸時中斷 CPU, 而DMA 控制方式則是在所要求傳送的一批數據全部傳送結束時才中斷CPU。
2.中斷驅動方式數據傳送是在中斷處理時由CPU 控制完成的,而DMA 控制方式則是在DMA 控制器的控制下完成的

DMA方式已經很優秀啦!可是,還不滿足,如何進一步提高資源利用率呢?
當然是請更牛逼的祕書(通道),讓老闆(CPU)儘可能的從累活中解放出來。

四、通道控制方式

思想:I/0 通道是指專門負責輸入/輸出的處理機。I/O通道方式是DMA方式的發展,它可以進一步減少CPU的干預,即把對一個數據塊的讀(或寫)爲單位的干預,減少爲對一組數據塊的讀(或寫)及有關控制和管理爲單位的干預。同時,又可以實現CPU、通道和I/0 設備三者的並行操作,從而更有效地提高整個系統的資源利用率。

例如:當CPU要完成一組相關的讀(或寫)操作及有關控制時,只需向I/O 通道發送一條 I/O 指令,以給出其所要執行的通道程序的首地址和要訪問的I/0設備[預處理],通道接到該指令後,執行通道程序便可完成CPU 指定的I/O任務,數據傳送結束時向CPU發中斷請求。(都有預處理和後處理,畢竟CPU纔是老闆!)

I/O通道與一般處理機的區別:通道指令的類型單一,沒有自己的內存,通道所執行的通道程序是放在主機的內存中的,也就是說通道與CPU共享內存。

I/O通道與DMA方式的區別:
1.DMA 方式需要CPU 來控制傳輸的數據塊大小、傳輸的內存位置,而通道方式中這些信息是由通道控制的。
2.每個DMA 控制器對應一臺設備與內存傳遞數據,而一個通道可以控制多臺設備與內存的數據交換(包工頭;也是上面提到的三者能並行的原因)。

五、舉個栗子

想象一位客戶要去裁縫店做一批衣服的情形:

  • 採用程序直接控制時,裁縫沒有客戶的聯繫方式,客戶必須每隔一段時間去裁縫店看看裁縫把衣服做好了沒有,這就浪費了客戶不少的時間。
  • 採用中斷驅動方式時,裁縫有客戶的聯繫方式,每當他完成一件衣服後,給客戶打一個電話,讓客戶去拿,與程序直接控制能省去客戶不少麻煩,但每完成一件衣服就讓客戶去拿一次,仍然比較浪費客戶的時間。
  • 採用DMA方式時,客戶花錢僱一位單線祕書,並向祕書交代好把衣服放在哪裏(存放倉庫),裁縫要聯繫就直接聯繫祕書,祕書負責把衣服取回來並放在合適的位置,每處理完100 件衣服,祕書就要給客戶報告一次(大大節省了客戶的時間)。
  • 採用通道方式時,祕書擁有更高的自主權,與DMA方式相比,他可以決定把衣服存放在哪裏,而不需要客戶操心。而且,何時向客戶報告,是處理完100 件衣服就報告,還是處理完10000件衣服才報告,祕書是可以決定的。客戶有可能在多個裁縫那裏訂了貨,一位DMA 類的祕書只能負責與一位裁縫溝通,但通道類祕書卻可以與多名裁縫進行溝通。

tips~~
其實後一種的方式都是對前一種的方式的一種改進(OS裏面都是爲了提高資源利用率和併發性等才改進的,其他也差不多),不要死記硬背,這些都不是孤立的,回答的時候體現出改進,一步一步的講出來,條理和邏輯會比較清楚哦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章