欢迎光临散文网 会员登陆 & 注册

0178-开启四级分页

2023-08-20 19:14 作者:jiangbo4444  | 我要投稿

环境

  • Time 2022-11-12

  • WSL-Ubuntu 22.04

  • QEMU 6.2.0

  • NASM 2.15.05

前言

说明

参考:https://os.phil-opp.com/entering-longmode/

目标

如果要进入长模式,则必须要进行分页。在 64 位系统中,采用 4 级分页。
关于分页的信息,需要找其它的资料另外了解,这里不做详细介绍。

介绍

一共四级分页,原文中将其称为 P4,P3,P2,P1,这里也直接使用这种方式。 最初出发点为 CR3 寄存器,然后到 P4,直到 P1,最后是页偏移。 一个页表包含 512 项,每一项 8 个字节,一共 4K。 地址中的 48-63 必须满足和第 47 位一致,才是合法的地址。 具体的对应如下图:

四级分页

低地址位的状态

因为至少是 4K 分页,所以低 12 位默认都是 0,可以用它们来表示一些额外的信息。

巨型页

除了可以使用 4K 分页,也可以使用 1G 或者 2M 分页。
为了保证从保护模式的虚拟地址到分页的正确映射,下面使用了 2M 分页。

分页首先需要 4K 对其,然后建立了 P4,P3,P2 三个页表。

关联多级分页

初始化巨型页

开启分页

如果要开启分页,需要完成以下几步:

  1. 将 P4 的起始地址存放到 CR3,因为分页从 CR3 开始找。

  2. 启用物理地址扩展(PAE)。

  3. 扩展特性启用寄存器(Extended Feature Enable Register)需要设置长模式。

  4. 启用分页,由 CR0 的最高位控制。

总结

在保护模式下,开启了四级分页。

附录

源码


0178-开启四级分页的评论 (共 条)

分享到微博请遵守国家法律