6.1.3重定位方法 重定位:在可执行文件装入时需要解决可执行文件 中地址(指令和数据)和内存地址的对应。由操作 系统中的装入程序 loader来完成 程序在成为进程前的准备工作 编辑:形成源文件(符号地址) 编译:形成目标模块(模块内符号地址解析) 链接:由多个目标模块或程序库生成可执行文件(模块间 符号地址解析) 装入:构造PCB,形成进程(使用物理地址 重定位方法: 绝对装入 可重定位装入 动态装入 返回
6.1.3 重定位方法 • 重定位:在可执行文件装入时需要解决可执行文件 中地址(指令和数据)和内存地址的对应。由操作 系统中的装入程序loader来完成。 • 程序在成为进程前的准备工作 – 编辑:形成源文件(符号地址) – 编译:形成目标模块(模块内符号地址解析) – 链接:由多个目标模块或程序库生成可执行文件(模块间 符号地址解析) – 装入:构造PCB,形成进程(使用物理地址) • 重定位方法: – 绝对装入 – 可重定位装入 – 动态装入 返回
1.逻辑地址、物理地址和地址映射 逻辑地址(相对地址,虚地址):用户的程序经过 汇编或编译后形成目标代码,目标代码通常采用相 对地址的形式。 其首地址为0,其余指令中的地址都相对于首地址来编址 不能用逻辑地址在内存中读取信息 物理地址(绝对地址,实地址):内存中存储单元 的地址。物理地址可直接寻址。 地址映射:将用户程序中的逻辑地址转换为运行时 由机器直接寻址的物理地址。 当程序装入内存时,操作系统要为该程序分配一个合适的 内存空间,由于程序的逻辑地址与分配到内存物理地址不 致,而CPU执行指令时,是按物理地址进行的,所以要进 行地址转换
1. 逻辑地址、物理地址和地址映射 • 逻辑地址(相对地址,虚地址):用户的程序经过 汇编或编译后形成目标代码,目标代码通常采用相 对地址的形式。 – 其首地址为0,其余指令中的地址都相对于首地址来编址。 – 不能用逻辑地址在内存中读取信息。 • 物理地址(绝对地址,实地址):内存中存储单元 的地址。物理地址可直接寻址。 • 地址映射:将用户程序中的逻辑地址转换为运行时 由机器直接寻址的物理地址。 – 当程序装入内存时, 操作系统要为该程序分配一个合适的 内存空间,由于程序的逻辑地址与分配到内存物理地址不 一致, 而CPU执行指令时,是按物理地址进行的,所以要进 行地址转换
源程序 0逻辑地址空间 物理地址空间 100 Load a datal Load a 200 编译连接 地址映射 Load a 200 BA=1000 3456 200 1200 datal 3456 3456 逻辑地址、物理地址和地址映射
地址映射 BA=1000 Load A 200 3456 。 。 。 1200 物理地址空间 Load A data1 data1 3456 源程序 Load A 200 3456 0 100 200 编译连接 逻辑地址空间 逻辑地址、物理地址和地址映射
逻辑地址空间 BR 物理地址空间 1000 VR 100 LOADA 200 200→+ 1100 200 3456 1200 1300 300 地址映射
0 100 200 300 . . . . . . . . . LOAD A 200 3456 逻辑地址空间 1100 1200 1300 物理地址空间 200 VR + 1000 BR 地址映射
绝对装入( absolute loading) 在可执行文件中记录内存地址,装入时直 接定位在上述(即文件中记录的地址)内存 地址 优点:装入过程简单。 缺点:过于依赖于硬件结构,不适于多 道程序系统
2. 绝对装入(absolute loading) • 优点:装入过程简单。 • 缺点:过于依赖于硬件结构,不适于多 道程序系统。 在可执行文件中记录内存地址,装入时直 接定位在上述(即文件中记录的地址)内存 地址