重定位方法(地址映射) 虚拟地址与内存地址的关系 重定位 确定一个待执行程序在内存的位置 啁将程序中的逻辑地址转换成物理地址 (1)静态地址重定位 静态地址重定位是在程序执行之前由操作系统 的重定位装入程序完成的。 (2)动态地址重定位 动态地址重定位是在程序执行期间进行的
重定位方法(地址映射) • 虚拟地址与内存地址的关系 重定位: 1. 确定一个待执行程序在内存的位置 2. 将程序中的逻辑地址转换成物理地址 • (1)静态地址重定位 • 静态地址重定位是在程序执行之前由操作系统 的重定位装入程序完成的。 • (2)动态地址重定位 • 动态地址重定位是在程序执行期间进行的
静态地址重定位可执行文件结构 在可执行文作中,列出各个需要重定位的地址 单元和相对地址值(文件头有一个重定位地址 表 装入时根据所定位的内存地址去修改每个重定 位地址项,添加相应偏移量
静态地址重定位可执行文件结构 – 在可执行文件中,列出各个需要重定位的地址 单元和相对地址值(文件头有一个重定位地址 表)。 – 装入时根据所定位的内存地址去修改每个重定 位地址项,添加相应偏移量
静态地址重定位(续) 重定位表50 Mnp 说明:重定位表中列出所有修改的位置。如:重定位表的 10表示相对地址15处的内容为相对地址0从0开始 的相对位置)。在装入时,要依据重定位后的开始位置200 修改相对地址。 重定位修改:重定位表中的150~>绝对地址2150=2004150) 内容修改:内容100变5成2100(=100+200
静态地址重定位(续) • 说明:重定位表中列出所有修改的位置。如:重定位表的 150表示相对地址150处的内容为相对地址(即100为从0开始 的相对位置)。在装入时,要依据重定位后的开始位置(2000) 修改相对地址。 – 重定位修改:重定位表中的150->绝对地址2150(=2000+150) • 内容修改:内容100变成2100(=100+2000)) jmp 150 150 100 ... 重定位表 0 jmp 150 2150 2100 ... 2000
静态重定位的缺点: 可以装入的程序道数受限; 静态重定位方法将程序一目装入内存之后就不能 再移动且必须在程序执行之前将有关部分全部装 使用静态重定位方法进行地址变换无法实现虚拟 存情器。 必须占用连续的内存空间和难以做到程序和数据 的共享
静态重定位的缺点: • 可以装入的程序道数受限; • 静态重定位方法将程序一旦装入内存之后就不能 再移动且必须在程序执行之前将有关部分全部装 入。 • 使用静态重定位方法进行地址变换无法实现虚拟 存储器。 • 必须占用连续的内存空间和难以做到程序和数据 的共享
动态地址重定位 动态地址重定位是在程序执行过程中,在CPU访 间内存之前,将要访问的程序或数据地址转换成 内存地址。 动态重定位依靠硬件地址变换机构完成。 地址重定位机构需要一个(或多个)基地址寄存器BR和 或多个)程序虚地址寄存器VR。指令或数据的内 存地址MA与虚地址的关系为:MA=(BR)(VR 这里,(BR与(R分别表示寄存器BR与VR中的内容
动态地址重定位 • 动态地址重定位是在程序执行过程中,在CPU访 问内存之前,将要访问的程序或数据地址转换成 内存地址。 – 动态重定位依靠硬件地址变换机构完成。 – 地址重定位机构需要一个(或多个)基地址寄存器BR和 一个(或多个)程序虚地址寄存器VR。指令或数据的内 存地址MA与虚地址的关系为:MA=(BR)十(VR) 这里,(BR)与(VR)分别表示寄存器BR与VR中的内容