• Operating System Video Tutorials

作業系統 - 輸入/輸出軟體



輸入/輸出軟體通常按以下幾層組織:

  • 使用者級庫 - 為使用者程式提供簡單的介面來執行輸入和輸出。例如,stdio是C和C++程式語言提供的庫。

  • 核心級模組 - 提供裝置驅動程式以與裝置控制器互動,以及裝置驅動程式使用的與裝置無關的I/O模組。

  • 硬體 - 此層包括實際的硬體和硬體控制器,它們與裝置驅動程式互動並使硬體工作。

I/O軟體設計中的一個關鍵概念是它應該是與裝置無關的,這意味著應該能夠編寫訪問任何I/O裝置的程式,而無需預先指定裝置。例如,將檔案作為輸入讀取的程式應該能夠讀取軟盤、硬碟或CD-ROM上的檔案,而無需為每個不同的裝置修改程式。

I/O Softwares

裝置驅動程式

裝置驅動程式是可以插入作業系統的軟體模組,用於處理特定裝置。作業系統藉助裝置驅動程式來處理所有I/O裝置。裝置驅動程式封裝了裝置相關的程式碼,並實現了一個標準介面,以便程式碼包含裝置特定的暫存器讀/寫操作。裝置驅動程式通常由裝置製造商編寫,並隨裝置一起在CD-ROM上提供。

裝置驅動程式執行以下任務:

  • 接受來自上層裝置無關軟體的請求。
  • 與裝置控制器互動以進行I/O操作並執行必要的錯誤處理。
  • 確保請求成功執行。

裝置驅動程式處理請求的方式如下:假設有一個讀取塊N的請求。如果驅動程式在請求到達時處於空閒狀態,它會立即開始執行請求。否則,如果驅動程式正忙於處理其他請求,它會將新請求放入掛起請求佇列中。

中斷處理程式

中斷處理程式,也稱為中斷服務例程或ISR,是作業系統或更具體地說是在裝置驅動程式中的一段軟體或更具體地說是一個回撥函式,其執行由接收中斷觸發。

當中斷髮生時,中斷程式執行必要的處理,更新資料結構並喚醒正在等待中斷髮生的程序。

中斷機制接受一個地址——一個數字,它從一小組中選擇特定的中斷處理例程/函式。在大多數架構中,此地址是在稱為中斷向量表的表中儲存的偏移量。此向量包含專用中斷處理程式的記憶體地址。

與裝置無關的I/O軟體

與裝置無關的軟體的基本功能是執行所有裝置通用的I/O功能,併為使用者級軟體提供統一的介面。雖然很難編寫完全與裝置無關的軟體,但我們可以編寫一些在所有裝置中通用的模組。以下是與裝置無關的I/O軟體的功能列表:

  • 為裝置驅動程式提供統一介面
  • 裝置命名 - 助記符名稱對映到主裝置號和次裝置號
  • 裝置保護
  • 提供與裝置無關的塊大小
  • 緩衝,因為從裝置來的資料不能儲存在最終目的地。
  • 塊裝置上的儲存分配
  • 分配和釋放專用裝置
  • 錯誤報告

使用者空間I/O軟體

這些是提供更豐富和簡化的介面來訪問核心功能或最終與裝置驅動程式互動的庫。大多數使用者級I/O軟體由庫過程組成,但有一些例外,例如卷繞系統,這是一種在多程式設計系統中處理專用I/O裝置的方法。

I/O庫(例如,stdio)位於使用者空間,以提供與駐留在作業系統的與裝置無關的I/O軟體的介面。例如,putchar()、getchar()、printf()和scanf()是C程式語言中可用的使用者級I/O庫stdio的示例。

核心I/O子系統

核心I/O子系統負責提供許多與I/O相關的服務。以下是提供的一些服務。

  • 排程 - 核心排程一組I/O請求以確定執行它們的良好順序。當應用程式發出阻塞I/O系統呼叫時,請求將被放置在該裝置的佇列中。核心I/O排程程式重新排列佇列的順序以提高整體系統效率和應用程式體驗的平均響應時間。

  • 緩衝 - 核心I/O子系統維護一個稱為緩衝區的記憶體區域,該區域在兩個裝置之間或裝置與應用程式操作之間傳輸資料時儲存資料。緩衝是為了應對資料流的生產者和消費者之間的速度不匹配,或者為了適應具有不同資料傳輸大小的裝置。

  • 快取 - 核心維護快取記憶體,這是一個快速記憶體區域,其中包含資料的副本。訪問快取副本比訪問原始副本更有效。

  • 卷繞和裝置預留 - 卷繞是一個緩衝區,用於儲存裝置(例如印表機)的輸出,該裝置無法接受交錯的資料流。卷繞系統一次將一個排隊的卷繞檔案複製到印表機。在某些作業系統中,卷繞由系統守護程式程序管理。在其他作業系統中,它由核心執行緒處理。

  • 錯誤處理 - 使用受保護記憶體的作業系統可以防止許多型別的硬體和應用程式錯誤。

廣告