操作系统第三章:存储器管理笔记

内容提要

 存储管理基础
 页式内存管理
 段式内存管理
 虚拟存储管理
 存储管理实例

存储管理基础

在这里插入图片描述
在这里插入图片描述

概念辨析

在这里插入图片描述

基础知识
  • 已初始化的全局变量放于data段,未初始化的全局变量放于bss段
  • test段为代码段
  • text和data段都在可执行文件中,由系统从可执行文件中加载,而bss段不在可执行文件中,由系统初始化。
  • 一个装入内存的可执行程序,除了bss、data和text段外,还需构建一个栈(stack)和一个堆(heap)。
    在这里插入图片描述
基础内存管理

(1)单道程序的内存管理
单道程序内存固定,因此可以将程序永远加载到一个地址,不需要考虑很多。
缺点:比物理内存大的程序无法加载,因而无法运行。
造成资源浪费(小程序会造成空间浪费;I/O时间长会造成计算资源浪费)。
(2)多道程序的内存管理
空间的分配:分区式分配
方法:
 固定(静态)式分区分配,程序适应分区。
 可变(动态)式分区分配,分区适应程序。

1、固定式分区的管理

 优点:易于实现,开销小。
 缺点:内碎片造成浪费,分区总数固定,限制
了并发执行的程序数目。
 采用的数据结构:分区表--记录分区的大小
和使用情况
内碎片:已经固定分区,分区内部未充分使用而导致浪费。

2、可变式分区的管理

分区的边界可以移动,即分区的大小可变。
优点:没有内碎片。
缺点:有外碎片。
在这里插入图片描述
位图表示法:给每个分配单元赋予一个字位,用来记录该分配单元是否闲置。例如,字位取值为0表示单元闲置,取值为1则表示已被占用,这种表示方法就是位图表示法。
在这里插入图片描述
特点:
空间成本固定:不依赖于内存中的程序数量。
时间成本低:操作简单,直接修改其位图值即可。
没有容错能力:如果一个分配单元为1,不能肯定应该为1还是因错误变成1。

链表表示法:将分配单元按照是否闲置链接起来,这种方法称为链表表示法。如上图所示的的位图所表示的内存分配状态,使用链表来表示的话则会如下图所示
在这里插入图片描述
特点:
空间成本:取决于程序的数量。
时间成本:链表扫描通常速度较慢,还要进行链表项的插入、删除和修改。
有一定容错能力:因为链表有被占空间和闲置空间的表项,可以相互验证。

内存回收规则
在这里插入图片描述

上面已经介绍了内存分区分配的不同模式,下面介绍具体如何为一个程序分配分区以满足其运行需求。

基于顺序搜索的分配算法

  1. 首次适应算法(First Fit):每个空白区按其在存储空间中地址递增的顺序连一起,在为作业分配存储区域时,从这个空白区域链的始端开始查找,选择第一个足以满足请求的空白块。
  2. 下次适应算法(Next Fit):把存储空间中空白区构成一个循环链,每次为存储请求查找合适的分区时,总是从上次查找结束的地方开始,只要找到一个足够大的空白区,就将它划分后分配出去。
  3. 最佳适应算法(Best Fit):为一个作业选择分区时,总是寻找其大小最接近于作业所要求的存储区域。
  4. 最坏适应算法(Worst Fit):为作业选择存储区域时,总是寻找最大的空白区。

具体样例见PPT113页
算法特点
首次适应:优先利用内存低地址部分的空闲分区。但由于低地址部分不断被划分,留下许多难以利用的很小的空闲分区(碎片或零头) ,而每次查找又都是从低地址部分开始,增加了查找可用空闲分区的开销。

下次适应:使存储空间的利用更加均衡,不致使小的空闲区集中在存储区的一端,但这会导致缺乏大的空闲分区。

最佳适应:若存在与作业大小一致的空闲分区,则它必然被选中,若不存在与作业大小一致的空闲分区,则只划分比作业稍大的空闲分区,从而保留了大的空闲分区。最佳适应算法往往使剩下的空闲区非常小,从而在存储器中留下许多难以利用的小空闲区(碎片) 。

最坏适应算法的特点:总是挑选满足作业要求的最大的分区分配给作业。这样使分给作业后剩下的空闲分区也较大,可装下其它作业。由于最大的空闲分区总是因首先分配而划分,当有大作业到来时,其存储空间的申请往往会得不到满足。

经过上述分析我们可以看到,基于顺序搜索的动态分区分配算法一般只是适合于较小的系统,如果系统的分区很多,空闲分区表(链)可能很大(很长) ,检索速度会比较慢。为了提高搜索空闲分区的速度,大中型系统采用了基于索引搜索的动态分区分配算法。

基于索引搜索的分配算法

1、快速分配算法
在这里插入图片描述
2、伙伴系统(Linux常用)
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
伙伴系统特点
在这里插入图片描述

重要概念:系统中的碎片

内存中无法被利用的存储空间称为碎片。
内部碎片:
指分配给作业的存储空间中未被利用的部分,如固定分区中存在的碎片。
单一连续区存储管理、固定分区存储管理等都会出现内部碎片。
内部碎片无法被整理,但作业完成后会得到释放。它们其实已经被分配出去了,只是没有被利用。

外部碎片:
指系统中无法利用的小的空闲分区。如分区与分区之间存在的碎片。这些不连续的区间就是外部碎片。动态分区管理会产生外部碎片。
外部碎片才是造成内存系统性能下降的主要原因。外部碎片可以被整理后清除。
消除外部碎片的方法:紧凑技术。

紧凑技术(Compaction)
通过移动作业从把多个分散的小分区拼接成一个大分区的方法称为紧凑(拼接或紧缩) 。
目标:消除外部碎片,使本来分散的多个小空闲分区连成一个大的空闲区。
紧凑时机:找不到足够大的空闲分区且总空闲分区容量可以满足作业要求时。
实现基础:动态重定位
动态重定位:作业在内存中的位置发生了变化,这就必须对其地址加以修改或变换。

如何解决大作业在小内存中的运行问题

问题描述:大作业可能会在运行过程中内存进行动态扩展,使得无法一开始就分配好内存。
解决方案:覆盖(早期OS)和交换(现代OS)

交换

交换:广义的说,所谓交换就是把暂时不用的某个(或某些)程序及其数据的部分或全部从主存移到辅存中去,以便腾出必要的存储空间;接着把指定程序或数据从辅存读到相应的主存中,并将控制转给它,让其在系统上运行。
 优点:增加并发运行的程序数目,并且给用户提供适当的响应时间;编写程序时不影响程序结构
 缺点:对换入和换出的控制增加处理机开销;程序整个地址空间都进行传送,没有考虑执行过程中地址访问的统计特性。

页式内存管理

基本概念:程序、进程和作业
在这里插入图片描述
进程是资源分配的单位

分页式存储管理的基本思想

在这里插入图片描述
页式存储管理的基本概念
页:在分页存储管理系统中,把每个作业的地址空间分成一些大小相等的片,称之为页面(Page)或页,各页从0开始编号。
存储块:在分页存储管理系统中,把主存的存储空间也分成与页面相同大小的片,这些片称为存储块,或称为页框(Frame),同样从0开始编号。
页表:为了便于在内存找到进程的每个页面所对应块,分页系统中为每个进程配置一张页表,进程逻辑地址空间中的每一页,在页表中都对应有一个页表项
在这里插入图片描述

地址转换机构

在这里插入图片描述
逻辑地址: 把相对地址分为页号和页内地址两部分。
页表定位:页表始址 + 页号 × 页表项长度。
查询页表:读出块号。
物理地址:块号 + 块内地址。 (块内地址 = 页内地址)

一级页表的问题:若逻辑地址空间很大 (2^32 2^64 ) ,则划分的页比较多,页表就很大,占用的存储空间大(要求连续) ,实现较困难。

解决方案:动态调入

  • 多级页表
    多级页表结构中,指令所给出的地址除偏移地址之外的各部分全是各级页表的页表号或页号,而各级页表中记录的全是物理页号,指向下级页表或真正的被访问页。

为了进一步提高效率引入快表
在这里插入图片描述

TLB的部分特性
有的TLB在每个TLB条目中还保存地址空间标识码(address-space identifier,ASID)。ASID可用来唯一标识进程,并为进程提供地址空间保护。当TLB试图解析虚拟页号时,它确保当前运行进程的ASID与虚拟页相关的ASID相匹配。如果不匹配,那么就作为TLB失效。

除了提供地址空间保护外,ASID允许TLB同时包含多个进程的条目。如果TLB不支持独立的ASID,每次选择一个页表时(例如,上下文切换时),TLB就必须被冲刷(flushed)或删除,以确保下一个进程不会使用错误的地址转换。

常用哈希页表处理长度超过32位的地址空间
常使用反置页表避免空间浪费的问题(反置页表的大小只与物理内存的大小相关)
反置页表不是依据进程的逻辑页号来组织,而是依据该进程在内存中的物理页面号来组织(即:按物理页面号排列),其表项的内容是逻辑页号 P 及隶属进程标志符 pid 。
采用反置页表很难共享内存

页共享与保护

各进程把需要共享的数据/程序的相应页指向相同物理块。
页的保护
页式存储管理系统提供了两种方式:
• 地址越界保护
• 在页表中设置保护位(定义操作权限:只读,读写,执行等)

共享带来的问题
若共享数据与不共享数据划在同一块中,则: 有些不共享的数据也被共享,不易保密。
实现数据共享的最好方法:分段存储管理。

段式存储管理

意义
方便编程:
• 通常一个作业是由多个程序段和数据段组成的,用户一般按逻辑关系对作业分段,并能根据名字来访问程序段和数据段。

信息共享:
• 共享是以信息的逻辑单位为基础的。页是存储信息的物理单位,段却是信息的逻辑单位。
• 页式管理中地址空间是一维的,主程序,子程序都顺序排列,共享公用子程序比较困难,一个共享过程可能需要几十个页面。
信息保护
动态增长
动态链接
在这里插入图片描述

信息共享

在这里插入图片描述
分页的作业的地址空间是单一的线性地址空间,分段作业的地址空间是二维的。
“页”是信息的“物理”单位,大小固定。
“段”是信息的逻辑单位,即它是一组有意义的信息,其长度不定。

在这里插入图片描述
基本思想:用分段方法来分配和管理虚拟存储器,而用分页方法来分配和管理实存储器。

结合二者思想产生段页式管理
段页式存储管理是分段和分页原理的结合,即先将用户程序分成若干个段(段式) ,并为每一个段赋一个段名,再把每个段分成若干个页(页式) 。
其地址结构由段号、段内页号、及页内位移三部分所组成每个进程一张段表,每个段一张页表。
段表含段号、页表始址和页表长度。页表含页号和块号。

运行流程
在这里插入图片描述

虚拟存储管理

  • 时间局部性,即一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内;

  • 空间局部性,即当前指令和邻近的几条指令,当前访问的数据和邻近的数据都集中在一个较小区域内。

  • 实际电脑硬件结构说明
    主存不等于磁盘
    现代计算机时冯.诺伊曼体系的计算机,该体系的计算机以内存为中心;
    计算机的内存条属于内部存储器,所有的程序运行之前必须加载到内存;
    计算机的硬盘属于外部存储器,外部存储器为计算机提供持久存储(内存的信息停电后就没有,硬盘停电还有);
    电脑自带的C盘、D盘、E盘、F盘属于硬盘上的逻辑分区。
    因此电脑自带的C盘、D盘、E盘、F盘属于外部存储器。
    在这里插入图片描述
    请求式分页系统的页表
    在这里插入图片描述

替换问题

当物理内存已满,而新的页面(位于Swap区或磁盘上其它文件中)又必须调入时,必须选择适当的页面(Victim Page)换出。如何选择?——答案很简单,将造成系统运行损失最小(代价最小)的页面换出。

页面置换策略
1、最优置换(Optimal):从主存中移出永远不再需要的页面,如无这样的页面存在,则应选择最长时间不需要访问的页面。
它会将内存中的页 P 置换掉,页 P 满足:从现在开始到未来某刻再次需要页 P,这段时间最长。也就是 OPT 算法会 置换掉未来最久不被使用的页 。
需要先验知识,实际中很难用到,通常用来估算判断其他算法的性能。

2、先进先出算法(First-in, First-out):总选择作业中在主存驻留时间最长的一页淘汰。
存在有趣的belady现象:内存分配的页增加,缺页率反而增加。
其有两种改进算法
(1) Second Chance
在这里插入图片描述
(2)Clock
在这里插入图片描述
如此可以避免大量挪动数据

3、最近最久不用的页面置换算法(LeastRecently Used Replacement):当需要置换一页面时,选择在最近一段时间内最久不用的页面予以淘汰。
在这里插入图片描述
PPT276页,此处需要关注具体实现流程

页面调入策略
  1. 请求式调页:仅当需要时才调入页面的策略。采用请求调页方式,一次装入请求的一个页面,磁盘I/O的启动频率较高,系统的开销较大。
  2. 预先调页:事先调入页面的策略。缺页中断时,系统为进程装入指定的页面以及与之相临的多个页面。若局部性很差,预先装入的很多页面不会很快被引用,并会占用大量的内存空间,反而降低系统的效率。

在这里插入图片描述
写时复制提升效率,避免fork时大量复制同样的页面造成浪费

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值