虚拟内存
基本概念
地址空间
地址空间(address space): 进程的所有内存状态(code,stack,heap)
逻辑地址/虚拟地址: 指令中内存引用的地址。 比如可以在汇编代码里访问地址0. 但是操作系统会将逻辑地址0映射到别的物理地址
物理地址: 实际访问内存的地址。由操作系统和硬件翻译
地址绑定
pages.cs.wisc.edu/~remzi/OSTEP/Chinese/15.pdf
每个 CPU 需要两个硬件寄存器:基址(base)寄存器。和界限(bound)寄存 器,有时称为限制(limit)寄存器
- 程序执行时, 操作系统会决定其在物理内存中的实际加载地址,并将起始地址记录在基址寄存器中。
- 运行时, phy addr=vir addr+base
- 如果进程需要访问超过limit或者为负数的虚拟地址,CPU 将触发异常
- 可以在进程运行时改变进程的地址空间
这种方法也被称为动态 (基于硬件) 重定位。
静态(基于软件)重定位
利用加载程序(loader)重写指令中的地址 缺点: 无法实现访问保护 一旦完成不能改变
分段
pages.cs.wisc.edu/~remzi/OSTEP/Chinese/16.pdf
分段(Segmentation):