程序的装入方式

程序的装入方式主要有以下三种:
1. 绝对装入方式 :
定义 :用户程序经过编译后,产生的是绝对地址(物理地址)的目标代码。程序和数据在装入内存时,被放置在事先指定的位置,且逻辑地址与实际内存地址完全相同,因此不需要对地址进行修改。
应用场景 :适用于计算机系统较小、仅能运行单道程序的情况,此时可以确切知道程序在内存中的位置。
局限性 :要求程序员熟悉内存使用情况,且一旦程序或数据被修改,可能需要修改程序中的某些地址。
2. 可重定位装入方式 :
定义 :目标模块中的地址为相对地址,即地址都是相对于某个起始地址(通常是0)计算的。在装入内存时,根据内存的具体情况将装入模块装入到适当位置,并对目标程序中的指令和数据地址进行修改(重定位)。
应用场景 :适用于多道程序环境,编译程序无法预知编译后目标模块应放在内存的何处。
特点 :逻辑地址与物理地址不同,需要在运行时进行地址转换。根据地址变换的时间和技术手段不同,可重定位装入方式又可分为静态重定位和动态重定位。
3. 动态运行时装入方式 :
定义 :程序在运行时才将装入模块中的相对地址转换为物理地址,而不是在装入时立即进行转换。这种方式需要重定位寄存器的支持,以确保转换地址不影响指令的执行速度。
应用场景 :适用于程序在运行过程中需要在内存中移动位置的情况,例如多道程序环境下,程序可能会多次换出换入,每次换入后的位置都不相同。
特点 :装入后的所有地址都仍是相对地址,直到程序执行到需要转换地址的地方才进行转换。这种方式允许程序分配到不连续的存储区,并在程序运行之前就可以将其投入运行。
总结:
绝对装入方式 适用于单道程序环境,程序在编译时已知其在内存中的具体位置。
可重定位装入方式 适用于多道程序环境,程序在装入时逻辑地址与物理地址不同,需要在运行时进行地址转换。
动态运行时装入方式 也适用于多道程序环境,程序在运行时动态改变其在内存中的位置,需要重定位寄存器的支持。
其他小伙伴的相似问题:
程序的装入和卸载过程是怎样的?
程序装入内存地址如何计算?
软件装入方式有哪些?


