6 内存管理

type
status
date
slug
summary
tags
category
icon
password

6.1 内存管理的需求

  1. 需要将内存划分成不同部分进行管理:
      • 操作系统和用户程序需要分隔开
      • 不同进程需要分隔开
      • 一个进程的不同模块需要分隔开
  1. 内存分区也是内存保护的必要条件:
      • 给不同分区(模块)提供不同的保护级别(如代码段不能写)
      • 不同分区具有不同的访问授权(如内核态和用户态)
      • 特定分区有其特定的限长
  1. 需要将进程换入或换出内存:重定位

6.2 分区

  1. 固定分区:大小相等/大小不等
    1. 存在问题:
      • 程序太大而无法装载到一个分区中:部分装载+覆盖
      • 内部碎片(分区内未被利用但无法再分配的空间)
      放置算法:把进程放置在能够容纳它的最小分区中
  1. 动态分区:分区的长度和数量可变
    1. 存在问题:外碎片(分区之间分散的小块空闲空间),需要不时的移动进程来使空闲空间连成一片(压缩)
      放置算法:
      • 最佳适配:选择与要求大小最接近的块
      • 首次适配:选择大小足够的第一个可用块
      • 下次适配:在上次放置位置后,选择大小足够的第一个可用块
  1. 伙伴系统(Buddy System)
notion image
notion image
notion image

6.3 分页

重定位

  • 逻辑地址:每个用户进程所看到的独立的地址空间,就是逻辑地址空间。逻辑地址空间里的地址,就是逻辑地址(段基址+段偏移量)
    • 对应物理地址
  • 相对地址:相对地址是相对于进程当前部分(比如程序起始位置)的地址
    • 对应绝对地址
  • 虚拟地址:操作系统为进程分配的连续地址空间(线性地址),通过分页机制直接映射到物理地址(可能是非线性的)

分页

  • 将内存划分成大小固定、相等且较小的块,将进程划分成同样大小的块
  • 进程的块称为页(page)
  • 内存中的块成为页框(frame)
  • 通过将进程的各页放置在可用的页框中,一个进程可以占据多个不连续的页框
  • 仅最后一页中存在很小的内碎片,没有外碎片
  • 操作系统需要为每个进程维持一个页表(page table)
  • 页表描述了该进程每页所对应的页框的位置
notion image
页和页框的大小必须是2的幂

6.4 分段

  • 类似于动态分区,一个程序可以占据多个段,且不要求连续
  • 没有内碎片
  • 由于进程可以被分成多个小块,外碎片也会较小
  • 分页对程序员是透明的,但分段通常是可见的,是组织程序和数据的一种手段
  • 需要段表
Loading...