mmap() 在内核 space 和用户 space 中是否相同?

Is mmap() same in kernel space and user space?

我的问题不仅限于 mmap(),而是内核 space 代码和用户 space 代码中使用的所有函数(从用户 space 调用时 - 系统调用) =20=]代码。一个示例,如果我从用户 space 调用 mmap() ,其中包括上下文切换 (SYSENTER / INT 80H),但是如果我从内核调用 mmap 则不需要。我的问题是,内核或用户 space 中的 mmap() 函数是否相同?如果相同,如果从内核调用,mmap 实现是否设法不执行 SYSENTER / INT 80H

mmap(2) 实现不是说明性的,因为它有兼容性问题,但这里有一个 truncate(2):

的例子
  1. 用户space调用内核space,它以specially linked函数开始。
  2. function调用了一个内部函数。
  3. internal function e.g. do_sys_truncate() 调用实际内核 API。
  4. kernel API e.g. vfs_truncate() 负责繁重的工作。
  5. 那个内核 API 就是 exported 内核代码的其余部分。

因此,本质上,用户space mmap() 只是通往内部内核 API 的另一条更复杂的路径,内核的其余部分可以通过其他方式访问它,更简单的路径。