为什么会有可重定位文件
- 因为在某个进程每次运行的时候,操作系统分配给该进程代码和数据区域的起始地址是不确定的。
- 而我们在脚本文件里面的跳转goto,函数调用,if语句,都是相对于该脚本起始地址为0来调用的
- 所以就需要在把代码从磁盘加载到进程当中的时候,改变这些地址
解决办法
- 有两种解决思路
1、静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。
2、动态重定位:它不是在程序装入内存时完成的,而是CPU每次访问内存时 由动态地址变换机构(硬件)自动进行把相对地址转换为绝对地址。动态重定位需要软件和硬件相互配合完成。