- 地址转换:硬件对每次内存访问进行处理,将指令中的虚拟地址转换为数据实际存储的物理地址。
15.3 动态(基于硬件)重定位
- 基址加界限机制(动态重定位):每个CPU需要两个硬件寄存器:基址(base)寄存器和界限(bound)寄存器。
当程序执行时,OS决定其在物理内存中加载的实际地址,并将起始地址记录在基址寄存器中。
physical address = virtual address + base
界限寄存器在此处提供访问保护,确保进程产生的所有地址都在晋城的地址“界限”中
- 这一堆寄存器是内存管理单元(Memory Management Unit, MMU)
15.5 操作系统的问题
- 硬件支持和操作系统管理结合在一起,实现一个简单地虚拟内存
- 在进程创建时,操作系统检索空闲列表(free list),为进程的地址空间找到内存空间。
- 在进程终止时,操作系统回收它的所有内存状态,并放回空闲列表。
- 在上下文切换时,由于每个CPU只有一个基址寄存器和界限寄存器,但对于每个运行的程序,它们的值都不同,操作系统必须保存MMU到内存,放在每个进程都有的结构中,如近程结构或者进程控制块(PCB)并且在恢复执行的时候恢复MMU。
当一个进程试图越界访问内存时,CPU应该触发异常:终止错误进程
简单的动态重定位技术有效率低下的问题,如果进程使用的栈区和堆区并不很大,那么会导致浪费大量空间,形成内部碎片。
- 内部碎片:程序所有的内存都被装载到物理内存,但是程序有部分内存可能并不是很常使用,导致内存浪费
- 外部碎片:产生了多个不连续的小物理内存,导致新的程序无法被装载