3.可重定位装入 relocatable loading) 在可执行文件中,列出各个需要重定位的地址单元和 相对地址值。当用户程序被装入内存时,一次性实现 逻辑地址到物理地址的转换,以后不再转换(一般在 装入内存时由软件完成)。即:装入时根据所定位的 内存地址去修改每个重定位地址项,添加相应偏移量 优点:不需硬件支持,可以装入有限多道程序 (如 MS DOS中的TSR)。 缺点:一个程序通常需要占用连续的内存空间, 程序装入内存后不能移动。不易实现共享
3. 可重定位装入(relocatable loading) • 优点:不需硬件支持,可以装入有限多道程序 (如MS DOS中的TSR)。 • 缺点:一个程序通常需要占用连续的内存空间, 程序装入内存后不能移动。不易实现共享。 在可执行文件中,列出各个需要重定位的地址单元和 相对地址值。当用户程序被装入内存时,一次性实现 逻辑地址到物理地址的转换,以后不再转换(一般在 装入内存时由软件完成)。即:装入时根据所定位的 内存地址去修改每个重定位地址项,添加相应偏移量
可执行文件在内存中的重定位 0 2000 Relocation|150 150 Imp Imp 150100 21502100 ·说明:重定位表中列出所有修改的位置。如:重定位表的150 表示相对地址150处的内容为相对地址(即100为从0起头的相 对位置)。在装入时,要依据重定位后的起头位置(2000修改 相对地址。 重定位修改:重定位表中的150->绝对地址2150=2000+150 内容修改:内容100变成2100(=100+2000)
jmp 150 150 100 ... Relocation Table 0 jmp 150 2150 2100 ... 2000 可执行文件在内存中的重定位 • 说明:重定位表中列出所有修改的位置。如:重定位表的150 表示相对地址150处的内容为相对地址(即100为从0起头的相 对位置)。在装入时,要依据重定位后的起头位置(2000)修改 相对地址。 – 重定位修改:重定位表中的150->绝对地址2150(=2000+150) – 内容修改:内容100变成2100(=100+2000))
4.动态装入( dynamic run- time loading) 在可执行文件中记录虚拟内存地址,装入和执行时通 过硬件地址变换机构,完成虚拟地址到实际内存地址 的变换。 优点: OS可以将一个程序分散存放于不连续的内存空间,可以 移动程序,有利用实现共享。 能够支持程序执行中产生的地址引用,如指针变量(而 不仅是生成可执行文件时的地址引用)。 缺点:需要硬件支持(通常是CPU),OS实现较复 杂。它是虚拟存储的基础
4. 动态装入(dynamic run-time loading) • 优点: – OS可以将一个程序分散存放于不连续的内存空间,可以 移动程序,有利用实现共享。 – 能够支持程序执行中产生的地址引用,如指针变量(而 不仅是生成可执行文件时的地址引用)。 • 缺点:需要硬件支持(通常是CPU),OS实现较复 杂。它是虚拟存储的基础。 在可执行文件中记录虚拟内存地址,装入和执行时通 过硬件地址变换机构,完成虚拟地址到实际内存地址 的变换
61.4链接 链接是指多个目标模块在执行时的地址空间分配和相互引用。 6.141链接方法 6.14.2链接举例 返回
6.1.4 链接 6.1.4.1 链接方法 6.1.4.2 链接举例 返回 链接是指多个目标模块在执行时的地址空间分配和相互引用
6.1.4.1链接方法 1.静态链接( static-linking) 静态链接是在生成可执行文件时进行的。在目标模块中记录符 号地址( symbolic address),而在可执行文件中改写为指令直接 使用的数字地址。 Module a Module a call function1 call ltF L-1 mOdule B Module b function1 function1 F function1([ L+F functions[ M-1 L+M-1
6.1.4.1 链接方法 1. 静态链接(static-linking) 返回 静态链接是在生成可执行文件时进行的。在目标模块中记录符 号地址(symbolic address),而在可执行文件中改写为指令直接 使用的数字地址。 Module A call "function1" 0 L-1 Module B 0 M-1 function1(){ ... } "function1" F Module A call L+F 0 L-1 Module B L L+M-1 function1(){ ... } "function1" L+F