程序的装入
3种方式
绝对装入方式
官方解释:在编译时,如果知道程序驻留在内存的什么位置,那么编译程序将产生绝对地址的目标代码。装入模块装入内存后,程序中的逻辑地址与实际内存地址完全相同,不需对程序的数据和地址进行修改。程序种所使用的绝对地址,可在汇编或编译时给出,也可由程序员赋予,通常在程序中采用符号地址,然后再汇编或编译时,再将这些符号地址转换为绝对地址
补充:一般适用于单道批处理系统
个人理解:在编译时,程序由高级语言需要向低级语言转变,首先要由高级语言转换为汇编语言,然后再将汇编语言转换为机器语言装入内存,再装入内存的时候如果采用绝对装入方式定位的话,有两种情况,第一种是,程序的逻辑地址等于物理地址,在装入的时候直接在存储区域的用户区装入(内存分为两部分:系统区+用户区),第二种情况是逻辑地址是程序员用符号语言(通常采用符号语言)赋予的,在汇编时再将这些符号地址转换为绝对地址,个人理解有误,望大佬看见指正
可重定位装入方式
可充定位方式又称为静态定位装入方式,是因为程序在转换为汇编语言装入内存的时候会表名这个程序语句所占的物理内存是多少,在装入内存的时候就会根据用户区的起始地址+程序语句所占内存的大小,此时的地址为程序语句的实际物理地址,这样的装入方式称为可重定位装入方式,可以实现并发,但是一旦装入就无法再改变在内存中的物理位置
动态运行时装入方式
在把装入模块装入内存后,不立即将相对地址转换为绝对地址,而是设置一个重定位寄存器,寄存器中存储的是,下一个执行程序应该加上的内存编号,进而转换为绝对地址,这样就可以进行多个程序的顺序装入,然后在运行时再将逻辑地址转换为绝对地址,使得内存的利用效率更高
程序的链接
3种方式
静态链接
在程序运行前,将目标模块及所需的库函数连接成一个完整的装配模块,以后不在拆开
装入时动态链接
指将用户源程序编译后所得的一组目标模块,在装入内存时,采用边装入边链接的方式
优点:便于更新和修改,实现对目标模块的共享
缺点:不知道运行时需要将哪些模块链接,因此需要全部装入,效率低
运行时动态链接
指对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行链接