关于gdtr和cr3地址类型的理解

本文探讨了x86架构中内存管理的核心概念,包括CR3寄存器中页目录表基址的物理地址特性及GDTR中线性地址的作用。通过分析,明确了在分页机制下页表和页目录表的地址转换过程,并讨论了实现简单操作系统的内存管理功能时可能遇到的问题。

结论:1.cr3里保存页目录表的基址的地址类型为物理地址,页目录表里的每一项也是页表的物理地址。

2.gdtr里保存的地址类型为线性地址。



原因:由于段表并不能保证页表存在或开启,所以它的机制,完全建立在无页表存在的情况。体现在gdtr上,就是gdtr的地址和gdt里的描述符里的地址类型一样,都为线性地址,当开启分页机制后有可能会和物理地址不同。而且,当想要更换段页式的时候,必须在现有地址转换情况下,构造段表和页表,但是当往gdtr里填段表基址是,却必须是在无段表转换的地址。页表和页目录表的基址是无段表和页表转换后的地址,也就是物理地址。

换句话说,就是换段表时,不依赖现有段表。换页表时,不依赖段表和页表。

比如下面这张图,好像是intel手册上的,但是根据我的实践,不知道是不是我的理解不对,我认为不仅cr3是物理地址,页目录表项和页表项都应该是物理地址。



题外话:最近,想实现一个简单的基于x86的操作系统内存管理功能,网上关于段页式内存管理介绍也挺多,但是,由于自己对计算机硬件不是很了解,所以,在算法之余,更多问题是硬件的细节问题。感觉如果硬件细节不清楚,总会遇到很多奇怪的问题,而且,很难排除,花了很多时间,心里也没底。所以也建议大家无论做什么,基础永远值得花更多时间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值