【linux】为什么 mmap 比系统调用快

98 篇文章 451 订阅 ¥19.90 ¥99.00
文章探讨了mmap比系统调用更快的原因,涉及到系统调用的保护域切换开销、页面错误处理、缓冲区缓存以及内存映射的工作原理。在特定实验环境下,mmap的读取吞吐量通常是系统调用的2-6倍。关键在于mmap避免了频繁的保护域切换,并利用AVX指令高效复制数据。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1.概述

翻译:Why mmap is faster than system calls

当我问我的同事为什么 mmap 比系统调用更快时,答案不可避免地是“系统调用开销”:跨越用户空间和内核之间边界的成本。事实证明,这种开销比我以前想象的要微妙得多,所以让我们深入了解一下性能差异。

背景(如果您是操作系统专家,请跳过):

系统调用。系统调用是一个SPE ç IAL功能,让您的交叉保护域。当程序在用户模式(非特权保护域)下执行时,不允许执行在内核模式(特权保护域)中执行的代码允许的操作。例如,如果没有内核的帮助,在用户空间中运行的程序通常无法读取文件。当用户程序向操作系统请求服务时,系统会通过系统调用保护自己免受恶意程序或错误程序的侵害。系统调用执行一条特殊的硬件指令,通常称为“陷阱”,将控制权转移到内核中。然后内核可以决定是否接受请求。

虽然这种保护非常有用,但它是有代价的。当我们从用户空间进入内核时,我们必须保存硬件寄存器,因为内核可能需要使用它们。此外,由于直接取消引用用户级指针是不安全的(如果它们为空怎么办——那会使内核崩溃!)这些指针所引用的数据必须复制到内核中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值