
檔案 I/O
|
71
緩衝區在核心內部會被表示成
buffer_head
資料結構。此資料結構中記錄了與緩衝區有
關的各種中介資料,例如緩衝區是否已經遭到改變。其中還包含了一個指標,用於指向
實際的資料。此資料就擺在頁面快取區。於是緩衝區子系統與頁面快取區可以被整合在
一起。
在 Linux 核心早期的版本(2.4 之前)中,緩衝區子系統與頁面快取區是分開的,因此
會同時用到頁面快取以及緩衝快取區。這意味著,資料可能同時存在於緩衝快取區(遭
到改變的緩衝區)以及頁面快取區(被快取的資料)。當然,要讓兩個獨立的快取區達
到同步必須費一些功夫。Linux 核心自 2.4 版開始,統一使用頁面快取區,這是一個受
歡迎的改進。
Linux 的延後寫入功能以及緩衝區子系統,提供了快速寫入的能力,不過代價是電力中
斷時會有資料遺失的風險。為了免除此風險,有此疑慮以及關鍵的應用程式,可以採用
同步 I/O (本章稍早有討論)。
結語
本章介紹了 Linux 系統程式設計的基礎知識:檔案 I/O。在 Linux 之類的系統上,會儘
可能將一切表示成檔案,所以知道如何開啟、讀取、寫入以及關閉檔案相當重要。這些
都是典型的 Unix 操作,而且被包含在許多標準中。
下一章將介紹緩衝式 I/O 以及標準 C 程式庫的標準 I/O 介面。標準 C 程式庫不僅是方便
使用而已;在用戶空間中,緩衝式 I/O 為效能提供了重大的改進。