
為什麼其他 UNIX 系統需要字元設備作為儲存設備,而 Linux 不需要?
其他 UNIX 作業系統(AIX、HPUX、Solaris 和 macOS)則使用類似「/dev/rdisk#」和「/dev/disk#」的儲存裝置。
答案1
我認為這篇維基百科文章https://en.wikipedia.org/wiki/Raw_device解釋得很好:
在計算中,特別是在 Unix 和類 Unix 作業系統中,原始設備是一種與字元設備檔案關聯的特殊邏輯設備,它允許繞過作業系統的快取直接存取硬碟等儲存設備和緩衝區(儘管仍可能使用硬體快取)。像資料庫管理系統這樣的應用程式可以直接使用原始設備,使它們能夠管理資料的快取方式,而不是將此任務推遲給作業系統。
在 FreeBSD 中,所有裝置檔案實際上都是原始裝置。 FreeBSD 4.0 中刪除了對非原始設備的支持,以簡化緩衝區管理並提高可擴展性和效能。1
在 Linux 核心中,原始裝置已被棄用並計劃在某一時刻刪除,因為可以使用 O_DIRECT 標誌來取代。
答案2
在區塊設備介面時可能希望使用原始介面的原因是原始介面通常更快。作業系統僅對區塊特殊檔案執行緩衝區高速緩存。
當從磁帶等媒體讀取或寫入非常大的檔案時,作業系統的緩衝區快取不會提供任何好處,因為不會多次讀取任何區塊。使用原始設備介面可以避免這種多餘的系統活動。
在磁介質上處理非常大的流檔案時使用原始設備介面的另一個原因是原始介面可以支援非常大的區塊大小,從而允許實現非常高的資料傳輸速率。當使用區塊設備介面存取設備時,所有讀取和寫入都必須透過系統緩衝區,因此僅限於檔案系統區塊大小(通常為 1K 或 2K 位元組)。使用原始設備時,可以使用 32K 或更大的區塊大小。 ——約翰·J·瓦利,UNIX 程式設計師參考; 1991 年編輯。
除了效能提升之外,出於快取一致性的原因,還需要卸載透過區塊介面存取的檔案系統。系統快取的區塊在寫回磁碟時可能會破壞透過區塊裝置所做的變更。在 fschk 之前拆卸是一個小麻煩;如果需要直接存取的應用程式是系統的主要用途,那就更糟了。
在回答你原來的問題時,許多問題很大程度上都是歷史問題。在當代系統中,設備緩衝區大於系統緩衝區的情況並不常見。 (您最後一次使用連接到高速印表機且緩衝區大於工作站記憶體的工作站是什麼時候?)