/ 通用塊層 /
通用塊層是 linux 中的一個重要組件,用于管理不同塊設備的統一接口,減少不同塊設備的差異帶來的影響。它位于文件系統和磁盤驅動之間,類似于 JAVA 中的適配器模式,讓我們無需關注底層實現,只需提供固定接口即可。
通用塊層的設計目的是為了提高磁盤讀寫的效率和可靠性。它通過對 I/O 請求進行排隊和調度,以最大化磁盤的吞吐量和響應時間。通用塊層可以管理多個塊設備,并將它們抽象為一個統一的接口,使得文件系統和應用程序可以無差別地訪問這些設備。
在 Linux 內核中,有五種主要的 I/O 調度算法可供選擇,它們分別是沒有調度算法、先入先出調度算法、完全公平調度算法、優先級調度算法和最終期限調度算法。這些算法適用于不同的場景和需求。
第一種,沒有調度算法,就是沒有任何特殊的處理,直接將文件系統和應用程序的 I/O 請求發送給塊設備。這種算法常用在虛擬機中,因為磁盤 I/O 調度交由物理機系統負責。
第二種,先入先出調度算法,就是按照 I/O 請求的到達順序進行調度,先進入 I/O 調度隊列的請求會先被處理。
第三種,完全公平調度算法,是大部分系統默認使用的調度算法。它為每個進程維護一個 I/O 調度隊列,并根據時間片來均勻分配每個進程的 I/O 請求。
第四種,優先級調度算法,根據請求的優先級進行調度,優先級高的請求先被處理。這種算法適用于運行大量進程的系統,比如桌面環境或多媒體應用。
第五種,最終期限調度算法,為讀寫請求創建了不同的 I/O 隊列,以提高機械磁盤的吞吐量,并確保達到最終期限的請求優先處理。這種算法適用于 I/O 壓力較大的場景,比如數據庫等。
另外多說一句優先級調度算法,它適合桌面環境或多媒體應用的原因主要有以下幾點:
響應性:桌面環境或多媒體應用通常需要實時的響應,對于用戶的操作或多媒體數據的播放,延遲較小的 I/O 響應是非常重要的。通過使用優先級調度算法,可以確保高優先級的 I/O 請求被優先處理,從而提高系統的響應性能。
性能優化:桌面環境或多媒體應用通常需要處理大量的數據,如圖像、音頻或視頻等。通過使用優先級調度算法,可以將這些需要優先處理的數據請求置于較高的優先級,確保它們能夠及時得到處理,從而提高整體的性能和流暢度。
平衡資源:桌面環境或多媒體應用通常需要同時運行多個任務或進程,這些任務可能會涉及到不同的資源需求。通過使用優先級調度算法,可以在資源有限的情況下,合理地分配和管理這些任務的 I/O 請求,避免某些任務長時間等待,從而實現資源的平衡利用。
/ 存儲系統 I/O 軟件分層 /
在前面的討論中,我們提到了存儲系統的各個組成部分,包括設備、設備控制器、驅動程序和通用塊層。現在結合文件系統原理,我們來詳細了解一下 Linux 存儲系統的 I/O 軟件分層。
Linux 存儲系統的 I/O 軟件分層可以分為三個層次,分別是文件系統層、通用塊層和設備層。它們之間的關系如下圖所示:
這三個層次的作用是相互協作,實現對存儲系統的高效管理和操作。
文件系統層是用戶與存儲系統交互的接口,通過虛擬文件系統和具體的文件系統實現,為應用程序提供了標準的文件訪問接口。它負責將用戶的文件操作請求轉化為對底層存儲設備的讀寫操作,并管理文件的元數據和目錄結構。
通用塊層在文件系統層之下,負責對文件系統的 I/O 請求進行排隊和調度,以提高磁盤的讀寫效率。它包括塊設備的 I/O 隊列和 I/O 調度器,通過合理的調度算法,選擇最優的順序和時間進行 I/O 操作。
設備層是位于存儲系統的最底層,包括硬件設備、設備控制器和驅動程序。它負責實際執行物理設備的 I/O 操作,將數據讀取到內存或將數據寫入到磁盤。
為了提高 I/O 的效率,Linux 提供了多種緩存機制。頁緩存、索引節點緩存和目錄項緩存等緩存機制用于減少對塊設備的直接訪問,提高對文件數據的讀取和寫入效率。此外,還有緩沖區用于緩存塊設備的數據,以減少對磁盤的頻繁訪問。
為了滿足特定設備的功能和屬性的檢查和配置需求,Linux 提供了 ioctl 接口,它是一種通用的輸入輸出控制接口,用于對特定設備進行屬性和功能的控制和修改。
總的來說,前面討論了這么多知識點,你會發現從介紹操作系統開始到現在,所有操作都有一個中間層做‘適配’,其實目的很簡單,中間層既相當于我們的攔截器一樣,對上層的操作請求進行優化,又可以像適配器一樣屏蔽掉底層設備的各個差異方便操作而已。
/ 總結 /
通用塊層是 Linux 中的重要組件,位于文件系統和磁盤驅動之間,提供統一接口,優化磁盤讀寫效率和可靠性。它管理多個塊設備,抽象為統一接口,使得文件系統和應用程序可以無差別訪問。通用塊層通過排隊和調度 I/O 請求,最大化磁盤吞吐量和響應時間。Linux 內核提供多種 I/O 調度算法適用于不同需求。當你學完這些知識點是否你自己可以大致想出敲完字母‘A’后,是如何顯示到屏幕上的嗎?