第3章 存储管理
3.1实用系统中的存储管理方法
3.1.1存储器管理的功能
内存分配、地址映射、内存保护、内存共享、内存扩充
3.1.2用户程序的主要处理阶段
1).编辑阶段:创建源文件
2).编译阶段:生成目标文件
3).连接阶段:生成可执行文件
4).装入阶段:重定位,装入内存
5).运行阶段:得到结果 存储器管理的功能
3.1.3实用系统中的存储管理方法
3.1.1DOS分区及分段
(1)OS+用户区:低端的640KB的基本内存
(2)扩展内存:高端的扩展内存
(3)OS+用户区+扩展内存:主存储器被限制为1MB的内存空间, 单道程序
(4)OS:系统启动后将操作系统调入基本内存的低端位置,大概占几十KB的空间
(5)用户区:存放用户程序,大小必须低于640KB
3.1.2Windows XP的存储器
(1)Windowsxp要求存储器最低为64MB
(2)内存被划分为大小为4KB的页面,可存放多个用户任务的页面,多任务同时运行
(3)用户在编制程序时,其大小最高可达4GB,只装入程序的部分页面来运行
(4)Windows支持虚拟存储器
3.1.3Linux存储管理
(1)Linux系统将存储器空间划分成页面,根据进程运行需要对页面进行切换
(2)在磁盘上安排了交换区与内存协调工作,以达到扩大内存的目的
(3)Linux系统的交换区多采用在硬盘上划分出一个指定区域来作为交换区,因此,交换区的大小不可变化
3.2 存储管理功能
3.2.1用户实体与存储空间
3.2.1.1用户实体与存储器的关系
(1)用户实体与存储器的关系
1)任务在激活前存放在辅助存储器上,激活后,它成为进程进入主存储器
2)进程的描述部分及主程序部分始终存放于主存储器,其他程序和数据部分视需要由操作系统在内存与外存之间交换
3)当用户向计算机提交自己的任务时,存储管理是以一种逻辑形式来进行描述,而当操作系统处理用户的任务时,是对具体的存储器地址进行操作
4)存储管理的工作:处理发生在衔接逻辑和物理存储时所产生的各种问题
3.2.1.2用户实体与存储空间
(1)物理地址/绝对地址:内存中的实际地址/内存中各物理单元的地址是从统一的基地址顺序编址
(2)物理地址空间/绝对地址空间:当逻辑地址空间被映射到内存时所对应的物理地址的集合(只有当逻辑地址空间存在时,才会有物理地址空间)
(3)逻辑地址/相对地址:用户的每一条程序指令要访问的数据都有一个对应的地址/用户程序经编译之后的每个目标模块都以0为基地址顺序编址
(4)逻辑地址空间:实体(用户、作业、任务、进程或程序)所用的所有逻辑地址的集合
3.2.2分配、释放及分配原则
(1)存储分配: 存储分配实际上是将作业的逻辑地址空间映射成为内存中的物理地址空间
(2)存储释放: 存储释放实际上是解除逻辑地址空间与物理地址空间的联系,并释放物理空间
(3)分配原则
在设计分配程序时需要考虑诸多因素:
1)内存空间的划分
2)数据结构的确定
3)作业空间的划分
4)淘汰算法
5)分配算法
3.2.3地址映射
(1)地址映射:
1)对于指令要访问的地址进行相对地址到绝对地址的变换
2)对于指令要访问的地址进行相对地址到绝对地址的变换
(2)装入: 指将逻辑地址空间安排到内存中具体的物理位置上。
装入针对的是整个逻辑地址空间(装入后仍相对地址不能够访问)
(3)绝对地址=(BR)+ 相对地址
(4)重定位:把逻辑地址转变为内存的物理地址的过程
(5)重定位的划分: 静态重定位和动态重定位
(6)静态重定位:是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的内存地址。重定位在程序装入时一次完成(不可改变)
缺点:
1)执行期间程序不能在主存储器中移动,所以对提高主存储器的利用率不利
2)若程序空间大于被分配的物理空间,由程序员自行采取某种手段来处理空间不足问题,如采用覆盖结构
3)用户不能共享已经存放在主存中的同一个程序,如果几个用户要使用同一个程序,则每个用户必须在各自的主存空间中存放一个程序副本
(7)动态重定位:在程序执行期间,每次访问内存之间进行重定位,这种变换是靠硬件地址变换机构实现的(其绝对地址空间发生变化或被分割为不同的区域,变化后只需要将基地址寄存器中的内容作对应修改)
优点:
1)在程序开始执行之前,不一定要把整个程序都调入到主存中。一个程序可以被分配在多个不连续的主存物理空间内,以提高主存储器的利用率。
2)几个程序可以共享存放在主存中的同一个程序段。
3)支持虚拟存储器。
缺点:
1)需要有硬件支持
2)实现存储管理的软件算法比较复杂
(8)碎片:内存中容量太小、无法被利用的小分区
3.2.4虚拟存储器
(1)虚拟存储器:是由操作系统提供的一个假想的特大存储器
(2)虚拟存储器的基本特征:
1)虚拟扩充:不是物理上,而是逻辑上扩充了内存容量
2)部分装入:每个作业不是全部一次性地装入内存,而是只装入一部分
3)离散分配:不必占用连续的空间,而是“见缝插针”。
4)多次对换:所需的全部程序和数据要分成多次调入内存
(3)虚拟存储器受到的限制:
1)指令中表示地址的字长
2)外存的容量
(4)实现虚拟内存必须具备的条件:
1)实际内存空间
2)辅助存储器上的内存交换区
3)虚拟地址
4)换进、换出机制
3.2.5存储保护与共享
(1)存储保护:保护进程的数据不被非法访问者破坏
(2)存储保护的方法: 界地址寄存器保护法和访问授权保护
1) 界地址寄存器保护法:
采用硬件:基地址寄存器BR(操作系统常驻内存部分以后的首地址)
采用软件:长度寄存器LR(用户可用区域的长度)
缺点:当进程之间需要共享某些数据时,使用界地址寄存器
就表现得无能为力
2) 访问授权保护:
访问授权: 当进程访问某个区域时,若进程的访问权限大于等于被访问区域的权限值,访问可以进行,否则视为非法
设置访问权限值:系统为每一个存储区域都给定一个访问权限值, 同时也为每一个进程赋予一个访问权限值
优缺点:
一个进程可以对不同存储区域有不同的访问权限;
一个存储区域也可以被多个具有不同访问权限的进程按权限级别进行访问。
允许存储区域的共享。
3.2.6存储区整理
(1)当系统运行一段时间后,可能出现如下问题:
1)产生许多碎片
2)进程过分分散存储
3)换进、换出的次数过多,导致系统运行缓慢
4)不断“内存空间不够”
(2)存储器的整理方法:
1)定期将内存中的碎片合并
2)将某些进程的分散存储区域移动到一起
经过整理后
系统中有更大的自由分区,提高存储管理的效率
在整理时中断所有进程,并且需要消耗较多的CPU时间
3.3 分区管理
3.3.1单一分区
(1)单一分区:连续的用户逻辑地址空间,经过装入程序直接装入分区的低地址部分的单一的连续的区域
(2)分配与释放:
(3)地址映射: 静态重定位(由于作业的物理地址空间不会发生变化,因此,单一连续分区不适合使用动态重定位)
(4)存储保护: 界地址寄存器保护法(由于操作系统不会发生变化,甚至可以不使用界地址寄存器,而将基址和长度用两个常量来代替)
(5)优缺点
优:
1)管理简单
2)使用安全
3)不需要任何附加的硬件设备
缺:
1)作业的大小受用户区大小的限制
2)不支持多用户
3)容易造成系统资源的浪费
3.3.2多重固定分区
(1)多重固定分区:将内存空间由小到大划分为若干个位置固定大小不等的区域,每个区域可以存放一个作业,存放于不同区域的作业可以并行(连续,一次性装入)
1)内存分区表: 描述内存中每一个区域的情况
2)作业表: 描述存放于区域中的作业
(3)地址映射: 静态重定位
(4)存储保护: 界地址寄存器方法和访问授权保护(由于作业在内存中的位置保持不变,可以用两个常量替代界地址寄存)
(5)优缺点:
1)提高了CPU的利用率。
2)作业大小受到最大分区大小的限制。
3)空间浪费。
4)碎片问题
3.3.3多重动态分区
(1)多重动态分区
1)已使用分区表: 描述已被分配的区域
2)自由分区表: 描述内存中的自由区域3)自由分区链: 为每一个自由分区设置一个链接指针来指向下一个自由分区,使所有的自由分区形成一个链表
4)内存: 根据作业对内存空间的申请来划分主存区域,区域的大小可变、位置可变、数量也可变
(2)多重分区分配与释放
1)最先适应算法: 将作业分配到内存中第一个碰到的大于或等于作业申请空间的未分配区
2)最佳适应算法: 将作业申请大小与内存中所有未分配区的大小进行比较,直到找到最小的大于或等于作业空间的区分配给作业
3)最坏适应算法: 使用大的自由空间,在进行分割后剩余空间还可以被使用,但也使大的自由空间无法保留给需要大空间的作业
(3)地址映射: 动态重定位
(4)存储保护: 界地址寄存器方法和访问授权保护(作业被分配于内存一个连续的区域中,访问授权保护的作用并不大,因为作业并没有对其他作业空间的访问权力)
(5)存储区整理: 紧缩
紧缩: 将内存中已使用区域经过移动沉淀到低地址部分,从而使碎片浮动到内存的高地址部分合并成较大的可使用空间
优缺点: 占用大量的CPU时间,并且在移动过程中稍有不慎就有可能破坏全部数据
(6)多重动态分区的优缺点:
1)多道程度得以提高
2)提高了内存的利用率
3)作业大小依然受内存容量的限制
4)对碎片问题的解决需要以增加系统开销为代价
5)不便共享
3.4 分页管理
3.4.1分页的概念
1)逻辑空间等分为页
2)物理空间等分为块,与页面大小相同
3)逻辑地址表示:(如,页面大小为1K)
4)内存分配原则:以块为单位,逻辑上相邻的页可以分配在不相邻的内存块中(页框)
5)页表:实现从页号到物理块号的地址映射
6)地址映射:由硬件完成
3.4.2请求分页的基本思想
1)地址空间分页,内存分块,页与块大小相同
2)作业部分装入内存
3)作业所占的各块不连续
4)硬件通过页表生成访内地址
5)若缺页,进行缺页中断处理,换入内存
6)利用快表可加速地址转换
3.4.3静态分页管理
3.4.3.1原理
3.4.3.2逻辑地址
(1)页面号: 页号的范围还取决于逻辑地址的位数
(2)页内位移: 页内位移范围与内存块的大小有关
(3)分页管理的逻辑地址实际上是线性变化的。
(4)用户编程时不需要确定逻辑地址的页面号和页内位移,只有逻辑地址空间进入物理地址空间后,页面号和页内位移才通过计算电路来划分。
(5)对于用户而言,逻辑地址就是一个受地址寄存器位数限制的连续变化的地址范围,可以根据需要来确定页面大小和页面号的范围,因此我们称分页管理的逻辑地址空间为线性空间。
(6)例:假定逻辑地址为32位,内存块的大小为4KB。
4KB的页内位移变化范围为0~4095字节,这需要12位来进行描述(212=4×1024);
剩下的20位就是页面号的范围0~1 048 575(220-1)。由此可见内存块的划分有一定的规则,其大小只能是2N。
3.4.3.3数据结构
页表:作业页面号与内存块号的对应关系,内容包括页面号、内存块号
页表寄存器:页表寄存器用来存放作业所对应的页表的起始地址
内存分块表:内存分块表内容为块号、块使用状态(已使用或未使用)
作业表:作业表内容为作业号、页表起始地址
3.4.3.4地址映射
(1)d:偏移长度
(2)内存块号P’:页表中页号为P的表目地址 =(页表寄存器)+表目长度×P
(3)绝对地址d’: 绝对地址= P’×页框长度+d
3.4.3.5分配与释放
3.4.3.6优缺点
1)管理简单
2)每访问一次内存数据需要经过二次寻址
3)解决了碎片问题。无须内存碎片整理
4)无法实现共享
5)作业大小受内存可用页面数的限制(如果想在内存中运行较大的作业,则必须利用内存以外的存储空间)
3.4.4动态分页管理
3.4.4.1原理
(1)与静态分页管理不同 :——按需分配
将需要运行的页面存放于内存,暂时不需要运行的页面存放于辅存,当需要运行存放于辅存上的页面时,再将对应的页面调入内存
3.4.4.2分配与淘汰算法(动态分配)
3.4.4.3分配与淘汰算法(淘汰算法)
衡量淘汰算法依据:好的淘汰算法应该有较低的缺页率和淘汰率
3.4.4.2.1虚存中的置换算法
3.4.4.2.1.1先进先出法(FIFO)
将最先进入内存的页换出内存。
例如内存块数量为3时,采用FIFO页面置换算法,下面页面走向情况下,缺页次数是多少?
3.4.4.2.1.2最佳置换法(OPT)
将来不再被使用或是最远的将来才被访问的页
例如内存块数量为3时,采用OPT页面置换算法,下面页面走向情况下,缺页次数是多少?
3.4.4.2.1.3最近最少使用置换法(LRU)
将最近一段时间里最久没有使用过的页面换出内存。
例如内存块数量为3时,采用LRU页面置换算法,下面页面走向情况下,缺页次数是多少?
3.4.4.2.1.4最近未使用置换法(NUR)
是LRU近似方法,比较容易实现,开销也比较小。
选择页面选择指针遇到的最近未被访问的页面淘汰
简化的方法是:页面选择指针下移,只要遇到刚才未使用的页面就可以淘汰.
3.4.4.4优缺点
1)管理简单
2)支持虚拟存储器
3)无法实现共享
3.4.4.5三次寻址加快二次寻址
3.5 分段与段页式管理
3.5.1分段的概念
1)逻辑空间分段/作业空间分段:段是信息的逻辑单位,每段对应一个相应的程序模块,有完整的逻辑意义 , 每段都有其对应的段号和段长,对分段数量和分段的长度没有限制。
2)程序的地址结构:逻辑地址表示:(二维的地址空间)
3)内存分配:内存以段为单位进行分配,每个段单独占用一块连续的内存分区
4)段表:实现每个逻辑段到物理内存中分区位置的映射, 有缺段机制
3.5.2分段管理
3.5.2.1原理
3.5.2.2逻辑地址
(1)S:段号
(2)D:段内位移
(3) 分页管理中,逻辑地址是线性地址
(4)分段管理中,段号S和段内位移d不能形成一个线性地址,因为它实际上是代表着段长和段内位移两个变量
(5)由于这两个变量没有特定的限制范围而无法用一个变量来替代,因此分段管理的逻辑地址是二维地址,分段管理的逻辑地址空间是二维空间
3.5.2.3.数据结构
(1)数据结构: 段表、段表寄存器、内存分块表(OR已使用分区表OR自由分区表OR自由分区块链) 、作业表
3.5.2.4地址映射
(1)对应的内存分区地址S’: 段表中段号为S的表目地址=(段表寄存器)+表目长度×S
(2)绝对地址: 绝对地址=S′+d
(3)段表起始地址: 段表起始地址=(段表寄存器)
3.5.2.5分配与释放
(1)分配段表空间
(2)分配主程序段
按一定的分配算法(内存空间采用动态分区形式,因此分配算法可采用最先适应算法、最佳适应算法或者最坏适应算法)
(3)填写段表
填入对应段表表目中该段的内存地址,其他暂时不在内存的段,缺段状态置为1,在需要运行时再调入
3.5.2.6连接
(1) 连接: 当作业空间逻辑分段后,用户是靠调用来实现段与段之间的关系
(2) 静态连接: 在作业刚装入内存还没有被执行前,一次完成所有连接
优缺点: 作业段必须一次全部调入内存,限制了作业的大小,对内存的容量要求高
(3) 动态连接:在执行过程中,每当作业段与段之间产生调用要求时才进行连接
优缺点: 作业中的各段没有必要一次全部调入,这极大的提高了内存的利用率
3.5.2.7存储保护
(1)存储保护:
1)在段表中既有段的起始位置也有段的长度,——实现作业区域的界限管理
2)在段表中增加一个访问权限项,——实现访问授权控制
3.5.2.8虚拟存储器
(1)虚拟存储器: 缺段中断机制+换进、换出,——实现了虚拟存储器
3.5.2.9存储区整理
(1)存储区整理: 动态分区形式导致内存碎片,——可以使用紧缩的方法
3.5.2.10优缺点/特点
(1)优缺点/特点:
1)易于实现共享。
2)实现了动态连接。
3)实现了虚拟存储器。
4)段长受内存容量的限制。
5)内存管理复杂。
3.5.3段页式管理
3.5.3.1原理
(1) 作业地址空间分段再分页
(2) 内存分块(页框)
3.5.3.2逻辑地址
3.5.3.3数据结构
(1)数据结构: 段表、页表、段表寄存器、存储分块表、作业表
3.5.3.4地址映射
3.5.3.5分配与释放
3.5.3.6连接与共享
连接——页表动态连接(段连接)
共享——同分段管理的共享
3.5.3.7存储保护
同分段管理的存储保护
3.5.3.8虚拟存储器
缺段中断+缺页中断+淘汰算法
3.5.3.9存储区整理
只存在页内碎片
3.5.3.10快速寻址
使用高速存储器来存放常用页面的页表,页表内容为:段号、页号和块号
3.6各种存储管理方案比较