本文共 2202 字,大约阅读时间需要 7 分钟。
内存管理(Memory Management)
是操作系统设计种最重要和最复杂的内容之一。内存空间的分配与回收
:由操作系统完成主储存器的分配和管理
,减轻程序员的负担,提高编程效率。 ② 地址转换
:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致
,因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址。 ③ 内存空间的扩充
:利用虚存技术或自动覆盖技术
,从逻辑上
扩充内存。 ④ 存储保护
:保证各道作业在各自的存储空间内运行,互不干扰。将程序和数据装入内存
,将用户源程序变为可在内存中执行的程序
,通常需要以下步骤: ① 编译
:由编译程序
将用户源代码编译成若干目标模块
。 ② 链接
:由链接程序
将编译后形成的一组目标模块
及所需的函数链接在一起
,形成一个完整的装入模块
。 ③ 装入
:由装入程序将装入模块装入内存运行
。 静态链接、装入时动态链接和运行时动态链接
。 ① 静态链接
:在程序运行之前
,先将各目标模块及它们所需的库函数链接成一个完整的可执行程序
,以后不再拆开。 ② 装入时动态链接
:将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的方式
。 ③ 运行时动态链接
:对某些目标模块的链接,是在程序执行中需要该目标模块时才进行
的。其优点是便于修改和更新,便于实现对目标的共享。绝对装入、可重定位装入和动态运行时装入
。知道程序将驻留在内存的某个位置
,则编译程序将产生绝对地址
的目标代码。绝对装入程序按照装入模块中的地址,将程序和数据内存。由于程序的逻辑地址与实际内存地址完全相同,因此不需要对程序和数据的地址进行修改。只适用于单道程序环境
。程序中所用的绝对地址,可在编译或汇编时给出,也可由程序员直接赋予。而通常情况下在程序中采用的是符号地址,编译或汇编时再转换为绝对地址。装入时对目标程序中的指令和数据的修改过程称为重定位
,地址变换通常是在转入时一次完成的
,故又称稳态重定位
。必须给它分配要求的全部内存空间,若没有足够的内存,则不能装入该作业
。作业一旦进入内存,整个运行期间不能在中移动,也不能再申请内存空间
。动态重定位
,程序在内存中若发生移动,则需要采用动态的装入方式。装入程序把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址
,而是把这种地址转换推迟到程序真正要执行时才进行
。此时装入内存后的所有地址均为相对地址,需要重定位寄存器的支持
。可以将程序分配到不连续的存储区中
;程序运行之前可以只装入它的部分代码即可投入运行
,然后在程序运行期间,根据需要动态申请分配内存;便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。 目标模块
都从 0 号单元开始编址
,这称为该目标模块的相对地址或逻辑地址
。可执行目标程序时
,链接程序顺序依次按各个模块的相对地址构成统一的从 0 号单元开始编址的逻辑地址空间
。物理地址空间是指内存中物理单元的集合
,是地址转换的最终地址
,进程在运行时执行指令和访问数据,最后都要通过物理地址从主存中存取。必须通过地址转换将逻辑地址转换成物理地址
,该过程称为地址重定位
。指内存分配前需要保护操作系统不受用户进程影响、保护用户进程不受其他用户进程的影响
。内存保护方法如下两种: 1)在 CPU 中设置一堆上、下限寄存器,存放用户作业在主存种的下限和上限地址,每当 CPU 要访问一个地址时,分别和两个寄存器的值比较,判断有无越界
。 2)采用重定位寄存器或基址寄存器,和界地址寄存器—限长寄存器—来实现保护机制
。重定位寄存器含最小的物理地址值,界地址寄存器含逻辑地址的最大值
。每个逻辑地址值必须小于界地址寄存器值。内存管理机构动态地将逻辑地址与界地址寄存器进行比较,若未发生越界,则加上重定位寄存器地的值映射成物理地址,再交送内存单元
。 每个逻辑地址都需要与这两个寄存器进行核对,以保证操作系统和其他用户程序及数据不被该进程运行影响
。重定位寄存器和界地址寄存器的区别
:重定位寄存器是用来“加”的,逻辑地址加上重定位寄存器中的值形成物理地址;界地址寄存器是用来“比”的,通过比较界地址寄存器中的值与逻辑地址的值来判断是否越界。转载地址:http://zqqgn.baihongyu.com/