1. 什么是重定位
可执行文件中代码以及数据的运行时内存地址是链接器指定的,确定程序运行时地址的过程就是重定位(Relocation)。
操作系统将逻辑地址转变为物理地址的过程,也就是对目标程序中的指令和数据进行修改的过程叫重定位。
2. 为什么重定位
由于一个作业装入到与其地址空间不一致的存储空间,所以对有关地址部分进行调整
3. 何时重定位
1) 程序编译连接时
2) 程序装入内存。
3) 程序执行时
4. 重定位类型
1) 静态重定位
【重定位】在程序执行之前进行重定位,它根据作业将要装入的内存起始位置,直接修改作业中的有关使用地址的指令。地址变换通常是在装入时一次完成的,以后不再改变。
优点:
- 无需硬件支持
- 程序重定位之后就不能在内存中移动;
- 要求程序有连续的存储空间;
- 用户之间难以共享主存中的同一程序副本
在程序执行过程中,CPU每次访问内存单元之前才进行地址变换,地址重定位。
优点:
- 用户程序在执行过程中,可以动态申请存储空间和在主存中移动
- 需要硬件的支持
推荐阅读
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- c语言|C语言初期学习遇到的特殊点 【三子棋详解】【初学者福音,详细总结,复习能手】
- Python|Python实战(使用线性回归预测房价)
- IC|数字IC后端真的不如前端设计和验证吗()
- Python|教你写个简单好用的Python脚本一键自动整理文件非常适合办公用~
- python|oeasy教您玩转python - 007 - # 字符本质
- vue.js|后端开发学习Vue(一)
- Go|Docker后端部署详解(Go+Nginx)
- 后台|NATAPP内网穿透通过nginx实现一个端口访问多个不同端口服务