操作系统知识整理 - 程序的链接与装入

本文详细介绍了操作系统中程序从编译到运行的整个过程,包括编译、链接和装入三个阶段。链接部分讲解了静态链接、装入时动态链接和运行时动态链接的差异;装入部分则阐述了绝对装入、可重定位装入和运行时动态装入的工作原理,特别强调了在多道程序环境下的重定位装入和动态装入的重要性。

主要内容

静态链接(Static Linking)

装入时的动态链接

运行时的动态链接

绝对装入(Absolute Loading)

可重定位装入(Relocation Loading)

运行时的动态装入


 

基本过程

用户程序要在系统中运行,必须先装入内存,然后再转变为可执行程序

1)编译

编译程序(Compiler)用户源程序进行编译,形成若干个目标模块(Object Module)

2)链接

链接程序(Linker)将编译后形成的一组目标模块以及它们需要的库函数链接起来,形成一个可装入模块(Load Module)

3)装入

装入程序(Loader)可装入模块装入内存

 

链接

静态链接(Static Linking)

在程序运行前完成链接,以后不再拆开。

 

装入时的动态链接

边装入,边链接。

在装入一个目标模块时,若发生一个外部模块调用事件,装入程序将找到外部目标模块,将其装入内存,修改地址。

 

运行时的动态链接

将某些模块的链接推迟到程序执行时才进行。

 

装入

绝对装入(Absolute Loading)

只能将可装入模块装入到内存中事先指定的位置,这只适用于单道程序环境

 

可重定位装入(Relocation Loading)

多道程序环境中,编译程序不可能预知编译后得到的目标模块(→可装入模块)存放在内存中的位置。采用可重定位装入可以根据内存的具体情况,将可装入模块装入到内存中适当的位置。

装入时对目标程序中指令和数据地址的修改称为重定位。又因为地址变换通常是在装入进程时一次完成的,以后不再改变,故称为静态重定位

 

运行时的动态装入

装入程序在把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是地址转换推迟到程序开始执行时进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值