英文
remap_file_pages() 系統呼叫¶
remap_file_pages() 系統呼叫用於建立非線性對映,即檔案中頁面的記憶體對映順序不是順序的。相比於重複呼叫 mmap(2),使用 remap_file_pages() 的優勢在於前者不需要核心建立額外的 VMA(虛擬記憶體區域)資料結構。
支援非線性對映需要在核心虛擬記憶體子系統中包含大量重要的非平凡程式碼,包括熱路徑。此外,為了使非線性對映工作,核心需要一種方法來區分普通頁表條目和帶有檔案偏移量的條目 (pte_file)。核心為此目的在 PTE 中保留一個標誌。PTE 標誌是稀缺資源,尤其是在某些 CPU 架構上。如果能夠釋放該標誌用於其他用途,那就太好了。
幸運的是,實際使用 remap_file_pages() 的使用者並不多。僅已知一種企業級 RDBMS 實現會在 32 位系統上使用該系統呼叫,以對映大於 32 位虛擬地址空間線效能夠容納的檔案。由於 64 位系統已廣泛可用,此用例不再關鍵。
該系統呼叫已被棄用,現在已被模擬替代。該模擬建立新的 VMA 而不是非線性對映。對於 remap_file_pages() 的少數使用者來說,它的執行速度會較慢,但 ABI 仍然保留。
模擬的一種副作用(除了效能之外)是,由於額外的 VMA,使用者更容易達到 vm.max_map_count 限制。有關該限制的更多詳細資訊,請參見 DEFAULT_MAX_MAP_COUNT 的註釋。