【408笔记】操作系统第三章 内存管理

文章目录

  • 3.1 内存管理概念
    • 3.1.1 内存管理的基本原理和要求
      • 1. 程序的链接与装入
        • 程序链接方式
        • 装入内存方式
          • 1. 绝对装入
          • 2. 可重定位装入
          • 3. 动态运行时动态重定位
      • 2. 逻辑地址和物理地址
      • 3. 进程的内存映像
      • 4. 内存保护
      • 5. 内存共享
      • 6. 内存分配和回收
    • 3.1.2 覆盖和交换技术*
    • 3.1.3 连续分配管理方式
      • 1. 单一连续分配
      • 2. 固定分区分配
      • 3. 动态分区分配
        • 动态分区分配算法
          • 首次适应算法(First Fit
          • 邻近适应算法(循环首次适应算法
          • 最佳适应算法(Best Fit
          • 最坏适应算法(最大适应算法
    • 3.1.4 基本分页存储管理
      • 1. 分页存储的基本概念
        • 页面和页面大小
        • 地址结构
        • 页表
      • 2. 基本地址变换机构
      • 3. 具有快表的地址变换机构
      • 4. 两级页表
    • 3.1.5 基本分段存储管理
      • 1. 分段
      • 2. 段表
      • 3. 地址变换机构
      • 4. 段的共享和保护
    • 3.1.6 段页式管理
  • 3.2 虚拟内存管理
    • 3.2.1 虚拟内存基本概念
      • 1. 传统存储管理方式的特征和缺点
      • 2. 局部性原理
      • 3. 虚拟存储器的定义和特征
      • 4. 虚拟内存技术实现
    • 3.2.2 请求分页管理方式
      • 1. 页表机制
      • 2. 缺页中断机构
      • 3. 地址变化机构
    • 3.2.3 页框分配
      • 1. 驻留集大小
      • 2. 内存分配策略
        • 1. 固定分配局部置换
        • 2. 可变分配全局置换
        • 3. 可变分配局部置换
      • 3. 物理块调入算法
      • 4. 调入页面的时机
      • 5. 从何处调入页面
      • 6. 如何调入页面
    • 3.2.4 页面置换算法
      • 1. 最佳置换算法(OPT
      • 2. 先进先出置换算法(FIFO
      • 3. 最近最久未使用置换算法(LRU
      • 4. 时钟置换算法(CLOCK
        • 1. 简单CLOCK置换算法
        • 2. 改进型CLOCK置换算法
    • 3.2.5 抖动和工作集
  • 408 真题

3.1 内存管理概念

  1. 对主存储器的访问,以字或者字节为单位

3.1.1 内存管理的基本原理和要求

不可能将所有用户进程和系统所需要的全部程序和数据放入贮存,因此操作系统必须对内存空间进行合理的划分和有效的动态分配

内存管理的主要功能:

  1. 内存空间的分配和回收
  2. 地址转换。多道程序环境下,程序中的逻辑地址和内存中的物理地址不可能一致,必须提供地址变换功能,将逻辑地址转换为相应的物理地址
  3. 内存空间扩充。利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存
  4. 内存共享:允许多个进程访问内存的统一部分,支持对内存共享区域进行受控访问
  5. 存储保护:保证各道作业在格子存储空间内运行,互不干扰
  1. 内存可以存放数据。程序在执行前需要先放到内存中才能被CPU处理(缓和CPU和硬盘之间的速度矛盾
  2. 内存中有很多存储单元,内存地址从0开始,每个地址对应一个存储单元,一个存储单元能存储多少比特位取决于计算机
  3. 讨论内存时, 1 K = 2 10 = 1024 1K = 2^{10} = 1024 1K=210=1024 1 M = 2 20 1M = 2^{20} 1M=220 1 G = 2 30 1G = 2^{30} 1G=230

1. 程序的链接与装入

创建进程首先要将程序和数据装入内存,将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤

  1. 编译:由编译程序将用户源代码编译成若干目标模块
  2. 链接:由链接程序将编译形成的一组目标模块以及他们所需的库函数链接在一起,形成一个完整的装入模块
  3. 装入:由装入程序将装入模块装入内存运行

【408笔记】操作系统第三章 内存管理_第1张图片

程序链接方式
  1. 静态链接:在程序运行之前,将各个目标模块以及库函数连接成完成装配模块,不再拆开
  2. 装入时动态链接:用户源程序编译得到的一组目标模块,装入内存时,采用边装入变链接的方式
  3. 运行时都动态链接:在程序执行中需要该模块时才进行链接。凡是运行时暂未被用到的模块,都不会被调入内存和链接到装入模块上

装入内存方式
1. 绝对装入
  1. 在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存
  2. 绝对装入只适用于单道程序环境
2. 可重定位装入
  1. 又称静态重定位。编译连接后装入模块的地址都从0开始,指令中使用的地址都是相对于起始地址而言的逻辑地址。装入模块装入到内存的时候进行重定位
  2. 重定位:装入时对目标程序中指令和数据地址进行修改的过程

静态重定位的特点是:

  1. 在一个作业装入内存时,必须分配其要求的全部内存空间,否则就不能装入该作业
  2. 作业一旦进入内存,在运行期间就不能再移动,也不能再申请内存空间
3. 动态运行时动态重定位

编译链接后的装入模块的地址都从0开始。装入程序将模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是在真正执行时才进行。这种方法需要一个重定位寄存器支持

特点:

  1. 可以将程序分配到不连续的存储区中
  2. 程序运行前只需要装入部分代码即可投入运行
  3. 在程序运行期间可以根据需要,动态申请分配内存
  4. 便于程序段的共享
  5. 可以向用户提供一个比存储空间大得多的地址空间
  6. 允许程序在内存中移动

【408笔记】操作系统第三章 内存管理_第2张图片

2. 逻辑地址和物理地址

逻辑地址

  1. 编译后,每个目标模块都从0号单元开始编址,称为该目标模块的相对地址(逻辑地址
  2. 程序在运行时使用的是逻辑地址,内存管理的具体机制对程序员和用户程序是透明的
  3. 不同进程可以有相同的逻辑地址,可以映射到主存的不同位置
  1. (11 408) 虚拟内存管理中,形成逻辑地址的阶段:编译

物理地址

  1. 是地址转换的最终地址。指令和数据都需要通过物理地址从主存中存取
  2. 装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换为物理地址(重定位

3. 进程的内存映像

一个程序调入内存运行时,就构成了进程的内存映像。一个进程的内存映像一般包括以下要素:

  1. 代码段:程序的二进制代码,只读,可被多个进程共享
  2. 数据段:程序运行时加工处理的对象,包括全局和静态变量
  3. 进程控制块PCB:存放在系统区,os通过PCB控制、管理进程
  4. 堆:存放动态分配变量malloc函数动态地向高地址分配空间
  5. 栈:用来实现函数调用。从用户空间最大地址往低地址增长

【408笔记】操作系统第三章 内存管理_第3张图片

4. 内存保护

确保每个进程都有一个单独的内存空间。内存分配前,需要保护操作系统不受用户进程的影响,同时保护用户进程不受其他用户进程的影响

内存保护可以采取两种方法:

  1. 在CPU中设置一对上下限寄存器,存放用户作业在主存中的下限和上限地址。每当CPU要访问一个地址时,检查是否越界
  2. 采用重定位寄存器(基地址寄存器)和界地址寄存器(限长寄存器)重定位寄存器包含最小的物理地址值,界地址寄存器包含逻辑地址的最大值内存管理机构动态地将逻辑地址与界地址寄存器进行比较,若未发生越界,则加上重定位寄存器的值后映射成物理地址,再送交内存单元

【408笔记】操作系统第三章 内存管理_第4张图片
加载重定位寄存器和界地址寄存器需要使用特权指令。因此只要操作系统内核才可以修改这两个寄存器的值,不允许用户程序修改

5. 内存共享

  1. 并非所有进程内存空间都适合共享,只有只读的区域才可以共享
  2. 可重入代码:允许多个进程同时访问,但不允许被任何进程修改的代码

6. 内存分配和回收

3.1.2 覆盖和交换技术*

【408笔记】操作系统第三章 内存管理_第5张图片

3.1.3 连续分配管理方式

  1. 连续分配:为用户进程分配一个连续的内存空间
  2. 内部碎片:分配给某个进程的内存区域中,有些部分没有用上
  3. 外部碎片:内存中的某些空闲分区因为太小,难以利用

连续分配方式主要包括:单一连续分配、固定分区分配和动态分区分配

1. 单一连续分配

  1. 内存被分为系统区和用户区
  2. 系统区用于存放操作系统相关数据,仅供操作系统使用,通常在低地址部分
  3. 用户区用于存放用户进程相关数据
  4. 用户区中只能有一道用户程序,用户程序独占整个用户区空间

优点:实现简单;无外部碎片

缺点:只能单用户、单任务;有内部碎片,存储器利用率极低

2. 固定分区分配

  1. 将用户空间划分为若干个固定大小的分区,每个分区中只装入一道作业
  2. 当有分区空闲时,便可从外存的后备作业队列中选择适当大小的作业装入分区。

划分分区时的方法:

  1. 分区大小相等:缺乏灵活性,适用于一台计算机控制多个相同对象的场合
  2. 分区大小不等:增加了灵活性,可以满足不同大小的进程需求

**操作系统需要建立一个数据结构,实现各个分区的分配和回收。**每个表项需要包括分区的大小、起始地址、状态

【408笔记】操作系统第三章 内存管理_第6张图片
优点:实现简单,无外部碎片

缺点:用户程序过大时可能分区不能满足需求,需要覆盖技术,这会降低性能;会产生内部碎片

3. 动态分区分配

又称可变分区分配不会预先划分内存区,而是进程装入内存时,根据进程大小动态建立分区,使得分区的大小正好适合进程的需要

【408笔记】操作系统第三章 内存管理_第7张图片

  1. 使用空闲分区表或者空闲分区链记录内存的使用情况
  2. 作业装入内存时,必须按照一定的动态分区分配算法
  3. 动态分区分配没有内部碎片,但是有外部碎片
  4. 可以使用紧凑技术来解决外部碎片
动态分区分配算法
首次适应算法(First Fit

思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区

实现:空闲分区按地址递增次序排列,每次分配内存时顺序查找空闲分区链/表,找到第一个满足要求的空闲分区

邻近适应算法(循环首次适应算法

思想:在首次适应算法基础上查找时不从头查找,而是从上次查找结束的位置开始

最佳适应算法(Best Fit

思想:优先使用小的空闲区,留下大片连续空间

实现:空闲分区按照容量递增次序链接,找到第一个能满足要求且最小的空闲分区分配给作业

缺点:会产生很多的外部碎片

最坏适应算法(最大适应算法

思想:为了解决最佳适应算法的问题,优先使用最大的空闲分区

实现:空闲分区按照容量递减次序链接,找到第一个满足要求的,即最大的分区

缺点:导致容量较大的空闲内存被迅速用完,之后如果有大进程到达,就没有空闲分区可用了

3.1.4 基本分页存储管理

  1. 固定分区产生内部碎片,动态分区产生外部碎片,对内存利用率低
  2. 分页:将主存空间划分为大小相等且固定的块,块作为主存的基本单位,每个进程也以块为单位划分,进程执行时,以块为单位逐个申请主存中的块空间

1. 分页存储的基本概念

页面和页面大小
  1. 页/页面(Page):进程中的块
  2. 页框/页帧(Page Frame):内存中的块
  3. 块/盘块(Block):外存中的块

为了方便地址转换,页面大小应该为2的整数幂。同时页面大小应该适中

地址结构

【408笔记】操作系统第三章 内存管理_第8张图片

页表
  1. 为了得知进程的每个页面在内存块中存放的物理位置,操作系统需要为每个进程建立一张页表,通常存放在PCB中
  2. 页表记录页面在内存中对应的物理块号

页表项连续存放,因此页号可以是隐含的,不占存储空间(类比数组

页表记录的是内存块号而不是内存块起始地址,J号内存块起始地址=J*内存块大小(从0开始

【408笔记】操作系统第三章 内存管理_第9张图片

  1. 每个进程拥有一张页表,进程的页表驻留在内存中

2. 基本地址变换机构

  1. 基本地址变换机构:将逻辑地址转换为内存中的物理地址
  2. 地址变换借助页表实现
  3. 以下地址变换过程是硬件自动完成的

【408笔记】操作系统第三章 内存管理_第10张图片

例题

页面大小 L=1KB,页号2对应物理块号b=8,计算逻辑地址2500的物理地址

2500对应的页号:2500/1024 = 2,对应的页内偏移量:2500%1024 = 452
b=8,所以 物理地址=1024*8+452
  1. 页式存储管理中,页表的起始地址存放在寄存器
  2. 影响磁盘访问时间的主要因素通常不是页面大小,使用时优先考虑较大的页面

3. 具有快表的地址变换机构

若页表全部放在内存中,则存取一个数据或一条指令至少需要访问两次内存

  1. 第一次访问页表,确定存取的数据或指令的物理地址
  2. 第二次根据地址存取数据或指令

为了提高指令执行速度,在地址变换机构中增加一个具有并行查找能力的告诉缓冲存储器——快表,又称相联存储器(TLB),用于存放当前访问的若干快表项

相对的,主存中的页表称为慢表
【408笔记】操作系统第三章 内存管理_第11张图片

4. 两级页表

  1. 为页表再建立一张页表,称为页目录表(顶级页表、外层页表)
  2. 建立多级页表的目的在于建立索引,不用浪费主存空间去存储无用的页表项

在这里插入图片描述
【408笔记】操作系统第三章 内存管理_第12张图片

  1. 多级页表优点:减少页表所占连续内存空间
  2. 已知系统32位实地址,48位虚拟地址,页面大小4KB,页表项8B,系统采用纯页式存储,则需要?级页表,页内偏移?位
    页面大小4KB,则页内偏移12位
    一页可以存4KB/8B=2^9个页目录
    剩余36位,需要4级页表

3.1.5 基本分段存储管理

  1. 分页管理方式从计算机角度考虑设计。通过硬件机制实现,对用户完全透明
  2. 分段管理考虑了用户和程序员,满足方便用户编程、信息共享和保护、动态增长以及动态链接

与分页最大的区别就是:离散分配时所分配的地址空间的基本单位不同

1. 分段

  1. 进程按照自身逻辑关系划分为若干个段,每个段都有一个段名,从0开始编址
  2. 内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各个段之间可以不相邻

【408笔记】操作系统第三章 内存管理_第13张图片

  1. 段号的位数决定了每个进程最多可以分多少段
  2. 段内地址的位数决定了每个段的最大长度是多少

页式系统中,逻辑地址的页号和页内偏移量对用户是透明的;而段式系统中,段号和段内偏移量必须用户显式提供

2. 段表

目的:从物理内存中找到各个逻辑段的存放位置,所以为每个进程建立一张段映射表

【408笔记】操作系统第三章 内存管理_第14张图片

3. 地址变换机构

【408笔记】操作系统第三章 内存管理_第15张图片

同样可以引入快表,加快访问

4. 段的共享和保护

【408笔记】操作系统第三章 内存管理_第16张图片

3.1.6 段页式管理

【408笔记】操作系统第三章 内存管理_第17张图片
【408笔记】操作系统第三章 内存管理_第18张图片

3.2 虚拟内存管理

3.2.1 虚拟内存基本概念

1. 传统存储管理方式的特征和缺点

指的是上面一系列存储管理方式

  1. 许多暂时用不上的数据也会长期占用内存,导致内存利用率不高
  2. 一次性:作业必须一次性全部装入内存才能开始运行
    1. 作业很大时不能全部装入内存,导致大作业无法运行
    2. 大量作业需要运行时,由于内存无法容纳所有作业,因此只有少量作业能运行,导致并发度下降
  3. 驻留性:作业一但装入内存,就一直驻留在内存中直到运行结束。事实上一个时间段内只需要访问作业的一小部分数据即可正常运行,这就导致了内存中驻留大量的暂时用不到的数据

2. 局部性原理

  • 时间局部性:执行了程序中某条指令后,不久这条指令很可能再次执行;数据也是(原因是程序中存在大量循环
  • 空间局部性:访问了某个存储单元后,不久其相邻的存储单元也很可能被访问(原因是很多数据在内存中连续存放,指令也是顺序存放

广义上讲,快表、页高速缓存、虚拟内存技术都属于高速缓存技术,依赖的原理就是局部性原理

虚拟内存技术实际上建立了“内存-外存”的两级存储器结构,利用局部性原理实现高速缓存

3. 虚拟存储器的定义和特征

  1. 基于局部性原理,在程序装入时,将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行
  2. 访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序
  3. 此时用户看来似乎有一个比实际内存大得多的内存

虚拟内存三个主要特征

  1. 多次性无需在作业运行时一次装入所有内存,而是分为多次调入内存。只需要将当前运行的那部分程序和数据装入内存即可开始运行,需要运行尚未调入的部分时再调入那部分
  2. 对换性在作业运行时无需一直常驻内存,而是允许在作业运行过程中将作业换入换出
  3. 虚拟性从逻辑上扩充了内存容量,使用户看到的内存容量远大于实际的容量

4. 虚拟内存技术实现

需要建立在离散分配的内存管理方式基础上,分为以下三种方式

  • 请求分页存储管理
  • 请求分段存储管理
  • 请求段页式存储管理

均需要一定的硬件支持,一般包括

  • 一定容量的内存和外存
  • 页表/段表机制,作为主要的数据结构
  • 中断机构。用户程序需要访问的部分未调入内存时,产生中断
  • 地址变换机构。实现逻辑地址到物理地址的变换
  1. 虚拟存储器系统页表项中,决定是否发生页故障的是:合法位

3.2.2 请求分页管理方式

  1. 请求分页系统建立在基本分页系统基础上,增加请求调页功能和页面置换功能
  2. 只需要将当前需要的一部分页面装入内存,便可以启动作业运行
  3. 在作业执行过程中,需要访问的页面不在内存中时,通过调页功能将其调入内存
  4. 可通过置换功能将暂时不同的页面换出外存,腾出内存空间

1. 页表机制

  1. 系统需要知道页面是否已经调入;若没有调入,需要知道该页面在外存的位置
  2. 没有修改过的页面不用浪费时间写回外存;操作系统需要记录各个页面是否被修改过的信息

【408笔记】操作系统第三章 内存管理_第19张图片

2. 缺页中断机构

  1. 要访问的页面不在内存时,产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断
  2. 此时缺页的进程阻塞,放入阻塞队列调页完成后唤醒,放回就绪队列
  3. 如果内存中有空闲块,则为进程分配一个空闲块,所缺页面装入,并修改页表中相应的页表项
  4. 如果没有空闲块,则由页面置换算法选择一个页面淘汰;若页面在内存期间被修改过,则写回外存
  • 缺页中断属于内中断故障类型(可能被故障处理程序修复
  • 一条指令在执行期间可能产生多次中断

3. 地址变化机构

【408笔记】操作系统第三章 内存管理_第20张图片

3.2.3 页框分配

1. 驻留集大小

驻留集:给一个进程分配的物理页框的集合

  1. 分配给一个进程的页框越少,驻留在主存中的进程就越多,可以提高CPU利用率
  2. 若一个进程在主存中页面太少,则缺页率会提高
  3. 若分配的页框过多,由于局部性原理,对该进程的缺页率没有明显影响

2. 内存分配策略

内存分配:固定、可变分配策略
页面置换:全局、局部置换

组合出三种策略

1. 固定分配局部置换
  1. 为每个进程分配一定数量物理块,进程运行期间不改变
  2. 运行过程出现缺页,则从分配给该进程的内存中选择一页换出。保证分配给该进程的内存空间大小不变
2. 可变分配全局置换
  1. 为每个进程分配一定数量的物理块,在进程运行期间可根据情况适当增加/减少
  2. 进程运行期间发生缺页,os从空闲物理队列中选出一块分配给进程,缺页调入
3. 可变分配局部置换
  1. 为每个进程分配一定数量的物理块,在进程运行期间可根据情况适当增加/减少
  2. 运行过程出现缺页,则只允许从分配给该进程的内存中选择一页换出

3. 物理块调入算法

采用固定分配策略,将系统中的空闲物理块分配给各个进程,可采用以下几种算法

  1. 平均分配算法:平均分配
  2. 按比例分配算法:按照进程的大小比例分配
  3. 优先权分配算法:为优先级高的进程分配较多物理快

4. 调入页面的时机

【408笔记】操作系统第三章 内存管理_第21张图片

5. 从何处调入页面

【408笔记】操作系统第三章 内存管理_第22张图片

6. 如何调入页面

【408笔记】操作系统第三章 内存管理_第23张图片

3.2.4 页面置换算法

页面的换入换出需要磁盘IO,开销较大,因此好的页面置换算法需要追求更少的缺页率

1. 最佳置换算法(OPT

  1. 淘汰以后永不使用,或者最长时间内不再被访问的页面保证最低缺页率
  2. 需要知道进程接下来访问哪些页面,然而这是无法预知的,因此最佳置换算法是无法实现的,但可以利用该算法评价其他算法
  3. 题目做法:内存满需要换页时,往后查找当前内存中的页面首次出现需要访问的位置,淘汰最后出现的页面

【408笔记】操作系统第三章 内存管理_第24张图片

2. 先进先出置换算法(FIFO

  1. 每次淘汰的页面是最早进入内存的页面
  2. 实现:用一个队列,根据页面调入内存的时间根据先后次序链接
  3. Belady异常:为进程分配的物理块数增大时,缺页次数不减反增的异常现象只有FIFO算法会产生Belady异常
  4. 该算法与进程实际运行时的规律不相适,先进入的页面也有可能最常被访问,算法性能差

3. 最近最久未使用置换算法(LRU

  1. 过去一段时间内未访问的页面,在最近的将来也不会被访问。每次淘汰最近最久未使用的页面
  2. 需要寄存器和栈的硬件支持,实现难,虽然性能好(堆栈类算法不会出现Belady异常
  3. 做题:内存满需要换页时,向前查找当前内存中的页面最近一次被访问的时间,淘汰最早出现的页面

`1. 导致LRU算法实现起来耗费高的原因:需要对所有页进行排序

4. 时钟置换算法(CLOCK

1. 简单CLOCK置换算法

【408笔记】操作系统第三章 内存管理_第25张图片

2. 改进型CLOCK置换算法

【408笔记】操作系统第三章 内存管理_第26张图片

3.2.5 抖动和工作集

【408笔记】操作系统第三章 内存管理_第27张图片

408 真题

(10 408)

  • 页面调度算法
  • 请求分页管理:先根据页面大小确定页内偏移位数、页号位数
    【408笔记】操作系统第三章 内存管理_第28张图片

(12 408)

  • 驻留集 【408笔记】操作系统第三章 内存管理_第29张图片

(17 408)

  • 页式管理,地址结构
  • IO,中断控制
  • 进程状态变化
    【408笔记】操作系统第三章 内存管理_第30张图片

你可能感兴趣的:(操作系统,其他)