《计算机操作系统原理 ch6 存储管理》由会员分享,可在线阅读,更多相关《计算机操作系统原理 ch6 存储管理(156页珍藏版)》请在金锄头文库上搜索。
1、第六章 存储管理n主存管理的功能n分区存贮管理n分页存储管理n分段存储管理n段页式存储管理n覆盖技术与交换技术n虚拟存储1一、主存管理的功能 n地址映射 n主存分配 n存储保护 n主存扩充(虚拟内存) 2地址映射(地址重定位)n内存的每个存储单元都有一个编号,这 种编号称为内存地址(或称为物理地址, 绝对地址)。n内存地址的集合称为内存空间(或物理 地址空间)。3n要求用户用内存地址编程是非常困难的 ,尤其是在多道程序设计的环境中。n用户编程所用的地址称为逻辑地址(或 程序地址,或虚地址),由逻辑地址组成 的空间称为逻辑地址空间(或程序地址空 间)。4地址映射Load A 2003456。12
2、00物理地址空间Load A data1data1 3456源程序Load A 20034560100200编译 连接逻辑地址空间BA=10005地址映射的方式n我们把用户程序装入内存时对有关 指令的地址部分的修改定义为从程序 地址到内存地址的地址映射,或称为 地址重定位。n地址映射的方式: 1、静态地址映射 2、动态地址映射61、静态地址映射n程序被装入内存时由操作系统的连接装 入程序完成程序的逻辑地址到内存地址的 转换。7映射方法n假定程序装入内存的首地址为BR,程序 地址为VR,内存地址为MR,则地址映射 按下式进行:MR=BR+VR 。n例如,程序装入内存的首地址为1000, 则装配程
3、序就按MR=1000+VR对程序中 所有地址部分进行修改,修改后指令Load A,200就变为Load A,12008优缺点n优点:不需要硬件的支持。 n缺点:程序必须占用连续的内存空间; 一旦程序装入后不能移动。 92、动态地址映射n动态地址重定位是在程序执行的过程中,每 次访问内存之前,将要访问的程序地址转换为 内存地址。一般来说这种转换是由专门的硬件 机构来完成的。 10映射方法n最简单的硬件机构是重定位寄存器。n在地址重定位机构中,有一个基地址寄 存器BR和一个程序地址寄存器VR,一个 内存地址寄存器MR。1103456.LOAD A 200 .0100200300.LOAD A 20
4、03456110012001300200VR+1000BR12地址映射的具体过程n程序装入内存后,它所占用的内存区的 首地址由系统送入基地址寄存器BR中。n在程序执行的过程中,若要访问内存, 将访问的逻辑地址送入VR中。 n地址转换机构把VR和BR中的内容相加, 并将结果送入MR中,作为实际访问的地址 。13动态地址映射的优缺点优点:n程序占用的内存空间是动态可变的,当程序从某个 存储区移到另一个区域时,只需要修改相应的寄存 器BR的内容即可。n一个程序不一定要求占用一个连续的内存空间。n可以部分地装入程序运行。n便于多个进程共享同一个程序的代码。 动态地址重定位的代价:n需要硬件的支持。n实
5、现存储管理的软件算法较为复杂。14主存分配与回收 要完成内存的分配和回收工作,要求 设计者选择和确定以下几种策略和结构:n调入策略n放置策略n置换策略n分配结构15调入策略n用户程序在何时调入内存的策略。n目前有请调和预调两种16放置策略n用户程序调入内存时,确定将其放置在 何处的策略。17置换策略n当需要将某个用户程序调入内存而内存 空间又不够时,就要确定哪个或哪些程序 可以从内存中移走。18分配结构n分配结构是用来登记内存使用情况的数 据结构。如空闲区表、空闲区队列等。19引起内存分配和回收的原因n进程的开始的结束。n进程运行的过程中,它所占用的内存也可能发 生变化。如栈的变化。n进程映像
6、在内存和外存之间传递。由于内存有 限,系统中不可能容纳所有进程,有些进程的映 像可以存放在外存,当要运行这些进程时,必须 把它们调入内存。n系统为了充分利用内存空间,有时可能对内存 空间进行调整。20存储保护保证在内存中的多道程序只能在给定 的存储区域内活动并互不产生干扰。 包括:n防止地址越界n防止越权(对共享区有访问权)21存储保护的硬件支持n界地址寄存器(界限寄存器)n存储键22界地址寄存器(界限寄存器)n界地址寄存器被广泛使用的一种存储保 护技术n机制比较简单,易于实现23实现方法n在CPU中设置一对下限寄存器和上限寄存器存放 用户作业在主存中的下限和上限地址n也可将一个寄存器作为基址
7、寄存器,另一寄存 器作为限长寄存器(指示存储区长度)n每当CPU要访问主存,硬件自动将被访问的主存 地址与界限寄存器的内容进行比较,以判断是否 越界n如果未越界,则按此地址访问主存,否则将产 生程序中断越界中断(存储保护中断)24图示25主存扩充(虚拟内存)n为了使程序员在编程时不受内存的结构 和容量的限制,系统为用户构造一种存储 器,其结构可能与内存结构不同,容量可 能远远超过内存的实际容量。这种面向编 程的存储器称为虚拟存储器。由虚存构成 的存储空间称为虚存空间。或称虚地址空 间。26实现虚拟内存的基本原理n将程序正在使用的部分内容放在内存,而暂时 不用的部分放在外存,在需要时由系统调入内
8、存 ,并将不需要(或暂不需要)的部分调出内存。n由于程序在执行时,在一段时间内一般仅使用 它的程序的一部分(或一小部分),所以程序仅 有部分装入内存完全能够正确执行。n要由操作系统结合相关硬件来完成上述工件, 这样计算机好象为用户提供了一个容量远大于内 存的存储器,这个存储器称为虚拟存储器。 27二、分区存贮管理 把整个内存划分为若干大小不等的区 域,操作系统占用一个区域,其它区域供系统中 的多个进程共享,这种方法称为分区存储管理。 这是最简单的一种存储管理,按分区 划分的时机可分为n固定分区n动态分区28固定分区n固定分区就是把内存固定地划分为若 干个大小不等的区域。分区的划分由计 算机的操
9、作员或者由操作系统给出,并 给出分区说明表。n早期的IBM的OS/360MFT(具有固定任 务数的多道程序系统)采用了这种固定 分区的方法。29举例n某系统的内存容量为256K,操作系统占 用低地址的20K,其余空间划分成4个固定 大小的分区。如下图30图示31分区说明表分区号大小 (KB)始址状态1820已分配 23228已分配 36460已分配 4132124未分配32固定分区性能分析n在作业大小和出现频率均已知的情况下,固定 分区是合适的。在这种情况下分区的大小选择与 作业大小相当,这样内存的使用效率较高。n但是若作业的大小和出现的频率不知道时,势 必造成分区的大小和作业的大小相差甚远,
10、这样 就会造成存储空间的浪费,从而影响整个系统的 效率。 33动态分区n动态分区是指在系统运行的过程中建立 分区,并使分区的大小刚好与作业的大小 相等。这种存储管理的方法解决了固定分 区严重浪费内存的问题。是一种较为实用 的存储管理方法。34实现动态分区需要的数据结构n在动态分区存储管理中,要有相应的数据结构 来登记空闲区的说明信息,它包括空闲区的大小 和位置。n不同系统根据设计要求采用不同的结构。常用 的有表结构和队列结构。n系统还要设置了等待分区队列,当系统中无空 闲区或无满足要求的空闲区时,则把申请者送入 等待队列中,等待别的进程释放内存之后再唤醒 队列中的进程。35空闲区表和空闲区队列
11、举例36动态分区的分配和回收 1、分区的分配在采用分区存储管理的系统中,系统初启后。 除操作系统占用一个分区外,其余存储区为一个 大的空闲区。分区的分配是指系统根据用户的请求,在空 闲区表或空闲区队列中寻找一个满足用户要求的 空闲区,把这个空闲区分配给用户。 以空闲闲区表为为例,当用户要求一个大小为SIZE 的存储空间时,系统查询空闲区表,找一个大于 或等于SIZE的空闲区。37分配时的三种情况n其一是系统中无满足要求的空闲区,则 分配失败。n其二是空闲区大小与SIZE相等,则修改 空闲区表相应表目,向用户返回该空闲区 首址,表示此空闲区已分给了要求的用户 。38n其三是空闲区大于SIZE,这
12、时将空闲区一分为 二。 将一个空闲区分成二部分有两种办法 : 一是从空闲区的上部开始划出SIZE大 小的空闲区给用户; 二是从空闲区的底部开始向上划出 SIZE大小的空闲区给用户。 一般常采用第二种办法,因为这样划 分时,余下的部分在空闲区表中的首地址不变, 只需要修改一下大小就行了。39分区的回收当某个进程释放某存储区时,系统首先 检查释放区是否与系统中的空闲区相邻, 若相邻则把释放区合并到相邻的空闲区中 去,否则把释放区作为一个空闲区插入到 空闲区表的适当位置。40释放区与空闲区相邻的四种情况41说明n释放区与前空闲区相邻:将释放区与前空闲区合并为 一个空闲区。其首址仍为前空闲区首址,大小
13、为释放区 大小与空闲区大小之和。n释放区与前后两个空闲区相邻:将这三个区合为一个 空闲区,其首址为前空闲区首址,大小为这三个区大小 之和,并取消原后空闲区表目。n释放区与后空闲区相邻:则把释放区合并到后空闲, 首地址为释放区首地址,大小为二者大小之和。n释放区不与任何空闲区相邻:将释放区作为一个空闲 区,将其大小和首址插入到空闲区表的适当位置。42三种放置策略n1、空闲区表或队列的排序 n2、首次适应法 n3、最佳适应法 n4、最坏适应法 n5、三种策略比较431、空闲区表或队列的排序n按空闲区首址递增的次序归类组织空闲 区表或空闲区队列n按空闲区大小的递增或递减次序组织空 闲区表或队列 44
14、2、首次适应法n要求空闲区按首址递增的次序组 织空闲区表(队列)。 45n分配:当进程申请大小为SIZE的内存时 ,系统从空闲区表的第一个表目开始查询 ,直到首次找到等于或大于SIZE的空闲区 。从该区中划出大小为SIZE的分区分配给 进程,余下的部分仍作为一个空闲区留在 空闲区表中,但要修改其首址和大小。46n回收:按释放区的首址,查询空闲区表 ,若有与释放区相邻的空闲区,则合并到 相邻的空闲区中,并修改该区的大小和首 址,否则,把释放区作为一个空闲区,将 其大小和首址按照首地址大小递增的顺序 插入到空闲区表的适当位置。47分析n注意:每次分配和回收后空闲区表或空闲区 队列都要按首址递增的次
15、序排序。首次适应法的优点:n释放某一存储区时,若与空闲区相邻则合并 到相邻空闲分区中去,这种情况并不改变该 区在表中的位置,只要修改其大小或首址。n这种算法是尽可能地利用低地址空间,从而 保证高地址空间有较大的空闲区。 48最佳适应法n要求按空闲区大小从小到大的次 序组成空闲区表(队列)。49n分配:当进程申请一个存储区时,系统 从表头开始查找,当找到第一个满足要求 的空闲区时,停止查找,并且这个空闲区 是最佳的空闲区。n所谓最佳即选中的空闲区是满足要求的 最小空闲区。50n回收:按释放区的首址,查询空闲区表 (队列) ,若有与释放区相邻的空闲区, 则合并到相邻的空闲区中,并修改该区的 大小和
16、首址,否则,把释放区作为一个空 闲区插入空闲区表(队列) 。n分配和回收后要对空闲区表(队列)重 新排序。51分析优点:n在系统中若存在一个与申请分区大小相等的空闲区, 必定会被选中,而首次适应法则不一定。n若系统中不存在与申请分区大小相等的空闲区,则选 中的空闲区是满足要求的最小空闲区,而不致于毁掉较 大的空闲区。 缺点:n空闲区的大小一般与申请分区大小不相等,因此将其 一分为二,留下来的空闲区一般情况下是很小的,以致 无法使用。随着时间的推移,系统中的小空闲区会越来 越多,从而造成存储区的大量浪费。 52最坏适应法n要求空闲区按大小递减的顺序组 织空闲区表(或队列)。53n分配:进程申请一个大小为SIZE的存储 区时,总是检查空闲区表的第一个空闲区 的大小是否大于或等于SIZE。若空闲区小 于SIZE,则分配失败;否则从空闲区中分 配SIZE的存储区给用户,然后修改和调整 空闲区表。54n回收:按释放区的首址,查询空闲区表 (队列) ,若有与释放区相邻的空闲区, 则合并到相邻的空闲区中,并修改该区的 大小和首址,否则,把释放区作为一