Linux是
是 open()
、mmap()
還是兩者都不是,更基本的功能?
在 Linux 核心中,訪問文件是更基本的方式
open()
,還是兩者都不是?mmap()
通過“基本”,我的意思是“最終是呼叫另一個還是另一個的簡單輔助函式?”。堆棧網路上有很多關於這兩個功能的性能的問題。這個問題的希望是先驗地了解 Linux 核心內部發生了什麼。是否
open()
呼叫mmap()
或一些基本實現的輔助函式mmap()
?或者,是否mmap()
呼叫open()
或呼叫一些本質上實現的輔助函式open()
?問題的要點是這兩個系統呼叫是否根本不同,或者一個是否是另一個的“便利功能”。
注意mmap(2)通常需要open(2)提供的文件描述符;從這個意義上說,更為根本。另請注意,某些程序的虛擬地址空間不僅被, , mprotect(2)修改,還被其他系統呼叫修改(包括execve(2);另見shm_overview(7))
open``mmap``munmap
順便說一句,Linux 核心不使用
mmap
或open
提供並實現它們(對於應用程序級使用者空間程序)。但Linux 核心管理的頁面記憶體更為基礎,並且與這兩個 系統呼叫相關。另請參閱LinuxAteMyRam並考慮使用madvise (2)、posix_fadvise(2)、readahead(2)來提示頁面記憶體子系統。
這兩個系統呼叫是否根本不同
所有系統呼叫(在syscalls(2) … 中列出)都是不同的。
另請閱讀高級 Linux 程式和作業系統:三個簡單的部分(均可免費下載)。