1.概述
翻译:Why mmap is faster than system calls
当我问我的同事为什么 mmap 比系统调用更快时,答案不可避免地是“系统调用开销”
:跨越用户空间和内核之间边界的成本。事实证明,这种开销比我以前想象的要微妙得多,所以让我们深入了解一下性能差异。
背景(如果您是操作系统专家,请跳过
):
系统调用。系统调用是一个SPE ç IAL功能,让您的交叉保护域。当程序在用户模式(非特权保护域)下执行时,不允许执行在内核模式(特权保护域)中执行的代码允许的操作。例如,如果没有内核的帮助,在用户空间中运行的程序通常无法读取文件。当用户程序向操作系统请求服务时,系统会通过系统调用保护自己免受恶意程序或错误程序的侵害。系统调用执行一条特殊的硬件指令,通常称为“陷阱”,将控制权转移到内核中。然后内核可以决定是否接受请求。
虽然这种保护非常有用,但它是有代价的。当我们从用户空间进入内核时,我们必须保存硬件寄存器,因为内核可能需要使用它们。此外,由于直接取消引用用户级指针是不安全的(如果它们为空怎么办——那会使内核崩溃!)这些指针所引用的数据必须复制到内核中。
当