Linux

open()mmap() 還是兩者都不是,更基本的功能?

  • August 11, 2017

在 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 核心不使用 mmapopen提供並實現它們(對於應用程序級使用者空間程序)。

Linux 核心管理的頁面記憶體更為基礎,並且與這兩個 系統呼叫相關。另請參閱LinuxAteMyRam並考慮使用madvise (2)posix_fadvise(2)readahead(2)來提示頁面記憶體子系統。

這兩個系統呼叫是否根本不同

所有系統呼叫(在syscalls(2) … 中列出)都是不同的。

另請閱讀高級 Linux 程式作業系統:三個簡單的部分(均可免費下載)。

引用自:https://unix.stackexchange.com/questions/385380