操作系統-I/O設備


I/O設備綜述

I/O設備定義

I/O設備是硬件中由人(或其他系統)使用與計算機進行通信的部件。

例如,鍵盤或鼠標是計算機的輸入設備,而監控器和打印機是輸出設備。計算機之間的通信設備(如電信調制解調器和網卡)通常運行輸入和輸出操作。操作系統需要控制計算機的所有I/O設備。

I/O設備划分

根據信息交換的單位可講I/O設備可分為塊設備(block device)和字符設備(character device)兩種。

  • 塊設備:由於信息的存取總是以數據塊為單位,所以存儲信息的設備稱為塊設備。它屬於有結構設備,如磁盤等。磁盤設備的基本特征是傳輸速率較高,以及可尋址,即對它可隨機地讀/寫任一塊。
  • 字符設備:用於數據輸入/輸出的設備為字符設備,因為其傳輸的基本單位是字符。它屬於無結構類型,如交互式終端機、打印機等。它們的基本特征是傳輸速率低、不可尋址,並且在輸入/輸出時常釆用中斷驅動方式。

該划分不一定能包括所有的I/O設備,比如說時鍾(按照預先設置好的時間間隔去產生中斷)。

標准設備與標准模型

系統架構

一個典型的計算機系統架構如下圖:

image-20210905234857139

為何該系統是分層的結構?

  1. 物理布局(越快的總線越短,因此高性能的內存總線沒有足夠的空間連接太多設備)
  2. 造價成本(在工程上高性能總線的造價非常高)

采用分層結構,可以讓要求高性能的設備(比如顯卡)離 CPU 更近一些,低性能的設備離 CPU 遠一些。

標准設備

假定I/O設備是如下圖所示的一種標准設備(非真實存在的設備)

image-20210905235622385

一個標准設備包含兩部分:

  1. 硬件接口(interface)。所有設備都有自己的特定接口以及典型交互的協議,系統軟件通過該接口來控制設備的操作。
  2. 內部結構(internal structure)。這部分包含設備相關的特定實現,負責具體實現設備展示給系統的抽象接口。非常簡單的設備通常用一個或幾個芯片來實現它們的功能。更復雜的設備(RAID,廉價冗余磁盤陣列)會包含簡單的 CPU、一些通用內存、設備相關的特定芯片,來完成它們的工作。

標准協議

標准設備中包含3個寄存器:

  1. 狀態(status)寄存器, 可以讀取並查看設備的當前狀態。
  2. 命令(command)寄存器,用於通知設備執行某個具體任務/
  3. 數據(data)寄存器,將數據傳給設備或從設備接收數據。

通過讀寫這些寄存器,操作系統可以控制設備的行為。假設操作系統與標准設備交互的標准協議如下:

While (STATUS == BUSY)
 ; // wait until device is not busy
Write data to DATA register
Write command to COMMAND register
 (Doing so starts the device and executes the command)
While (STATUS == BUSY)
 ; // wait until device is done with your request 

標准協議分為4步:

  1. 操作系統反復讀取狀態寄存器,等待設備進入可以接收命令的就緒狀態,即輪詢(polling)設備。
  2. 操作系統下發數據到數據寄存器。
  3. 操作系統將命令寫入命令寄存器。
  4. 操作系統再次通過不斷輪詢設備,等待並判斷設備是否執行完成命令。

I/O設備的編址方式

獨立編址

I/O端口獨立編址即內存地址空間與外設地址空間是相互獨立的。

對I/O設備的訪問需要使用明確的 I/O 指令(in/out,通常為特權指令)。這些指令規定了操作系統將數據發送到特定設備寄存器的方法,從而允許構造標准協議。

統一編址

內存映射 I/O(memory- mapped I/O):將每個I/O端口當作一個存儲單元看待,端口與存儲器單元在同一個地址空間中進行編址。

當需要訪問設備寄存器時,操作系統裝載(讀取)或者存入(寫入) 到該內存地址;然后硬件會將裝載/存入轉移到設備上,而不是物理內存。

image-20210906004419846

基本輸入輸出方式

輪詢

輪詢,即操作系統通過反復讀取狀態寄存器,等待設備進入可以接收命令的就緒狀態。

情況1,輪詢:進程 1 在 CPU 上運行一段時間(對應 CPU 那一行上重復的 1),然后發出一個讀取數據的 I/O 請求給磁盤。操作系統簡單自旋,不斷輪詢設備狀態,直到設備完成 I/O 操作(對應其中的 p)。當設備完成請求的操作后,進程 1 又可以繼續運行。

image-20210906005221931

中斷

通過中斷(interrupt)可以減少 CPU 開銷。有了中斷后,CPU 不再需要不斷輪詢設備,而是向設備發出一個請求,然后就可以讓對應進程睡眠,切換執行其他任務。當設備完成了自身操作,會拋出一個硬件中斷,引發 CPU 跳轉執行操作系統預先定義好的中斷服務例程(Interrupt Service Routine,ISR),或更為簡單的中斷處理程序(interrupt handler)。中斷處理程序是一小段操作系統代碼,它會結束之前的請求(比如從設備讀取到了數據或者錯誤碼)並且喚醒等待 I/O 的進程繼續執行。

情況2,中斷:在磁盤處理進程 1 的請求時,操作系統在 CPU 上運行進程 2。磁盤處理完成后,觸發一個中斷,然后操作系統喚醒進程 1 繼續運行。這樣,在這段時間,無論 CPU 還是磁盤都可以有效地利用。

image-20210906005512730

直接存儲器存取(DMA)

DMA(Direct Memory Access)。DMA 引擎是系統中的一個特殊設備, 它可以協調完成內存和設備間的數據傳遞,不需要 CPU 介入。

為了能夠將數據傳送給設備,操作系統會通過編程告訴 DMA 引擎數據在內存的位置,要拷貝的大小以及要拷貝到哪個設備。在此之后,操作系統就可以處理其他請求了。當 DMA 的任務完成后,DMA 控制器會拋出一個中斷來告訴操作系統自己已經完成數據傳輸。

情況3,不使用DMA的一般情況:進程 1 在運行過程中需要向磁盤寫一些數據,所以它開始進行 I/O 操作,將數據從內存 拷貝到磁盤(其中標示 c 的過程)。拷貝結束后,磁盤上的 I/O 操作開始執行,此時 CPU 才 可以處理其他請求。

image-20210906005926067

情況4,使用DMA:數據的拷貝工作都是由 DMA 控制器來完成的。因為 CPU 在此時是空閑的,所以操作系統可以讓它做一些其他事情,比如此處調度進程 2 到 CPU 來運行。 因此進程 2 在進程 1 再次運行之前可以使用更多的 CPU。

image-20210906010024950

reference

[1] wiki

[2] 操作系統導論(ostep)

[3] 現代操作系統

[4] 微型計算機原理與接口技術


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM