linux日志跨页复制,linux – 现代cpus如何处理跨页未对齐访问?

我并不过分熟悉英特尔架构的内涵,但ARM架构在“未对齐数据访问限制”下的单个项目中总结了这一具体细节:

An operation that performs an unaligned access can abort on any memory access that it makes,and can abort on more than one access. This means that an unaligned access that occurs across a page boundary can generate an abort on either side of the boundary.

因此,除了可能从单个操作生成两个页面错误之外,它只是另一个未对齐的访问.当然,这仍然假设“只是另一个未对齐的访问”的所有警告 – 即它仅在普通(非设备)内存上有效,仅对于某些加载/存储指令,不保证原子性并且可能很慢 – 微架构将可能从多个对齐的访问1合成一个未对齐的访问,这意味着多个MMU转换,如果它跨越行边界,可能有多个缓存未命中等.

另一方面,如果未对齐的访问不跨越页面边界,那么所有这意味着如果第一个“子访问”的对齐地址转换为OK,则任何后续部分的对齐地址肯定会被击中在TLB中. MMU本身并不关心 – 它只是翻译处理器提供的一些地址.除非MMU引发页面错误,否则内核甚至不会进入图片,即便如此,它也与任何其他页面错误无异.

我已经快速浏览了英特尔手册并且他们的答案没有突然出现 – 但是在“数据类型”一章中他们说:

[…] the processor requires two memory accesses to make an unaligned access; aligned accesses require only one memory access.

如果不是大致相同(即每个对齐访问一个翻译),我会感到惊讶.

现在,这是大多数应用程序级程序员不必担心的事情,只要他们自己行事 – 在汇编语言之外,实际上很难进行未对齐的访问.可能的罪魁祸首是打字指针和搞乱结构包装,这两种情况都是99%的时间没有理由接近,而另外1%的事情几乎肯定是错误的.

[1] ARM体系结构伪代码实际上将未对齐访问指定为一系列单独的字节访问,但我希望实现实际上在适当的情况下将其优化为更大的对齐访问.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值