内存管理中的段表和页表
基础知识
1Byte(字节)=8bit
将用户程序变成可以在内存中执行的程序,通常需要以下几个步骤
- 编译:将用户代码编译成若干目标模块
- 链接:将编译后的一组目标模块和所需要库链接在一起, 形成完整的装入模块
- 装入:由装入程序将模块装入内存中运行
将模块装入内存有三种方式
1. 绝对装入
在编译的时候,就已经知道程序在内存
中的地址,可以在编译的时候提前写好。因为逻辑地址和实际内存地址完全相同,因此在后续的过程中,不需要对程序
或者数据
的地址进行修改。
2. 静态重定位
地址变换通常是在装入的时候,一次完成,
静态重定位的特点是 ,当一个作业装入内存时,必须给他分配全部的内存空间,如果没有足够的内存,则不能装入该作业。此外,作业一旦进入内存,整个运行期间就不能再内存中移动了,也不能再动态的申请内存空间了。
3. 动态重定位
等到程序真正运行时,才进行地址转换,转入后所有的地址,都是相对地址。
动态重定位的特点: 可以将程序分配到不连续的存储区中,在程序运行之前,只要装入部分代码即可。程序在运行的过程中,可以动态的申请分配内存。
具体的段页操作
请查看下面文章https://blog.csdn.net/shang_0122/article/details/100605717
参考文献
https://blog.csdn.net/sinat_42483341/article/details/109574563