第三章:内存管理

第三章:内存管理

本章结构
内存管理基本概念
虚拟内存管理
内存分配方式
连续分配
非连续分配
页式
段式
段页式
以请求分页为例
页面置换算法
内存映射文件

Part1:内存管理基本概念

1、内存分配方式

一般将内存分为两个部分,一个为系统区,仅供操作系统使用;一部分为用户区,仅供应用程序使用,用于分配的内存均为用户区内存。

  • 连续分配方式:一个进程的物理内存空间在是连续的
  • 非连续分配方式:一个进程的物理内存空间是不连续的

2、连续分配

2.1 内存管理方式

  • 单一连续分配:内存中仅装入一道进程
  • 固定分区分配:内存被划分为固定大小的块,一个块装入一个进程
  • 动态分区分配:根据进程装入内存的大小建立分区

2.2 内存分配方式

在动态分区分配的方式下,内存被划分为大小不同的空闲块,如果在内存中存在n个足够大的空闲块,需要确定将哪一个块分配给该进程。

  • 按照地址大小查找
    • First Fit:按照地址从小到大,找到第一个可以使用的分区
    • Next FIt:从First Fit的结束之处开始查找
  • 按照分区大小查找
    • Best Fit:找打可以容纳该进程的空闲分区中最小的一个
    • Worst FIt:找到最大的一个

3、非连续分配

3.1 内存管理方式

  • 分页式存储:将内存划分为大小相同的页
  • 分段式存储:内存按照进程的逻辑划分,分段大小不固定
  • 段页式存储:内存先按照进程的逻辑划分段,再将逻辑段划分为大小相同点的叶

3.2 基本分页式存储

  1. 几个名词

    • Page:进程中的块
    • Page Frame:内存中的块
    • Block:外存中的块
    • Page Table(PT):一张表,用于记录进程中的Page在哪一个Page Frame中
    • Page Table Register(PTR):用于存放PT在内存中的首地址,及其长度的寄存器
  2. 逻辑地址->物理地址

    • 慢表地址转换

      第三章:内存管理_第1张图片

    • 快表地址转换

      Translation Lookaside Buffer(TLB)快表:用于存放最近使用过的页表项,本质上是一个相联寄存器,每换一个进程执行,就清空一次

      第三章:内存管理_第2张图片

    • 多级页表

      如果一个页表过大(超过一页),那么我们将一个页表也分页,建立一个二级页表,用于寻找分散在内存中的页表。逻辑地址则为

      一级页号 二级页号 OFFSET

3.3 基本分段式存储

  1. 几个名词

    和3.2基本相同

    • Segement Table:进程的段在内存中的起始位置
    • Segement Table Register:用于存放PT在内存中的首地址,及其长度

    第三章:内存管理_第3张图片

  2. 逻辑地址转化为物理地址

    第三章:内存管理_第4张图片

3.4 段页式存储

结合的段式存储和页式存储的优点

第三章:内存管理_第5张图片

Part2:虚拟内存管理

利用程序的局部性原理,只需将程序的部分调入内存即可启动程序执行,如果需要访问的信息不在内存,则产生缺页中断,调入该缺失的信息,这只能基于非连续分配

第三章:内存管理_第6张图片

1、以请求分页为例

为了实现虚拟化,需要在页表中新增一些字段

第三章:内存管理_第7张图片

2、页面置换算法

2.1 评价指标

OPT算法:置换出未来最长时间内不被使用的页面(无法实现,因为人类无法预测未来)

2.2 三个页面置换算法

  • FIFO:First in First Out

  • LRU:Recently Least Used page out

    每过一轮,每个页面的时间++,如果重复访问则置0

    如果需要置换,则换出页面时间最长的一个页面

  • CLock/NRU:置换出最久没有使用的页面

    • 具体流程

      当某页首次装入主存或者被访问到时,其使用位置1

      当发生缺页中断时,指针开始循环扫描,每扫过一个就将其使用位置0,直到遇到第一个使用位=0的页面并且将其换出,并且在此停下

      第三章:内存管理_第8张图片

    • 改进算法:

      再上面算法的基础之上增加以为修改位,并且优先置换出未修改之后的界面,即某页首次装入内存或被访问到时used bit = 1; 被修改之后modify bit = 1 其算法流程为:(used bit, modify bit)

      • 指针扫描一遍,替换第一个(0, 0)页面,如果失败则进行下一步
      • 指针扫描一遍,并且另used bit = 0,替换第一个(0, 1)页面,如果失败则进行下一步
      • 另所有的used bit = 0重新开始

2.3 页面分配方式

  • 驻留集:操作系统给进程分配的物理内存块
    • 固定分配:驻留集大小不变
    • 可变分配:驻留集大小可变
    • 局部置换:置换自己驻留集中的内容
    • 全局置换:可以置换空闲区域或者其他驻留集中的内容
  • 何时调页
    • 预调页:一次性调入若干相邻页面,用于进程首次调入
    • 请求调页:发生缺页中断时,调入,用于进程运行时

3、内存映射文件

将一个文件映射到内存的地址空间,实现了文件磁盘地址和进程虚拟地址一一对应,这实现了两个功能

  • 进程使用指针对这段虚拟地址进行读写之后,系统会自动写回到磁盘上,而无需调用read,write等函数
  • 内核空间对这片区域的修改可以直接反映到用户空间,从而实现不同进程文件共享

好像整个被映射文件都加载到内存中一样,非常适合大文件管理

第三章:内存管理_第9张图片

你可能感兴趣的:(408-操作系统,内存管理,虚拟内存,页面置换算法,基本分页式存储,请求分页式存储)