关于gdtr和cr3地址类型的理解 | 您所在的位置:网站首页 › 电子邮件地址是物理地址吗为什么 › 关于gdtr和cr3地址类型的理解 |
结论:1.cr3里保存页目录表的基址的地址类型为物理地址,页目录表里的每一项也是页表的物理地址。 2.gdtr里保存的地址类型为线性地址。
原因:由于段表并不能保证页表存在或开启,所以它的机制,完全建立在无页表存在的情况。体现在gdtr上,就是gdtr的地址和gdt里的描述符里的地址类型一样,都为线性地址,当开启分页机制后有可能会和物理地址不同。而且,当想要更换段页式的时候,必须在现有地址转换情况下,构造段表和页表,但是当往gdtr里填段表基址是,却必须是在无段表转换的地址。页表和页目录表的基址是无段表和页表转换后的地址,也就是物理地址。 换句话说,就是换段表时,不依赖现有段表。换页表时,不依赖段表和页表。 比如下面这张图,好像是intel手册上的,但是根据我的实践,不知道是不是我的理解不对,我认为不仅cr3是物理地址,页目录表项和页表项都应该是物理地址。
题外话:最近,想实现一个简单的基于x86的操作系统内存管理功能,网上关于段页式内存管理介绍也挺多,但是,由于自己对计算机硬件不是很了解,所以,在算法之余,更多问题是硬件的细节问题。感觉如果硬件细节不清楚,总会遇到很多奇怪的问题,而且,很难排除,花了很多时间,心里也没底。所以也建议大家无论做什么,基础永远值得花更多时间。 |
CopyRight 2018-2019 实验室设备网 版权所有 |