`open()`、`mmap()` 是更基本的函数,还是两者都不是?

Pra*_*tic 1 linux c files

在 Linux 内核中, 是访问文件的更基本方式open()mmap()还是两者都不是?通过“基本的”,我的意思是“最终调用另一个还是调用另一个的简单辅助函数?”。

关于这两个函数的性能问题,堆栈网络上有很多问题。这个问题的希望是先验地了解 Linux 内核内部发生了什么。是否open()调用mmap()或一些基本实现的辅助函数mmap()?或者,是否mmap()调用open()或调用了一些本质上实现的辅助函数open()

问题的要点是这两个系统调用是否有根本的不同,或者一个是另一个的“便利功能”。

Bas*_*tch 5

请注意,mmap(2)通常需要一个通常由open(2)提供的文件描述符;从这个意义上说,是更根本的。另请注意,某些进程虚拟地址空间不仅被, , mprotect(2)修改,还被其他系统调用修改(包括execve(2);另见shm_overview(7)openmmapmunmap

顺便说一句,Linux 内核不使用 mmapopen提供和实现它们(用于应用程序级用户空间程序)。

但是Linux 内核管理页面缓存,这是更基本的并且与两个 系统调用相关。又见LinuxAteMyRam,并考虑可能使用的madvise(2) posix_fadvise(2) 预读(2)给予提示,页面缓存子系统。

这两个系统调用是否有根本的不同

所有系统调用(在syscalls(2) ... 中列出)都不同。

另请阅读高级 Linux 编程操作系统:三部曲(均可免费下载)。