操作系统页表

虚拟内存

  • 虚拟地址到物理地址的映射以实现隔离性
    • 每个程序有独立的地址空间,不相互影响

页表

地址操作简单流程
CPU向虚拟地址va加载或写入数据–>CPU将va交给内存管理单元MMU–>SATP寄存器存放着内存中存放虚拟地址到物理地址的表单–>MMU通过SATP查找表单获得va的物理地址–>完成物理地址的加载或写入。
虚拟内存地址

  • 为64bit,高25bit不使用,只用39bit
  • 中间27bit为index,可知物理page号(PPN),包含4096字节
  • 低12bit为offset( 2 12 = 4096 2^{12} = 4096 212=4096),指向page中4096字节的某1个–>物理地址 = page + offset

物理地址

  • 为56bit,44bit为PPN,剩下12bit直接复制虚拟地址的offset
    在这里插入图片描述

page table

  • 内容:虚拟内存地址:物理地址的映射
  • 多级结构
    虚拟内存地址的index分成3个9bit,每个bit称作1个page directory,SATP寄存器实际指向第1个page directory的地址。每个page directory都有512大小,它们指向一个PTE(Page Table Entry),因此共需要3*512个PTE(Page Table Entry)
    在这里插入图片描述

PTE
PTE可以看成从虚拟地址到物理地址的分级索引。虚拟地址的3个数值表示在page directory中的偏移,此偏移加上当前page directory的首地址,则可得到1个64bit的PTE的物理地址。PTE中存放着PPN,PPN表示1个物理页号,在此物理页号后补12个0,相当于offset为0,则可得到真正的物理地址,以此进入下一个page directory的首地址,当然最后1个page directory加上va的offset就是查找的真正的物理地址;还有一些标志位,比如V表示此地址翻译是否可用。
在这里插入图片描述

TLB页表缓存

  • 切换page table 会清空TLB

xv6: a simple, Unix-like teaching operating system(chapter 3阅读理解)

3.1 paging hardware

以上

3.2 Kernel address space

就算是内核代码,也要有1个栈去运行,比如说局部变量等,每个进程进入内核态时,需要维护1个内核中独立的栈

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值