【王道考研 操作系统】【第三章】内存空间的分配与回收 连续分配 动态分区分配算法 分页式、分段式、段页式存储管理

第一章【王道考研 操作系统】【第一章】操作系统的概述、特征、发展、体系结构 中断与系统调用

第二章【王道考研 操作系统】【第二章】进程概念 进程控制 进程通信 线程概念和多线程模型
【王道考研 操作系统】【第二章】处理机调度 进程调度算法
【王道考研 操作系统】【第二章】进程同步、进程互斥的实现方法 软件&硬件 优点&缺点 信号量机制
【王道考研 操作系统】【第二章】管程 用管程解决进程互斥和同步问题
【王道考研 操作系统】【第二章】死锁的概念 预防死锁 避免死锁 死锁的检测和解除

第三章 1【王道考研 操作系统】【第三章】内存的基础知识 进程的运行原理 逻辑地址vs物理地址

第三章

2. 内存管理

2.1 内存空间的分配与回收

2.1.1 连续分配管理方式

连续分配:指为用户进程分配的必须是一个 连续的内存空间

2.1.1.1 单一连续分配

image-20220304145649199

2.1.1.2 固定分区分配

image-20220304145936991
image-20220304150555365

2.1.1.3 动态分区分配

image-20220304152111871
用什么样的数据结构记录内存的使用情况?
image-20220304150954548
当有很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?

2.1.1.4 动态分区分配算法
  1. 首次适应算法 First Fit:每次从低地址开始查找,找到第一个能满足大小的空闲分区。
    image-20220304152921212
  2. 最佳适应算法 Best Fit:为了保证当 ”大进程“ 到来时能有连续的大片空间,尽可能多地留下大片的空闲区,即优先选择更小的空闲区。(空闲链表需要重新排列)
    image-20220304152948395
  3. 最坏适应算法 Worst Fit:为了避免留下太多小碎片,分配时优先使用最大的空闲区。(空闲链表需要重新排列)
    image-20220304153151959
  4. 邻近适应算法 Next Fit:为了解决First Fit算法导致的低地址部分出现很多小的 空闲区,增加了查找的开销的问题,分配时从上次查找结束的位置开始检索。
    image-20220304153641274
  • 总结
    image-20220304153854129
    如何进行分区的分配与回收操作?
    image-20220304151343747

2.1.2 非连续分配管理方式

为用户进程分配的可以是一些 分散的内存空间

2.1.2.1 基本分页存储管理
  • 基本思想

    把内存分为一个个大小相等的分区——页框 / 页帧,每个页框有一个编号,即 页框号,从0开始。(页框不能太大,否则可能产生过大的内部碎片)

    将用户进程的地址空间也分为与页框大小相等的一个个区域——页 / 页面,每个页面也有一个编号,即 页号,从0开始。(进程的最后一个页面大小可能小于页框)
    image-20220304160307875

  • 如何实现地址转换?
    image-20220304160738611
    image-20220304162215098
    image-20220304162403311

  • 如何找到页号对应页面在内存中的起始地址——页表

    为了能知道进程的每个页面在内存中存放的位置,操作系统要 为每个进程建立一张页表
    image-20220304162804287
    页号是隐含的?
    image-20220304163251365

  • 基本地址变换机构

    用于实现逻辑地址到物理地址转换的一组硬件机构。
    image-20220305230703033
    流程:
    image-20220305231451485
    image-20220305231102968
    注意!访问一个逻辑地址要访问两次内存。

  • 具有块表的地址变换机构

    基本地址变换机构的改进版本。在基本地址变换机制中,每访问一个逻辑地址,都需要查询内存中的页表,可能连续很多次查到的都是同一个页表项,产生了重复查询。

    1)局部性原理
    image-20220305232608088
    2)快表

    又称 联想寄存器 TLB,是一种访问速度比内存块很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加快地址变换的过程。与此对应,内存中的页表常称为 慢表

    3)引入快表后的地址变换过程
    image-20220305233011284
    查询快表的速度比查询页表的速度快很多,因此只要快表命中,就可节省很多时间。

    4)与基本地址变换的差异
    image-20220305233339616

  • 两级页表

    1)单级页表存在的问题
    image-20220305233827109
    2)两级页表的原理
    image-20220305234325670
    image-20220305234450659
    3)地址转换的过程
    image-20220305234626272

    4)补充
    image-20220305234910459

2.1.2.2 基本分段存储管理

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

  • 基本原理

    进程的地址空间:按照程序自身的逻辑关系 划分 为若干个 ,每个段都有一个 段名,每段从0开始编址。

    内存分配规则:以段为单位进行分配,每个段 在内存中占据 连续空间各段之间可不相邻
    image-20220306221414893

  • 分段系统的逻辑地址结构
    image-20220306221600707
    image-20220306221632549

  • 段表

    为每个进程建立一张段映射表,称为 段表。记录了各个逻辑段到实际物理内存地址的映射关系。
    image-20220306221924868

  • 地址变换过程
    image-20220306222500515

    • 分段、分页管理的对比
      image-20220306222738103
      image-20220306223034393
      image-20220306223205187
      image-20220306223304299
2.1.2.3 段页式存储管理
  • 分页、分段管理方式中最大的优缺点
    image-20220306224656878

  • 段页式管理 = 分段 + 分页

    将进程按逻辑模块分段,再将各段分页,再将内存空间分为大小相同的内存块,将进程的各页面分别装入各内存块中。
    image-20220306224926740

  • 逻辑地址结构
    image-20220306225126761

    分段对用户是可见的,程序员编程时需要显式地给出段号、段内地址;而将段分页对用户是不可见的,系统会根据段内地址自动划分页号和页内偏移地址。

    因此,段页式管理的地址结构是二维的。

  • 地址转换过程

    一个进程会对应一个段表和多个页表。
    image-20220306225516169
    image-20220306225735311


版权声明:本文为liangjingxin4747原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。