当前位置:文档之家› 存储器管理

存储器管理

存储器管理
主要内容
存储管理机制 存储管理功能 分区管理 分页管理 分段管理 段页式管理
存储体系
高速缓存Cache: 少量的、非常快速、昂贵、易变的 内存RAM: 若干兆字节、中等速度、中等价格、易变的 磁盘: 数百兆或数千兆字节、低速、价廉、不易变的 直接存取要求内存速度尽量快到与CPU取指速度相匹配,大到能 装下当前运行的程序与数据,否则CPU执行速度就会受到内存速度和 容量的影响而得不到充分发挥。
物理地址
页框号D
偏移量W
则P=2,W=122
页表
页表:为了能在内存中找到每页所对应的物理块,系统为每个进程 建立一张页面映射表即页表。(大多驻留内存) 页表项结构:
页号 块号
页表
内存 0 作业A的 相对地址空间 0 100 1KB 第1页 2KB 952 3000 3KB 10KB XXXXXX 第2页 7KB+952 8KB 9KB 作业A(第1页) 第9块 call 3000 操作系统 4KB 4KB+100 call 3000 作业A(第0页) 5KB 第0页 6KB 7KB 952 XXXXXX 作业A(第2页) 第8块 第7块 7K+952=8120 (0~3块) 第4块(2, 952) 第5块 第6块 页表 页号 0 1 2 块号 4 9 7
CPU pid p d i d 内 存
pid
分页存储管理特点
优点: 有效地解决了存储器的零头问题,提高了存储器利 用率。 缺点: 采用了动态地址变换机构,增加了计算机的成本。 必须用内存存储各种表格,且管理费时。 分区间的碎片消除了,但出现了页内碎片。 作业地址空间受内存容量限制。
分段存储管理
引入原因:
方便编程 分段共享 分段保护 动态链接 动态增长
分段
作业按逻辑关系划分成若干段,每个段都有自己的 段名和长度 逻辑地址是二维的,由段号(名)和段内偏移量决定 段长不固定 地址结构
段号
31 16 15
段内位移
0
段数:216=64k段 段长度:216=64kB
段表
段表实现逻辑段到物理内存区的映射。
用户程序 内存
1
映 射
2 3 4 5 6 7 …
分页存储管理-地址结构 分页存储管理 地址结构
31 12 11 0
逻辑地址
页号P 页面数 220=1MB
偏移量W 页面大小 212=4KB
页内地 址
给定地址空间中的地址为A, 页面大小为L,则 P=INT[A/L] W=A MOD L 如A=2170B ,页大小为1KB,
页内地址
12 11 0
210
页表分页 的始址
210
两级页表地址转换
页表分页首址
页表项地址
解决了大页表无需大片连续存储空间的问题。
反置页表
页表项按物理块的序号排序,页表项的内容是页号及隶属进程的 标识号。 用进程标识符和页号检索反置页表,若有匹配项,则表项的序号 i便是页所在的物理块号。否则,检索的页尚未调入内存,则产 生请求调页中断。 能有效地减少页表占用的内存。
10k 10k 14k
30k 14k
动态重定位分区分配
碎片:又称零头,指内存中存在的无法被利用的小分区。 紧凑:将分散的内存分区拼接成一个大分区。
操作系统 用户程序1 10kb 用户程序2 12kb 用户程序3 … 紧凑后
操作系统 用户程序1 用户程序2 用户程序3 22kb … 程序地址发 生变化
特点
低址部分不断划分,造成一批较小的空闲区。 查找总从低址部分开始,增大了开销。 较大的分区集中在高址部分。
分区分配算法
循环首次适应算法
进程分配内存空间时,查找不再是每次从链首开始, 而是从上次找到的空闲块的下一个空闲区开始,直至找 到满足的空闲分区。 实现本算法,需要设置一起始查寻指针,以指示下一 次起始查寻的空闲分区,并采用循环查找方式。
连续分配存储管理
单一连续分配(适用于单用户、单任务OS)
系统区 用户区
内存
单一连续分区存储管理
缺点 只能有一个作业进入内存,故它不适用于多道程序设计, 整个系统的工作效率不高,资源利用率低下。 只要作业比用户区小,那么在用户区里就会形成碎片, 造成内存储器资源的浪费。如果用户作业很小,那么这 种浪费是巨大的。 若用户作业的相对地址空间比用户区大,那么该作业就 无法运行。即大作业无法在小内存上运行。
程序的装入和链接
编译
链接
装入
程序装入
绝对装入方式
编译程序产生绝对地址的目标代码。绝对装入程序按照装入模 块中的地址,将程序和数据装入内存。
可重定位装入方式
逻辑地址:又称相对地址或虚地址。用户程序经过汇编或编译 后形成目标代码,目标代码通常采用相对地址的形式,其首地址为0, 其余指令中的地址都相对于首地址而计算。 物理地址:又称为绝对地址,标识程序在内存中物理单元实际 位置。装入程序根据内存的使用情况,将装入模块放到内存的某个 位置,其逻辑地址与实际装入内存的地址是不相同的。 重定位:装入时对目标程序中指令和数据地址进行修改的过程。 作业运行时不能按其相对地址访问内存单元,而应按相应的物理地 址访问,需要进行相对地址到物理地址的转换。
动态重定位
动态重定位:是指程序真正运行时,完成逻辑地址到物理地址的转 换,需要硬件地址变换机构的支持。 重定位寄存器:存放程序在内存中的起始地址。
动态重定位分区分配算法
请求U.size分区
检索空闲区链表 否 分配失败 否 空闲区>u.size 是 紧凑形成连续空闲区 动态分区方式分配 返回分区号 及首址
程序改变,因此将装入模块装入内 存后,不立即把其相对地址转换为绝对地址,而是把地址转换推迟 到程序真正执行时才进行。装入内存后的地址仍是相对地址。
程序的链接
静态链接
将目标模块链接成一个装入模块。
地址修改 变换外部 调用符号
程序的链接
装入时动态链接
页面大小的确定
页面大小由硬件决定的。 页面小:减少内存碎片,提高内存利用率;但页表过 长,占用过多内存,并且降低了换进换出的效率。 页面大:过多页内碎片产生。 一般选择512byte~4KB
地址变换机构
① ② 页号*页表项长度+ 页表始址 ③ ④ ⑤
注意:每存取一次数据都要两次访问内存。
练习
1.设有8页的逻辑空间,每页有1024字节,它们被映射到32块的物理 13 15 存储区,那么逻辑地址的有效位是______位,物理地址至少_______位。 2.在采用页式存储管理的系统中,某作业J(或某进程)的逻辑地址 空间为4页(每页为2048字节),且已知该作业的页表如下,求出有效 逻辑地址4965所对应的物理地址,并画出地址变换图。
空闲区总和 >u.size
修改有关数据结构
修改有关数据结构
对换
解决问题:由于内存紧张而导致系统无法正常进行。 对换: 把内存中暂不能运行的进程,或暂时不用的程序和数据,换出到外存 上,以腾出足够的内存空间,把已具备运行条件的进程,或进程所需 要的程序和数据,换入内存。 对换类型:进程对换、页面对换或分段对换 文件区:采用离散分配方 文件区 式,提高文件存储空间利 用率。 对换区 对换区:采用连续分配方 式,提高进程的换入、换 就绪且换出状态 出速度。 外存 换出时间
连续分配存储管理-分区式 连续分配存储管理 分区式
固定分区分配 (多道程序)
存储空间划分为若干大小任意的区域。这些区域是 在系统启动时划定的,在用户装入及运行过程中,其区 域的大小和边界是不能改变的。
0 分区号 1 2 3 4 大小(KB) 15 30 50 100 始址(K) 30 45 75 125 状态 分配 分配 分配 未分配 75 125 30 45 操作系统 作业A 作业B 作业C ……
动态分区分配-数据结构 动态分区分配 数据结构
空闲分区说明表
序号 分区大小 分区始址 状态
空闲分区链
分区分配算法
首次适应算法
空闲分区链按地址递增的次序链接; 进行内存分配时,从链首开始顺序查找,直至找到一 个满足大小要求的空闲分区为止。 将此空白分区分成两部分,一部分与作业请求空间大 小相等,分配给作业,余下的空闲分区仍留在空闲链表 中。
存储器管理目的
充分利用内存,为多道程序并发执行提供存储基础 尽可能方便用户,自动装入用户程序,用户程序中不必考虑硬 件细节 系统能够解决程序空间比实际内存空间大的问题 程序在执行时支持动态伸缩 内存存取速度快 存储保护与安全 共享与通信
存储器管理
功能: 内存分配 内存共享与保护 地址映射 内存扩充 分类: 分区式存储管理 分页存储管理 分段存储管理 段页式存储管理
特点
内存中空闲分区分布得更均匀。 减少查找空闲分区的开销。 缺乏大的空闲分区。
分区分配算法
最佳适应算法
内存分配时,总选择满足请求的最小空闲分区分配 给作业。 为加速寻找,将空闲区按由小递增的顺序形成空 闲区链。
特点
存储器中会留下许多难以利用的小空闲区。
分区分配操作
分配内存 回收内存
序号1 序号 1 2
分区说明表
连续分配存储管理-分区式 连续分配存储管理 分区式
动态分区分配 (多道程序)
分区的大小及数目是可变的。 基本思想:在作业要求装入内存储器时,如果内存中有足够的存储 空间满足该作业的需求,那么就划分出一个与作业相对地址空间大 小相等的分区分配给它。 解决问题: 分区分配采用的数据结构 分区的分配算法 分区的分配与回收
段页式 存储管 理
离散分配方式
分页存储管理
基本思想: 进程逻辑空间分成若干大小相等的片,称为页面或页。 内存空间分成与页相同大小的若干个存储块,称为物理块或页框。 为进程分配内存时,以块为单位将进程中的若干页分别装入多个可不相 邻接的块中。 不足:会造成页内碎片。
相关主题