簡體   English   中英

虛擬 memory:操作系統是否總是將整個文件加載到物理 memory 中?

[英]Virtual memory: does the operating system always load the whole file into physical memory?

我正在研究虛擬 memory 是如何工作的,我不確定如果我使用fread()和類似方法加載一個大文件(雖然小於物理 memory)會發生什么。

據我了解,操作系統可能不會分配整個相應的物理 memory。 相反,當我的程序讀取文件的特定部分(尚未映射到物理內存的部分)時,它可以等到觸發頁面錯誤。

這基本上是 memory 映射文件的行為。 那么,如果我的假設是正確的,那么使用像mmap()這樣的系統調用有什么好處呢? 只是為了避免使用fread()閱讀時通常的 for-loop 舞蹈,也許?

read(),fread() 會將您指定的數量讀取到您提供的緩沖區中。 Mmap 是 kernel 文件緩存的單獨接口。 兩者相交的是 kernel 很可能首先將文件讀入緩存緩沖區,然后將這些緩存緩沖區的 select 位復制到您的用戶緩沖區中。

這種雙重復制通常是必要的,因為您的程序沒有提供必要的 alignment 和底層設備所需的阻塞大小,如果數據需要轉換(解密、解壓縮),它需要一個地方來做。

這個 kernel 緩存與文件保持一致,因此系統范圍內通過它讀寫 go。 如果你mmap文件,你也許可以避免雙重復制; 但必須處理未宣布的文件更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM