大話操作系統之I/O

I/O設備管理

什麼是I/O設備

I/Oinput/output 就是(輸入/輸出)

操作系統作爲系統資源的管理者,不僅要對主機內部設備如CPU,內存,外存等設備進行管理,還需要對主機外部設備進行管理。
I/O設備通常是指外部設備,例如鼠標,鍵盤即爲輸入型設備,顯示器即爲輸出型設備;但I/O設備也包含內部設備例如,外存(磁盤),網卡等;(鼠標,鍵盤爲字符型設備,輸入輸出以字符爲單位,採用中斷驅動的方式。磁盤爲塊設備,輸入輸出以磁盤塊大小爲單位)

類UNIX系統中將外設抽象爲一種特殊的文件,用戶可以用與文件操作相同的方式對外部設備進行操作。write寫入數據,read讀出數據。

I/O設備控制器

CPU是無法直接控制I/O設備的機械部件的,必須通過控制I/O控制器,再由I/O控制器來操作I/O設備間接的實現CPUI/O設備的操作。

I/O控制器的功能

在這裏插入圖片描述

  1. 接收和識別CPU發出的I/O指令
    CPU發來的read/write命令,I/O控制器會有相應的控制寄存器來存放命令參數

  2. CPU報告設備的狀態
    I/O控制器會有相應的狀態寄存器,用於記錄I/O設備的當前狀態。例如忙碌,空閒,故障,以便讓CPU知曉。

  3. CPUI/O設備數據交換中轉
    I/O控制器中會設置相應的數據寄存器,輸出時,用於暫存CPU發來的數據,之後再由I/O控制器傳送給機械設備,輸入時,用於暫存機械設備發來的數據,之後CPU從數據寄存器中取走數據。

  4. 地址識別
    類似內存地址,爲了區分不同I/O設備,的輸入和輸出。也需要給各個寄存器來劃分地址,I/O控制器,通過CPU發來的地址來判斷,CPU要調用讀/寫那個寄存器。

    I/O控制方式

    程序直接控制方式

    程序直接控制方式,完成一次I/O讀寫操作流程見下圖:
    在這裏插入圖片描述

CPU執行程序完成一次I/O設備,讀/寫操作的步驟:

  1. CPU執行程序通過控制總線向I/O控制器接口發送讀操作,I/O控制器運行命令,啓動設備,並將設備狀態寄存器設爲1(未就緒,因爲CPU的速度比I/O設備塊,所以CPU得等待I/O設備)。
  2. CPU執行 輪詢檢查程序,檢查I/O控制器的狀態寄存器的狀態。(其實就是在不斷的執行程序循環,若狀態一直是1,說明設備還沒準備好輸入數據,於是CPU會不斷的輪詢執行檢查程序)
  3. 輸入設備準備好數據後將數據傳給I/O控制器,並報告自身狀態。
  4. I/O控制器將輸入的數據存放到,數據寄存器,並修改狀態寄存器狀態爲0(已就緒)。
  5. CPU執行的輪詢程序,發現狀態寄存器的設備狀態已就緒。即可將數據寄存器的內容,讀入到CPU寄存器,再把CPU寄存器中的內容放入內存。(例如用scanf輸入命令參數,參數最後還是要賦值給內存程序中的變量,相反如果執行printf打印命令,需要將內存中的變量輸出到顯示設備中)。

非阻塞I/O模型:
因爲CPU在當前進程上一直在執行輪詢檢查I/O狀態。所以放到這道作業的執行上過程上來講是非阻塞的

非阻塞I/O模型特點:
CPU干預率:很頻繁,CPU和I/O設備只能串行工作,CPU需要一直輪詢檢查,長期處於"忙等"狀態。
缺點:cpu利用率低。
數據傳送單位:每次讀/寫入一個字
讀操作數據流向:I/O設備->CPU->內存
寫操作數據流向:內存->CPU->I/O設備
同步異步:同步執行模式。
關鍵詞:輪詢。

中斷驅動方式

正式因爲程序直接控制方式,程序執行需要一直忙等導致CPU利用率底下等問題,我們引入的中斷機制。中斷驅動方式完成一次讀寫操作流程如下圖:
在這裏插入圖片描述

在中斷驅動模式下,CPU執行程序完成一次I/O讀寫操作步驟:

  1. CPU通過控制總線向I/O控制器接口發送讀命令,CPU將等待I/O的進程阻塞。切換到別的進程進行執行。
  2. I/O控制器接受CPU命令,啓動I/O設備,準備數據。
  3. 外設準備好數據,將數據傳送給I/O控制器,I/O控制器向CPU發送中斷信號。
  4. CPU檢測到中斷信號,保存當前執行進程運行上下文環境,轉去執行中斷處理程序去處理該中斷。
  5. CPU從I/O控制器中的數據寄存器讀取一個字的數據傳送到CPU寄存器,再寫入內存中。接着CPU恢復執行因等待I/O數據阻塞的進程的上下文運行環境,然後繼續執行。
    注意:cpu會在每個指令週期末尾檢查中斷;中斷處理過程需要保護,恢復進程的運行環境,這是需要一定時間開銷的。如果中斷髮生的頻率太高,也會降低系統性能。

阻塞IO模型:
因爲CPU在發送I/O指令以後,可以阻塞當前進程,切換執行其他進程。當前作業執行過程是阻塞的。CPU並沒有在這個進程上進行忙等。
CPU干預率:每次I/O之前,完成之後需要CPU介入,等待I/O完成之前,CPU執行其他進程。CPU利用率明顯提高,
缺點:每個字在I/O設備和內存之間傳輸都需要經過CPU,頻繁的中斷處理會消耗較多的CPU時間。
數據傳送單位:每次讀/寫入一個字
讀操作數據流向:I/O設備->CPU->內存
寫操作數據流向:內存->CPU->I/O設備
同步異步:同步執行模式。(此進程處於"閒等",進程並沒有去做其他事情或者完成)
關鍵詞:中斷。

DMA方式

因爲中斷一次只能從I/O設備讀取一個字,並且得通過CPU再到內存,導致浪費CPU資源。因此引入了DMA方式(Direct Memory Access,直接存儲器存取,主要用於塊設備的I/O控制)
具體步驟不在贅述;相較於中斷做出了一下改進。

  • 數據傳送單位是磁盤塊,不在是以一個字爲單位;
  • 數據流向是從設備直接流向內存,或者從內存直接到設備,不需要CPU作爲"快遞小哥"
  • 僅在傳送一個或者多個塊的開始和結束時需要CPU干預,進一步提升效率。

DMA控制器也是I/O控制器的一種,和一般I/O控制器的區別在於數據的傳輸不進過CPU了。系統將數據從I/O外設讀入到內存的任務交給DMA控制器去做,DMA控制器把輸入數據一個字一個字的放到DR數據寄存器中,等DR數據達到一個或者規定的多個塊以後再由DMA控制器寫入內存,DMA控制向CPU發出中斷指令;喚起進程執行後續處理。數據傳輸效率和CPU利用率大幅提高。
在這裏插入圖片描述

通道控制模式

通道控制模式是DMA模式的升級版,可以一次性傳輸一組數據,由通道硬件支持。
通道:一種硬件,可以理解爲是一個弱雞版的CPU,通道可以識別並執行一系列通道指令,也就是CPU把把任務清單交給通道。通道接管I/O。
簡單理解一下下圖不再贅述。
在這裏插入圖片描述

緩衝區

進行I/O操作的時候,由於CPU速度快,I/O設備速度慢,如果CPU每次都向I/O設備輸出一個字符,就得產生中斷,等待I/O設備,導致大量中斷CPU利用率低,爲了解決數據傳輸速度不匹配的問題,需要在內存中開闢一塊存儲空間作爲緩衝區。

緩衝區的作用
CPU輸出數據的時候,可以把數據快速入緩衝區,之後就可以做別的事情了,慢速的I/O設備可以慢慢的從緩衝區中取走數據,等I/O完成以後再向CPU發出中斷信號。CPU在此期間可以做更多的事情,同時提高了CPU與I/O設備直接的並行性。

在這裏插入圖片描述

單緩衝

用戶進程請求磁盤讀入若干塊的數據,若採用單緩衝策略,操作系統會在主存中爲,其分配一個緩衝區。

注意:

  • 當緩衝區非空時,不能往緩衝區輸入數據,只能從緩衝區輸出數據。
  • 當緩衝區爲空時,不能從緩衝區輸出數據,可以往緩衝區輸入數據,但是必須把緩衝區充滿以後,才能從緩衝區把數據輸出。

管道通信中的"管道"其實就是緩衝區。要實現雙向傳輸,必須設置兩個管道。

緩衝池

緩衝池由系統中共用的緩衝區組成,這些緩衝區按使用情況可以分爲:空緩衝隊列,裝滿輸入數據的緩衝隊列(輸入隊列),裝滿輸出數據的緩衝隊列(輸出隊列)。

另外可以根據一個緩衝區實際運算中扮演的功能不同,又設置了四種工作緩衝區:

  • 用於收容輸入數據的工作緩衝區(hin)
  • 用於提取輸入數據的工作緩衝區(sin)
  • 用於收容輸出數據的工作緩衝區(hout)
  • 用於提取輸出數據的工作緩衝區(sout)
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章