一、物理地址和逻辑地址
物理地址(绝对地址):指内存单元的地址.主存中一系列存储物理单元。
物理地址的集合称为物理地址空间,也叫绝对地址空间或实空间或存储空间,亦即内存空间。存储空间中的单元一般都是按字节从0开始连续编址的,如一个256MB的内存,其地址范围是0 ~ (256M—1)。
逻辑地址(相对地址):程序用来访问信息所用的一系列的地址单元。又称相对地址或虚地址。
逻辑地址的集合称为逻辑地址空间,也叫相对地址空间或虚空间或地址空间。
作业运行时不能按其相对地址访问内存单元,而应按相应的物理地址访问,需要进行相对地址到物理地址的转换。
二、重定位
为了使编程更方便,程序员写程序时应该只需要关注指令、数据的逻辑地址。而逻辑地址到物理地址的转换(这个过程称为地址重定位)应该由操作系统负责,这样就保证了程序员写程序时不需要关注物理内存的实际情况。
当一个地址装入与其地址空间不一致的存储空间中,就得要地址变换。也就是说将虚地址映射为内存地址,把这种作法叫做地址重定位。
地址重定位有三种形式:绝对装入、静态重定位、动态重定位
1、绝对装入
2、静态重定位
是指在程序运行之前由装入程序完成的重定位过程。在装入一个作业时,把作业中的指令地址全部转换为绝对地址(地址转换工作是在作业执行前集中一次完成的)在作业执行过程中就无须再进行地址转换工作。
3、动态重定位
是在程序执行过程中,在CPU访问内存之前,将要访问的程序或数据地址转换成内存地址.
动态重定位由软件(操作系统)和硬件(地址转换机构)相互配合来实现。动态重定位的系统支持“程序浮动”,而静态重定位则不能。
总结
三、存储管理的功能
1、内存的分配与回收
2、内存空间的扩展
3、地址转换
4、内存保护
操作系统需要提供内存保护功能。保证各进程在各自存储空间内运行,互不干扰。
1、界地址保护
2、基地址、限长保护
四、内存扩充技术
1、覆盖(Overlay)技术
所谓覆盖,是指同一主存区可以被不同的程序段重复使用。通常一个作业由若干个功能上相互独立的程序段组成,作业在一次运行时,也只用到其中的几段,利用这样一个事实,我们就可以让那些不会同时执行的程序段共用同一个主存区。因此,我们把可以相互覆盖的程序段叫做覆盖。而把可共享的主存区叫做覆盖区。
覆盖技术的主要特点是打破了必须将一个作业的全部信息装入主存后才能运行的限制。在一定程度上解决了小主存运行大作业的矛盾。
但必须由程序员声明覆盖结构,操作系统才能完成自动覆盖。同时对用户不透明,增加了用户编程负担,覆盖技术只用于早期的操作系统,现在已经成为历史。
2、交换(Swapping)技术
交换技术被广泛地运用于早期的小型分时系统的存贮管理中。
所谓交换,就是系统根据需要把主存中暂时不运行的某个(或某些)作业部分或全部移到外存,而把外存中的某个(或某些)作业移到相应的主存区,并使其投入运行。所以,交换技术也叫对换或滚进滚出(roll-in,roll-out)。也有的系统叫挂起调度或中级调度。
被换出到外存的程序只是临时被剥夺了对内存的使用权,过一段时间,还必须换入内存运行。因此,交换是一种用时间换空间的技术。
交换的时机通常在以下情况发生:
①作业的进程用完时间片或等待输入输出;
②作业要求扩充存贮而得不到满足时。
同覆盖技术一样,交换技术也是利用外存来逻辑地址扩充主存。
它的主要特点是打破了一个程序一旦进入主存便一直运行到结束的限制。
3、虚拟内存(Virtual Memory)技术
虚拟内存技术诞生于1961年。
广泛使用是从上个世纪70年代初以后,今天几乎所有的操作系统都采用虚拟内存技术来管理内存。
这是一种利用虚拟存储器来逻辑扩充物理内存的技术。其基本思想是用软硬件技术把内存与外存这两级存储器当成一级存储器来用,从而给用户提供了一个比内存也比任何应用程序大得多的虚拟存储器,使得用户编程时再也不用考虑内存大小的限制了,给用户编程带来极大的方便。
虚拟内存技术的实现也利用了自动覆盖和交换技术。
五、存储管理的分类
按照对内存的划分策略,实用的存储管理方案有下面几种。我将在后面几篇博客中更新说明。
1.分区式存储管理
2.分页式存储管理
3.分段式存储管理
4.段页式存储管理