程序的装入与链接
程序执行的步骤
- 编译
由编译程序将用户源代码编译成若干个目标模块 - 链接
由链接程序将编译后形成的目标模块以及它们所需要的库函数,链接在一起,形成一个装入模块。 - 装入
由装入程序将装入模块装入主存的过程。
程序装入采用的三种方式
-
绝对装入方式
-
可重定位方式
- 在可执行文件中,列出各个需要重定位的地址单元和相对地址值。
- 当用户程序装入内存中时,一次性的实现逻辑地址到物理地址的转换,以后不再转换。
重定位的优点与缺点
优点:不依赖于硬件,可以装入有限多道程序;无需硬件支持。
缺点:一次性全部装入;一个程序通常需要占用连续的内存空间;程序装入内存后运行时不能移动。
- 动态运行时装入方式
在装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换为推迟到程序要真正执行时才进行。实现时需要重定位寄存器。
动态运行时装入方式的优点与缺点
优点:不需要一次装入;OS可以将一个程序分散存放于不连续的内存空间,可以移动程序。能够支持程序执行中产生的地址引用,入指针变量。
缺点:需要硬件支持,OS实现较复杂。它是虚拟存储的基础。
程序的链接
程序链接的目的
★链接程序的功能是将进过编译或汇编后所得到的一组目标模块以及它们所需要的库函数,装配成一个完整的装入模块。
★实现链接的三种方法:
- 静态链接:事先进行链接以后不再拆开的链接方式
- 装入时动态链接:用户源程序经编译后所得到的目标模块,是在装入主存时,边装入边链接的。
- 运行时动态链接:可将某些目标模块的链接,推迟到执行时才进行。