微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

内存分页和CPU缓存行之间的关系

如何解决内存分页和CPU缓存行之间的关系

这是我对Pagingcpu Cache lines的理解:

Paging是一种内存管理方案,计算机通过该方案来存储和检索硬盘中的数据。 Pagingcpu负载/存储无关。

Cache line是在内存和cpu寄存器之间存储和检索数据的大小。 Cache line与硬盘加载/存储无关。

我的问题是:

1-上面提到的我的理解正确吗?

2-发生Page fault时,操作系统如何知道在硬盘中寻找要加载数据的位置?假设我需要从内存中加载地址0x123,但是该地址尚未分页0x123数据位于磁盘上的什么位置?

解决方法

您所说的大部分内容都不正确。分页部分由CPU实现,部分由操作系统实现。

分页与RAM有关,主要用于更好的内存管理。

如今,对(在Linux中)交换空间的需求已不多。当操作系统缺少RAM空间时,交换空间用于将RAM中的页面临时存储在硬盘上。由于RAM越来越以较低的成本提供。我认为很少使用交换空间。

对于高速缓存,CPU中有多个高速缓存。已知主缓存具有多个级别,例如L1,L2等。它存储具有更高重用机会的页面。它由CPU管理,对操作系统不可见。

TLB是另一个缓存,用于存储虚拟地址到物理地址的转换。这样做是为了不必每次在代码中访问某个虚拟地址时都需要重做翻译。它也由CPU管理。更改执行过程时,必须刷新TLB。

分页内存管理方案用于管理RAM内存而不是硬盘。

在x86上,有一个控制寄存器(CR3),用于存储用于虚拟地址转换的第一个表的地址。通过在处理器的控制寄存器(CR0,CR4)中设置一些标志来启用分页后,它将开始使用内存管理单元(MMU)将您引用的虚拟地址转换为物理地址。在地址总线上输出值之前,该值将通过MMU进行转换。 MMU将查看CR3寄存器引用的地址,该寄存器位于RAM中,并由操作系统在启动时或执行期间初始化。

例如,对于x86-64(最现代的),分页方案由Intel IA-32e调用。它具有4个分页级别,分别称为PLM4,PDPT,PDT和PT(请参见https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf)。

在此分页方案中,虚拟地址将具有64位,但仅使用48位。 9位用作每4个表的偏移量。最后12位(最低有效位)将用作物理页面本身的偏移量。

如果您的地址为0x123。这给出了

0x00 00 00 00 00 00 01 23

或二进制

Not used             Offset in pml4  Offset in pdpt  Offset in pdt
0000000000000000     000000000       000000000       000000000
Offset in pt   Offset in page
000000000      0001 0010 0100

因此,您将在pml4中引用条目0,在pdpt中引用0,在pdt中引用0,在pt中引用0。这些条目引用的页面中的偏移量为0x123。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。