如何解决mmap在内核空间和用户空间中是否相同?
我的问题不仅限于mmap()
,而是所有在内核空间代码和用户空间代码中都使用过的函数(当从用户空间调用时-是系统调用)。一个示例,如果我从用户空间调用mmap()
,其中包括一个上下文切换(SYSENTER / INT 80H)
,但是如果我从内核调用mmap
则不需要。我的问题是mmap()
函数在内核或用户空间中是否相同。如果相同,那么如果从内核调用了mmap,是否可以不执行SYSENTER / INT 80H
?
解决方法
mmap(2)
的实现方式不具说明性,因为它具有兼容性伪像,但这是truncate(2)
的示例:
- 用户空间调用以specially linked函数开头的内核空间。
- function调用内部函数。
- internal function e.g.
do_sys_truncate()
调用到实际的内核API。 - kernel API e.g.
vfs_truncate()
做得很繁重。 - 该内核API就是其余内核代码的exported。
因此,从本质上讲,用户空间mmap()
只是内部内核API的另一条更复杂的路径,内核其余部分可以通过其他更简单的路径访问内部内核API。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。