内存寻址之分页机制

本文详细介绍了分页机制,包括启用分页的原因、页与页表的概念、页表项结构、线性地址到物理地址的转换以及Linux中的分页实现。通过分页,线性地址被划分为页,映射到不连续的物理地址,解决了物理地址不连续的问题。文章还探讨了为何使用两级页表和快表 TLB 在提高地址转换效率上的作用。
摘要由CSDN通过智能技术生成

写在前面:

分页机制完成线性地址到物理地址的转换 80x86 规定分页机制是可选的。分段和分页没有什么必然联系,分段可以说是 Intel 的 CPU 一直保持着的一种机制,而分页只是保护模式下的一种内存管理策略。想开启分页机制,CPU必须工作在保护模式,而工作在保护模式可以不开启分页。

分页机制由控制寄存器 CR0 中的 PG 位启用,如PG=1则启用分页机制,把线性地址转换为物理地址;如果PG=0则直接把段机制产生的线性地址当作物理地址使用。

为什么要分页?

问题的本质是在目前只分段的情况, CPU 认为线性地址等于物理地址,而线性地址是由编译器编译出来的,它本身是连续的,所以物理地址也必须要连续才行,但我们可用的物理地址不连续。换句话说,如果线性地址连续,而物理地址可以不连续,不就解决了吗。所以要解除线性地址和物理地址一一对应的关系,然后将他们的关系重新建立,通过某种映射关系,可以将线性地址映射到任意物理地址。

页与页表

为了效率起见,将线性地址空间分成若干大小相等的片,称为页( Page )。相应的地,逻辑上把内存划分为与页大小相等的若干存储块,称为( 物理 )块或页面( Page Frame )。常见的页面大小为 4KB,每一页都有 4K 字节长,每一页的起始地址都能被 4K 整除。

分页机制通过把线性地址空间中的页,重新定位到物理地址空间来进行管理,因为每个页面的整个 4K 字节作为一个单位来映射,并且每个页面都对齐 4K 字节的边界,因此,线性地址的低 12 位经过分页机制直接地作为物理地址的低 12 位使用。所以,线性地址的高 20位可用来定位一个物理页,低 12 位可用来在该物理页内寻址。

页表项结构

页表就是个 N 行 l 列的表格,页表中的每一行(只有一个单元格)称为页表项( Page Table Entry,PTE ),其大小是 4 字节,页表项的作用是存储内存物理地址。当访问一个线性地址时,实际上就是在访问页表项中所记录的物理内存地址。

这里写图片描述

不管是页目录还是页表,每个表项占4个字节,其表项结构基本相同,如上图。

页面地址对页目录而言ÿ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值