在 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) ,预读(2)给予提示,页面缓存子系统。
这两个系统调用是否有根本的不同
所有系统调用(在syscalls(2) ... 中列出)都不同。
另请阅读高级 Linux 编程和操作系统:三部曲(均可免费下载)。