- 内存管理背景
- 连续内存分配
- 分页内存管理
- 页表结构
- 分段内存管理
- 内存扩充技术
内存管理背景
-
基本硬件
一:
·程序必须装入内存才能被执行
·CPU可以直接访问的存储器:主存,高速缓存,寄存器。
·寄存器通常可以在一个或者少于一个cpu时钟周期内完成访问,完成主存访问可能需要多个cpu时钟周期。
二:内存管理目的和功能
目的:
1.提高内存利用率
2.提高指令执行速度
3.保证安全运行
功能:
1.内存分配
2.内存回收
3.地址转换
4.存储保护
5.内存共享 -
逻辑地址和物理地址
逻辑地址:由cpu产生,在进程内的相对地址
物理地址:内存地址,绝对地址。
- 动态加载
在调用之前并不加载,使用时才加载。 - 动态链接
其他:
1.把作业地址空间中使用的逻辑地址变成内存中物理地址称为重定位
2.静态重定位的时机是程序装入时
3.能够装入内存任何位置的代码程序必须是可动态绑定的
4.动态重定位过程依赖于(3点 )。
【静态重定位和动态重定位】
- 可重定位装入程序
- 重定位寄存器
- 地址变换机构
连续内存分配
一:(三种分配)
定义:为一个用户程序分配一个连续的内存空间
(运用于内存较少系统)
分类:
- 单一连续分配
1⃣️分配方式:单道程序环境下,只装有一道用户程序(内存利用率低)
(未采取存储器保护措施:节省硬件) - 固定分区分配
1⃣️预先把可以分配的主存空间分割成若干个连续区域,成为一个分区,每一个分区大小可相同可不同,但分区大小固定不变。(预先固定)
(如果一个空闲分区,则分配给进程) - 可变分区分配
- 操作系统实现(分区)存储管理的代价最小
实现分页、分段和段页式管理都需要特殊的硬件支持,因而代价比较高
1⃣️
主存通常被分为两部分:操作系统和用户进程
二:存储分配算法
- 首次适应:分配最先找到的合适的分区
【在分区存储管理中,首次适应最有可能使得高地址空间变成为大的空闲区。】 - 最佳适应:搜索整个列表,找到适合条件的最小的分区进行分配
【在内存分配的"最佳适应法"中,空闲块是按块的大小从小到大排序】 - 最差适应:搜索整个列表,找到最大的分区进行分配
【速度和存储空间的利用上……】
三:内存回收(四种)
- 回收内存块前有后无空闲块
- 前有后无
- 前无后有
- 前有均有
碎片:
紧缩:只有重定位是动态的时候,才可以紧缩,紧缩在执行时期进行
紧缩:可减少外碎片
在可变分区存储管理中的紧缩技术可以:集中空闲区
其他:
Q:连续内存管理的优缺点
A:优点:设计简单、直接寻址、效率高
缺点:内存利用率最低,有内部碎片
Q:紧缩技术的优缺点和适合场合。
A:缺点:每紧缩一次就要对移动了的程序或数据的地址进行更改,大大影响到了系统的效率;适应场合:只有重定位是动态的时候,才有可能进行紧缩,紧缩在执行时期进行。
分页内存管理
离散内存管理方案
- 分页内存管理方案(现代操作系统常用方案)
- 分段内存管理方案
- 段页式内存管理方案
一:分页
- 进程物理地址空间可能不连续(如果有可用的物理内存,它将分给进程)
- 把物理内存分成大小固定的块,称为帧
- 把逻辑内存也分为同样大小的块,称为页
二:地址转换机制
分页的硬件支持
页表的实现
有效访问时间
其他:
1.由连续分配方式发展为分页存储管理方式的主要动力是提高内存利用率
2.在页式存储管理中,当CPU形成一个有效地址时,要查页表。这一工作是由硬件实现的。
3.在页式存储管理中,块内位移量等于页内位移量是因为页和块的大小相等
4分页内存管理方案不允许进程中每个页内的物理地址不连续
5物理内存不分成大小固定的页
Q:页的大小对分页系统性能的影响。
A:TLB是有限的,这点毫无疑问。
当超出TLB的存储极限时,就会发生 TLB miss,之后,OS就会命令CPU去访问内存上的页表。如果频繁的出现TLB miss,程序的性能会下降地很快。为了让TLB可以存储更多的页地址映射关系,做法是调大内存分页大小。如果分页太大就会降低内存的利用率。
Q:为什么现代操作系统广泛采用分页技术?
A:它允许物理地址空间非连续;采用此技术不会产生外碎片,比连续分配技术好用不少。
页表结构
例子:
32位逻辑地址,页大小4KB
一个页表最多可以包含一百万个表项(2的20次)
每个页表项4个字节,需要4MB空间放页表,1024个连续页面。
需要这么多个连续页面来存放页表不一定能实现。
解决方法:
- 层次页表
- 哈希页表
- 反向页表(适用于进程较多的系统)
【页表的作用:实现从页号到物理块号的地址映射。】
其他:
Q:一个系统的页面大小为1KB,每个页表项4个字节,则采用单级页表时一个进程最大为()。
A:256KB
Q:假如没有TLB的介入,一个两级32位分页结构的地址转换机制,访问内存中的一个字节数据需要访问内存()次。
A:3
Q:在多级页表机制下,谈谈如何提高内存访问的EAT时间。
A:页在内存,且快表检索命中 EAT= λ + t 页在内存,但快表检索没有命中 EAT= 快表检索时间+访问页表时间+修改更新快表时间+访问页面物理内存时间 = λ +t+ λ +t=2*( λ + t) 页面不在内存 EAT=快表检索时间+访问页表时间+缺页中断处理时间+修改更新快表时间+访问页面物理内存时间 = λ + t + ε + λ + t 加入概率的综合公式(a是快表命中率,f是缺页率) EAT= λ + at +(1-a){ } = λ +at +(1-a){t + f*(ε+λ+t) +(1-f)*(λ+ t) }
页表:操作系统为每一个进程维护了一个从虚拟地址到物理地址的映射关系的数据结构。
页表的内容:就是该进程的虚拟地址到物理地址的一个映射
分段内存管理
(在段式存储管理中,一个段是一个不定长的连续区域。)
一:分段
- 支持用户观点的内存管理机制
- 一个程序是一些段段集合,一个段是一个逻辑单位。
二:分段的逻辑视图
【分段逻辑地址由一个有序对组成:<段号, 偏移>。】
三:分段机制
- 一个逻辑地址是两个向量的集合
分段机制(2)
- 由于段段长度各不相同,内存分配是一个动态存储分配问题。
- 内存分配(首先/最佳适应法,外碎片问题)
- 重定位(动态,由段表执行)
- 共享(共享的段,同样的段号)
- 保护,每个段表的表项(有效位=0=非法段/读写执行权利)
- 保护位同段相联系,在段段级别进行代码共享。
分段管理的突出优点(3点)
可以实现有意义的共享
方便地址转换
程序不需要连续的内存
三:段页式原理
【本质上是分页】
- 分段和分页的原理结合
- 将用户程序分成若干个段,再把每个段分成若干个页,每个段赋予一个段号。
- 逻辑地址<段号,页号,页内偏移>
- 存在内碎片
- 无外碎片
四:其他
Q:分页与分段的区别。
A:页是信息的物理单位,分页是为了实现离散分配方式,以消减内存的外零头,提高内存的利用率。
分页仅仅是由于系统管理的需要而不是用户的需要。
段是信息的逻辑单位,分段的目的是为了能更好地满足用户的需要。
页的大小固定,由系统把逻辑地址划分为页号和页内地址两部分,段的长度却不固定,决定于用户所编写的程序。
分页的作业地址空间是一维的,即单一的线性地址空间。
分段的作业地址空间是二维的在标识一个地址时,即需给出段名,又需给出段内地址。
Q:段页式存储管理和多级页表的异同。
A:段页式将分段和分页原理相结合,先将用户程序分成若干个段,再把每个段分成若干个页,存在内碎片不存在外碎片 而多级页表可以是多级别的分页,不存在分段。 相同之处是都蕴含着基础的分页。
内存扩充
解决方法:
-
紧缩(可变分区)
-
覆盖技术
解决:程序大小超过物理内存总和的问题
(减少程序占用的主存空间)
-
交换技术
在多道程序环境下:
1 某些进程尚未发生被阻塞,但它却占用了大量的内存空间
2有时可能出现等待
存在问题:
浪费资源
降低系统吞吐量
-
虚拟内存(存储器
5.一些讨论的问题
采用覆盖技术不需要操作系统的支持。
交换技术的一个问题是交换的过程需要I/O支持。
扩充内存的缺点:开销更大
【分段,分页,段页】
分段式没有内碎片(有外碎片)
段页式有内碎片(没有外碎片)
页式有内碎片
21、在下列存储管理方式中,会产生内部碎片的是( B ),会产生外部碎片的是( C、)。
A 页式和段式 B 页式和段页式
C 动态分区方式和段式 D 动态分区方式和段页式
Q:在段或者页式系统中,需要2次访问内存。
第一次是获取段表、页表里面的块号、页号算出物理地址
段页式访问3次