52程序的装入和链接 二、可重定位装入 在装入时才确定对进程/作业的内存分配,需采用下述两个技术手段: 1)把逻辑地址与物理地址分开; 2)对逻辑地址采用地址重定位; 两个概念:地址空间和存储空间 1、地址空间 在源程序中,是通过符号名来访问子程序和数据的,我们把程序中符号名 的集合称为“名字空间”。汇编语言源程序经过汇编,或者高级语言源程序 经过编译,得到的目标程序是以“0”作为参考地址的模块。然后多个目标模 块由连接程序连接成一个具有统一地址的装配模块,以便最后装入内存中执 行。我们把目标模块中的地址称为相对地址(或称为“逻辑地址”),而把 相对地址的集合称为“相对地址空间”或简称为“地址空间”。 2、存储空间主存中一系列存储信息的物理单元的集合。这些单元的编号成为 物理地址或绝对地址。 2001年9月20日9时23分 计算机操作系统
2001年9月20日9时23分 计算机操作系统 5.2程序的装入和链接 二、可重定位装入 在装入时才确定对进程/作业的内存分配,需采用下述两个技术手段: 1)把逻辑地址与物理地址分开; 2)对逻辑地址采用地址重定位; 两个概念:地址空间和存储空间。 1、地址空间 在源程序中,是通过符号名来访问子程序和数据的,我们把程序中符号名 的集合称为“名字空间”。汇编语言源程序经过汇编,或者高级语言源程序 经过编译,得到的目标程序是以“0”作为参考地址的模块。然后多个目标模 块由连接程序连接成一个具有统一地址的装配模块,以便最后装入内存中执 行。我们把目标模块中的地址称为相对地址(或称为“逻辑地址”),而把 相对地址的集合称为“相对地址空间”或简称为“地址空间”。 2、存储空间 主存中一系列存储信息的物理单元的集合。这些单元的编号成为 物理地址或绝对地址
52程序的装入和链接 3、什么是地址重定位? 装配模块虽然具有统一的地址空间,但是仍是以“0”作为参考地址,即是 浮动的。要把它装入内存执行,就要确定装入内存的实际物理地址,并修改程 序中与地址有关的代码,这一过程称为地址重定位。即从逻辑地址→物理地址 相对地址→绝对地址 程序的名字空间、地址空间和存储空间之间的关系如图所示 符号 源程序 一连相对目标程地址重 汇编/编谇 绝对目标程 序(装配模 装川序 块) 名字空间 地址空间 存储空间 (相对地址/逻辑地址空间)(绝对地址/物理地址空间
5.2程序的装入和链接 3、什么是地址重定位? 装配模块虽然具有统一的地址空间,但是仍是以“0”作为参考地址,即是 浮动的。要把它装入内存执行,就要确定装入内存的实际物理地址,并修改程 序中与地址有关的代码,这一过程称为地址重定位。即从逻辑地址→物理地址 相对地址→绝对地址 程序的名字空间、地址空间和存储空间之间的关系如图所示: 汇编/编译 地址重定位 连 接 装 入 名字空间 地址空间 存储空间 (相对地址/逻辑地址空间)(绝对地址/物理地址空间) 符 号 源 程 序 相对目标程 序 ( 装配模 块) 绝对目标程 序
4、地址重定位类型 地址重定位完成把相对地址转换成内存中的绝对地址,这个过程称为地址映射 (map)。按照重定位的时机,可分为静态重定位和动态重定位 1)静态重定位 静态地址映射是在程序装入内存时完成从逻辑地址到物理地址的转换的。 在一些早期的系统中都有一个装入程序(加载程序),它负责将用户程序装入系 统,并将用户程序中使用的访问内存的逻辑地址转换成物理地址。如图所示 10u 100 mov r1-[500] 1100mnvr1[15oo1 装入程序 50叫12345 l5012345 599 a程疗地址空 256K-1 b内存空间
4、地址重定位类型 地址重定位完成把相对地址转换成内存中的绝对地址,这个过程称为地址映射 (map)。按照重定位的时机,可分为静态重定位和动态重定位。 1)静态重定位 静态地址映射是在程序装入内存时完成从逻辑地址到物理地址的转换的。 在一些早期的系统中都有一个装入程序(加载程序),它负责将用户程序装入系 统,并将用户程序中使用的访问内存的逻辑地址转换成物理地址。如图所示
地址重定位-2 0 10000 100LOAD1,2500 10100:LOAD1,12500 2500365 12500:365 2600: 12600: 程序的地址空间 内存的地址空间 例如:LOAD1,2500这条指令是把相对地址为2500的存储单元 的内容365装入1号累加器。而这时内容为365的存储单元的实际 物理地址为12500(起始地址10000+相对地址250),所以 LOAD1,2500这条指令中的直接地址码要作相应的修改,即 改为LOAD1,12500
地址重定位-2 0: 10000: 100 LOAD 1,2500 10100: LOAD 1,12500 2500: 365 12500: 365 2600: 12600: 程序的地址空间 内存的地址空间 例如:LOAD 1,2500 这条指令是把相对地址为2500的存储单元 的内容365装入1号累加器。而这时内容为365的存储单元的实际 物理地址为12500(起始地址10000+相对地址2500),所以 LOAD 1,2500 这条指令中的直接地址码要作相应的修改,即 改为LOAD 1,12500
地址重定位-3 在程序中需要修改的位置称为重定位项。程序装入内存中的起 始地址称为重定位因子。为了支持静态重定位,连接程序在生成统 一地址空间和装配模块时,还应产生一个重定位项表。所以操作系 统的装入程序要把装入模块和重定位项表一起装入内存。由装配模 块的实际装入起始地址得到重定位因子,然后取重定位项,加上重 定位因子得到欲修改位置的实际地址,最后对实际地址中的内容再 加上重定位因子,从而完成指令代码的修改。当完成重定位后,就 可以启动程序执行 静态重定位虽然有无须硬件支持的优点,但是也存在明显的缺 点:一是程序重定位以后就不能在内存中移动;二是要求程序的存 储空间是连续的,不能把程序存储到若干个不连续的区域中
地址重定位-3 在程序中需要修改的位置称为重定位项。程序装入内存中的起 始地址称为重定位因子。为了支持静态重定位,连接程序在生成统 一地址空间和装配模块时,还应产生一个重定位项表。所以操作系 统的装入程序要把装入模块和重定位项表一起装入内存。由装配模 块的实际装入起始地址得到重定位因子,然后取重定位项,加上重 定位因子得到欲修改位置的实际地址,最后对实际地址中的内容再 加上重定位因子,从而完成指令代码的修改。当完成重定位后,就 可以启动程序执行。 静态重定位虽然有无须硬件支持的优点,但是也存在明显的缺 点:一是程序重定位以后就不能在内存中移动;二是要求程序的存 储空间是连续的,不能把程序存储到若干个不连续的区域中