用户程序要在系统中运行,必须先将它装入内存,然后再将其转变为一个可执行的程序,通常经过以下几个步骤:
(1)编译:在编译程序对用户源程序进行编译,形成若干个目标模块。
(2)链接:由连接程序将编译后的一组目标模块以及他们所需的库函数链接在一起,形成一个完整的装入模块。
(3)装入:由装入程序将装入模块装入内存
程序的装入分为以下三种方式:
一、绝对装入方式
编译后产生绝对地址的目标代码。
例:事先知道用户程序驻留在从R处开始的位置,则编译程序所产生的目标模块,便可从R处开始向上扩展。
使用环境:计算机系统很小,且仅能运行单道程序时,因为这种情况下完全可能知道程序驻留在何处。
二、可重定位装入方式
用户编译形成多个目标模块,他们的起始地址通常是从0开始的,程序中的其他地址也是相对于起始地址计算的,它可以根据内存的具体情况将装入模块装入到内存的适当位置。
重定位:将程序中的逻辑地址转化为内存中物理地址的过程叫做重定位。
使用环境:多处理机及多道程序系统中。
三、动态运行时装入方式
动态运行的装入程序在装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是将这种转换推迟到程序真正要执行时才进行。此方式需要一个重定位寄存器的支持。
重定位寄存器:用来存放程序(数据)在内存中的起始地址,程序在执行时,真正访问的内存地址是相对地址与重定位寄存器中的地址相加而形成。
本文详细介绍了程序在系统中运行前的三个关键步骤:编译、链接和装入,以及程序装入的三种方式——绝对装入方式、可重定位装入方式和动态运行时装入方式,解释了重定位过程及其在不同环境下的应用。
510

被折叠的 条评论
为什么被折叠?



