linux – TLB中的内核内存(虚拟地址条目)?

前端之家收集整理的这篇文章主要介绍了linux – TLB中的内核内存(虚拟地址条目)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Linux是操作系统,ARM是在此上下文中引用的处理器.

TLB是否包含内核和用户空间虚拟地址?
内核内存从0xc000_0000开始,然后转到0xFFFF_FFFF
前3 GB属于用户空间的位置.在进程之间的上下文切换之间,刷新TLB.

TLB是否包含内核和用户空间虚拟地址?

内核内存(虚拟)直接对应物理内存(只需与0xC000_0000进行偏移即可为我们提供物理地址).是否有必要在TLB中使用内核(虚拟)(如果你说它存在于TLB中)?它应该只有用户空间地址.

解决方法

我们在现代cpu中进行虚拟到物理地址转换的主要原因是为了使我们能够更高效,更好地控制内存使用:

>分配任何物理内存,RAM(连续或不连续),并使其可在虚拟地址空间中的任何位置(连续或不连续)访问,而不会浪费内存碎片.
>使用磁盘或其他存储器扩展物理内存,RAM.
>使地址空间的某些部分仅可读或不可执行或仅内核等,并保护它们免受未经授权或错误的访问.
>将应用程序的存储器彼此隔离,以进一步提高保护,安全性和可靠性.
>分享记忆.

页表使这一切成为可能.

您确实希望能够在内核的虚拟地址空间中映射和取消映射物理内存,并且通常此转换机制可在整个系统中运行.当然,翻译是有代价的,因为您现在需要查阅和维护页面表,这会导致性能损失.但一切都没有丢失:

> TLB在一定程度上缓解了这个问题.他们缓存翻译.
>更大的页面(例如ARMv7-A的大页面和部分)可以提供更多帮助,因为每个翻译后的内存需要更少的TLB条目.
>还有像全球页面这样的东西.当您在应用程序之间切换并需要刷新当前TLB时,可以通过ASID与应用程序的ASID匹配来执行Invalidate TLB条目,从而避免TLB中的全局页面无效.如果将内核的页面标记为全局,则不会使其翻译无效,并且内核本身不会受到不必要的TLB失效的影响.

例如,有关ARM虚拟内存系统体系结构(VMSA),页表,TLB等的特定详细信息,请参阅“ARM®体系结构参考手册ARM®v7-A和ARM®v7-R版本”.

原文链接:https://www.f2er.com/linux/394360.html

猜你在找的Linux相关文章