一文说透虚拟内存

为什么我们需要虚拟内存

提供一个虚拟化封装,让上层的程序员不用担心内存分配,物理地址的总大小。同时如果要手动管理内存是一件麻烦的事,比如一个程序读到另一个程序的物理地址,并且也很难保障多个处理器不会同时读取写入同一块物理地址,同时page table上也可以记录下对页的访问权限。

 

虚拟内存的定义

Give the programmer the illusion of a large address space while having a small physical memory

就是利用小块空间,并且软硬件结合来给程序员一个错觉-----我们有一个大到用不完的空间,并且对每个处理器来说都是这样。

虚拟内存的实现

比如我们有2^31的虚拟地址和2^27的物理地址,然后都有12bit的page offset,也就是4kb一个页

 

那我们怎么完成这个地址的转换呢?

通过一个page table。

VPN就是page table entris的编号,然后page table entires存了物理地址PPN,然后两个共用一个offset,这样就组成了物理地址,就可以去内存中寻址了。

同时为了确定在不在内存里面,或者还没有分配,多了一个valid bit。

但是这样的话,load和store,已经取instruction都要先到内存里面访问page table然后再访问物理地址。这样就进行了两次内存访问。

所以我们有了TLB(translation lookside buffer)也就是把一部分的page table缓存在cache里面,来加快访问。这样做有可行性------因为pc一般都是+4,而一个page又很大,有4kb,也就是支持1000条取指令。硬件如下。

 

 同时多个processor都独自拥有page table,可以不用担心别的处理器会对其产生影响,也可以通过一些库来共享physical page。Using different page tables for different programs provides memory protection。

软硬件的分工

 

当page hit的时候,处理器发送地址给MMU,然后MMU到内存或者cache中取物理地址,然后到内存中取数据。

 

发生了page fault,第四步触发了异常,然后异常处理程序,就从disk取page,然后重新执行。

物理页替换算法

因为如果要严格的LRU的话,要保存全局访问顺序,开销太大。我们就用一个bit来粗劣的估计

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值