内存的扩展
- 操作系统需要提供某种技术在逻辑上对内存进行扩充
地址转换(逻辑地址转换成物理地址) -3部分
绝对装入(单道程序阶段,误操作系统)- 写程序时就完成翻译转换。
- 不需要操作系统直接根据,根据物理地址对硬件进行直接操作
可定位装入(静态重定位,早期多批道处理阶段)- 进入内存时完成翻译转换,只有进入时一次
- 模块采用的是相对地址
- 装入目标程序的过程中,完成从逻辑地址到物理地址的转换
- 但是,这个转换过程只是在装入时发生一次;作业装入必须一次完成,不能在内存中移动,也不能申请内存空间(因为进入内存过后,逻辑地址已经全部翻译为物理地址,并且只翻译一次,这就说明了作业一旦分配就不能移动的现象)
动态运行时装入(动态重定位,现代操作系统)- 在内存中,被运行时才翻译转换,可以翻译转换多次
- 装入程序到内存当中,只有在程序需要真正运行时才开始转换
- 特点:需要重定位寄存器(MMU),可以将程序的内存分配到不连续的内存区中,便于程序段的共享可以向用户提供更大的内存地址空间(地址空间大于内存空间,因为是需要时才翻译分配内存,说明我们程序的翻译过程可以有多次,这就赋予我们可以动态分配和回收内存块的能力,也间接扩大了逻辑地址空间)
为什么需要逻辑地址?
为了更好的移植性:使用了逻辑地址后,我们的程序就可以适用于更多的平台的,不会因为底层硬件的不同导致程序无法运行。
更好的使用内存空间:使用了逻辑地址后,我们可以更好更高效的分配内存地址和回收内存地址,提高内存地址的使用率。
内存保护 -2部分
上下限寄存器
- 存放用户作业的上下限地址
- 每当cpu要访问时,都需要比对这两个寄存器的上下限,看是否越界。
重定位寄存器(基地址寄存器)和界地址寄存器(限长寄存器)
- 基地址寄存器类似于数组的首地址;限长寄存器类似于数组长度。
- 我们可以使用这两个寄存器的值算出,进程的内存空间范围。
覆盖与交换 -2部分 (都是内存换出或换入,只是单位不同,虚拟内存的基础)
覆盖
- 将程序分成多个段。常用的段驻守内存;不常用段,需要时才调入内存。 (以段为单位)
- 内存也分为一个固定区,若干覆盖区,常用的段留守固定区;非常用的段在调入内存时,使用覆盖区。
交换
- 在内存紧张的时候将,内存中某些进程调出内存,把外存中已经是就绪态的进程调入内存中(以进程为单