虚拟内存详解

一级页表与二级页表

虚拟地址与真实物理地址的对应关系。虚拟地址如同指针一样,一层一层地最终指向真实地址。

首先介绍虚拟地址的结构:页目录,页表。

拿32位的虚拟地址举例0x00000000

高10位代表的是页目录的偏移,中间10位代表页表的偏移,最后12位为真实物理地址的低12位。

进程未执行时,页表的始址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。

即页目录的物理地址存放在cr3寄存器中,而页目录的物理地址+页目录的偏移=得到页表项的地址(4个字节),再加上中间10位(二进制)的偏移,得到真实物理地址的前20位,此刻与后12位的物理地址相加即为真实物理地址。

页目录存放着页表的起始物理地址。

页表存放真实物理地址的前20位

如若将虚拟地址与物理地址线性对应,则第二个页表项与第一个页表项相差值为4096(即4K),为什么?首先把4096按16进制换算即为0x1000。也就是从第12位(从0算)开始累加1,而页表项的结构如下图

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA57yW56CB57Si6a2C6ICF,size_20,color_FFFFFF,t_70,g_se,x_16

 31~12才是真正的物理地址,也就是20位,而后12位的用处:P,1表示页存在于内存中,0则相反。rw,可读可写(1),不可读不可写(0),pwt,1则表示该页为高速缓存。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA57yW56CB57Si6a2C6ICF,size_20,color_FFFFFF,t_70,g_se,x_16

 1k个页目录平均存放1k个页表,一个页表有1k个页目录项(2^10),大小为4k.

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值