第五课存储器管理 (Memory Management 教学目的: 存储器是计算机系统的重要组成部分,虽然 内存容量在不断扩大,但内存仍是宝贵资源, 如何提高主存储器利用率,并扩充大主存,对 主存信息实现有效保护是存储器管理主要任务, 也是各种不同存储管理方法的目标
第五课 存储器管理 (Memory Management) 教学目的: 存储器是计算机系统的重要组成部分,虽然 内存容量在不断扩大,但内存仍是宝贵资源, 如何提高主存储器利用率,并扩充大主存,对 主存信息实现有效保护是存储器管理主要任务, 也是各种不同存储管理方法的目标
教学要求: 熟悉存储管理目的和功能,掌握地址重定位的概念。 熟悉单一连续分配、固定分区分配、动态分区分配实 现原理;掌握可变式分区分配的数据结构和分配回收 算法,掌握动态重定位分区分配实现原理和分配算法。 熟悉覆盖与交换的概念。 熟练掌握分页存储管理原理,熟练掌握基本的地址变 换机构和具有快表的地址变换机构,了解两级页表机 制 掌握分段存储管理原理和分段地址变换机构,掌握分 页和分段比较,熟悉分页和分段的共享,掌握段页式 存储管理原理和地址变换机构
教学要求: 熟悉存储管理目的和功能,掌握地址重定位的概念。 熟悉单一连续分配、固定分区分配、动态分区分配实 现原理;掌握可变式分区分配的数据结构和分配回收 算法,掌握动态重定位分区分配实现原理和分配算法。 熟悉覆盖与交换的概念。 熟练掌握分页存储管理原理,熟练掌握基本的地址变 换机构和具有快表的地址变换机构,了解两级页表机 制。 掌握分段存储管理原理和分段地址变换机构,掌握分 页和分段比较,熟悉分页和分段的共享,掌握段页式 存储管理原理和地址变换机构
(一)存储管理概述 (1)存储管理目的和功能: 1。主存储器的分配和回收 内存分配的主要任务是为每一道程序分配内存空间,使它们 “各得其所”,分配时完成地址变换。每一道程序完成后回收 内存空间。 2。存储保护 内存保护的任务是确保每道程序都在自己的内存空间运行, 互不干扰。 3。提高主存储器的利用率,减少不可用的存储空间(称为“零 头),允许多道程序动态共享主存。 。内存扩充 内存扩充的任务是从逻辑上来扩充内存容量,使用户认为系统 所拥有的内存空间远比其实际的内存空间(硬件RAM)大的多
(一) 存储管理概述 (1)存储管理目的和功能: 1。主存储器的分配和回收 内存分配的主要任务是为每一道程序分配内存空间,使它们 “各得其所” ,分配时完成地址变换。每一道程序完成后回收 内存空间。 2。存储保护 内存保护的任务是确保每道程序都在自己的内存空间运行, 互不干扰。 3。提高主存储器的利用率,减少不可用的存储空间(称为“零 头),允许多道程序动态共享主存。 4。内存扩充 内存扩充的任务是从逻辑上来扩充内存容量,使用户认为系统 所拥有的内存空间远比其实际的内存空间(硬件RAM)大的多
(2)地址重定位 1。名字空间、地址空间和存储空间 在源程序中,是通过符号名来访问子程序和数据的, 我们把程序中符号名的集合称为“名字空间”。汇编语 言源程序经过汇编,或者高级语言源程序经过编译,得 到的目标程序是以“0”作为参考地址的模块。然后多个 目标模块由连接程序连接成一个具有统一地址的装配模 块,以便最后装入内存中执行。我们把目标模块中的地 址称为相对地址(或称为“逻辑地址”),而把相对地 址的集合称为“相对地址空间”或简称为“地址空间”。 装配模块虽然具有统一的地址空间,但是仍是以“0” 作为参考地址,即是浮动的。要把它装入内存执行,就 要确定装入内存的实际物理地址,并修改程序中与地址 有关的代码,这一过程称为地址重定位
(2)地址重定位 1。名字空间、地址空间和存储空间 在源程序中,是通过符号名来访问子程序和数据的, 我们把程序中符号名的集合称为“名字空间”。汇编语 言源程序经过汇编,或者高级语言源程序经过编译,得 到的目标程序是以“0”作为参考地址的模块。然后多个 目标模块由连接程序连接成一个具有统一地址的装配模 块,以便最后装入内存中执行。我们把目标模块中的地 址称为相对地址(或称为“逻辑地址”),而把相对地 址的集合称为“相对地址空间”或简称为“地址空间”。 装配模块虽然具有统一的地址空间,但是仍是以“0” 作为参考地址,即是浮动的。要把它装入内存执行,就 要确定装入内存的实际物理地址,并修改程序中与地址 有关的代码,这一过程称为地址重定位
地址重定位-1 地址空间的程序和数据经过地址重定位处理后,就变成了可由CPU 直接执行的绝对地址程序。我们把这一地址集合称为“绝对地址 空间”或“存储空间”。程序的名字空间、地址空间和存储空间 之间的关系如图所示: 汇编编译 地址重定位 连接 装入 符号 相对目标程 绝对目标程 源程序 序(装配模 序 块) 名字空间 地址空间 存储空间 相对地址逻辑地址绝对地址7物理地址 空间 空间
地址重定位-1 地址空间的程序和数据经过地址重定位处理后,就变成了可由CPU 直接执行的绝对地址程序。我们把这一地址集合称为“绝对地址 空间”或“存储空间” 。程序的名字空间、地址空间和存储空间 之间的关系如图所示: 符 号 源 程 序 相对目标程 序 ( 装配模 块) 绝对目标程 序 名字空间 地址空间 相对地址/逻辑地址 空间 存储空间 绝对地址/物理地址 空间 汇编/编译 连 接 地址重定位 装 入
2。地址重定位 地址重定位完成把相对地址转换成内存中的绝对地址,这 个过程称为地址映射(map)。按照重定位的时机,可分 为静态重定位和动态重定位。 静态重定位 静态重定位是在程序执行之前进行重定位。它根据装配模 块将要装入的内存起始地址,直接修改装配模块中的有 关使用地址的指令。 在图中以“0”作为参考地址的装配模块,要装入以 1000为起始地址的存储空间。显然在装入程序之前,程 序必须做一些修改才能正确运行
2。地址重定位 地址重定位完成把相对地址转换成内存中的绝对地址,这 个过程称为地址映射(map)。按照重定位的时机,可分 为静态重定位和动态重定位。 静态重定位 静态重定位是在程序执行之前进行重定位。它根据装配模 块将要装入的内存起始地址,直接修改装配模块中的有 关使用地址的指令。 在图中以“0”作为参考地址的装配模块,要装入以 1000为起始地址的存储空间。显然在装入程序之前,程 序必须做一些修改才能正确运行
地址重定位2 10000: 100: LOAD1,2500 10100:LOAD1,12500 2500 365 12500: 365 2600: 12600: 程序的地址空间 内存的地址空间 例如:LOAD1,2500这条指令是把相对地址为2500的存储单元 的内容365装入1号累加器。而这时内容为365的存储单元的实 际物理地址为12500(起始地址10000+相对地址2500),所以 LOAD1,2500这条指令中的直接地址码要作相应的修改,即 改为LOAD1,12500
地址重定位-2 10000: 10100: 12500: 12600: 程序的地址空间 内存的地址空间 例如:LOAD 1,2500 这条指令是把相对地址为2500的存储单元 的内容365装入1号累加器。而这时内容为365的存储单元的实 际物理地址为12500(起始地址10000+相对地址2500),所以 LOAD 1,2500 这条指令中的直接地址码要作相应的修改,即 改为LOAD 1,12500。 LOAD 1,2500 LOAD 1,12500 365 365 0: 100: 2500: 2600:
地址重定位-3 在程序中需要修改的位置称为重定位项。程序装入内存中的起 始地址称为重定位因子。为了支持静态重定位,连接程序在生成统 地址空间和装配模块时,还应产生一个重定位项表。所以操作系 统的装入程序要把装入模块和重定位项表一起装入内存。由装配模 块的实际装入起始地址得到重定位因子,然后取重定位项,加上重 定位因子得到欲修改位置的实际地址,最后对实际地址中的内容再 加上重定位因子,从而完成指令代码的修改。当完成重定位后,就 可以启动程序执行 静态重定位虽然有无须硬件支持的优点,但是也存在明显的缺 点:一是程序重定位以后就不能在内存中移动;二是要求程序的存 储空间是连续的,不能把程序存储到若干个不连续的区域中
地址重定位-3 在程序中需要修改的位置称为重定位项。程序装入内存中的起 始地址称为重定位因子。为了支持静态重定位,连接程序在生成统 一地址空间和装配模块时,还应产生一个重定位项表。所以操作系 统的装入程序要把装入模块和重定位项表一起装入内存。由装配模 块的实际装入起始地址得到重定位因子,然后取重定位项,加上重 定位因子得到欲修改位置的实际地址,最后对实际地址中的内容再 加上重定位因子,从而完成指令代码的修改。当完成重定位后,就 可以启动程序执行。 静态重定位虽然有无须硬件支持的优点,但是也存在明显的缺 点:一是程序重定位以后就不能在内存中移动;二是要求程序的存 储空间是连续的,不能把程序存储到若干个不连续的区域中
地址重定位-4 动态重定位 动态重定位是指在程序执行过程中进行地址重定位, 即在每次访问内存单元前才进行地址变换。动态重定位 可使装配模块不加任何修改就装入内存,但是它需要硬 件一重定位寄存器的支持。下图给出了动态重定位的示 意图。 程序的目标模块在装入内存时,与地址有关的指令都无 须进行修改,如在图中LOAD1,2500这条指令中仍保 持相对地址2500。当该模块被操作系统调度到处理机上 执行时,操作系统首先把该模块装入的实际起始地址减 去目标模块的相对基地址(图中该模块的基地址为0) 然后将其差值装入重定位寄存器
地址重定位-4 动态重定位 动态重定位是指在程序执行过程中进行地址重定位, 即在每次访问内存单元前才进行地址变换。动态重定位 可使装配模块不加任何修改就装入内存,但是它需要硬 件—重定位寄存器的支持。下图给出了动态重定位的示 意图。 程序的目标模块在装入内存时,与地址有关的指令都无 须进行修改,如在图中LOAD 1,2500这条指令中仍保 持相对地址2500。当该模块被操作系统调度到处理机上 执行时,操作系统首先把该模块装入的实际起始地址减 去目标模块的相对基地址(图中该模块的基地址为0), 然后将其差值装入重定位寄存器
动态重定位的示意图 重定位寄存器 10000: 100;IOAD1,2500 10100:LOAD1,2500 2500:365 12500:365 2600 12600: 程序的地址空间 内存的地址空间
1000 动态重定位的示意图 重定位寄存器 10000 0: 10000: 100:LOAD 1,2500 10100: LOAD 1,2500 + 2500:365 12500:365 2600: 12600: 程序的地址空间 内存的地址空间