- 地址空间
- 分页硬件
- xv6的VM代码
虚拟内存概述
-
问题:假设shell程序有一个bug:有时,它会向一个随机的内存地址写数据。那么我们该怎样阻止shell程序破坏内核和破坏其他进程呢?
-
我们想有彼此隔离的地址空间
每个进程都有自己的内存
进程读写自己的内存
进程不能读写其他任何内存 -
我们面临的挑战是:在保持内存间隔离的同时,如何在一个物理内存之上多路复用若干个内存?
-
xv6使用RISC-V的分页硬件来实现地址空间。
-
分页提供了一层间接寻址。
CPU->MMU->RAM
VA PA
RISC-V指令使用的是虚拟地址,而不是物理地址。
内核告诉MMU每个虚拟地址是如何映射到一个物理地址的。
从本质上讲,MMU有一个表,表的索引是va,能生成一个pa。因此,MMU也叫做页表。
一个地址空间对应一个页表。
MMU能限制用户代码可以使用什么虚拟地址。
通过对MMU编程,内核可以完全控制虚拟地址va到物理地址pa的映射,允许许多有意思的操作系统特征或者技巧。
网友评论