从头再来

Linux 内存寻址 - 常规分页

从80386开始,Intel 处理器处理 4KB的页。


32位线性地址分为 10 10 12 三部分。 directory table offset

cr3控制寄存器中存放正使用的页目录的物理地址。


一个页目录项与页表项结构相同。 其中有20位Field 包含页框的物理地址。

当从cr3 中获取到页目录地址时,取线性地址的高10位取页目录(4KB,每一个32位占4字节,共1024个页表)中指向的页表项地址(20位的Field)

使用取出来的物理地址得到页表地址,线性地址的中间10位,取页表内偏移量,取含有数据的页的物理地址。

最终使用线性地址的12位取页内数据偏移量。


页目录项指向的页表中有4096的物理地址,也就是对应1024个页表项,刚好与线性地址的10位相符。

而页表项指向的项含有4096的物理地址,偏移量需要线性地址的12来取offset



cr4寄存器,PSE标记,可使得扩展分页与常规分页共存。

cr0 的PG = 0时,线性地址被解析为物理地址。

posted on 2012-04-30 20:10 易宝@byhh 阅读(334) 评论(1)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理