C3 存储管理

第三章-存储管理

3.1-存储管理基础

有哪些地址

逻辑地址

  • 又叫相对地址。是用户编程所使用的地址空间。

物理地址

  • 处理器执行指令时所使用的地址空间

虚拟地址

  • 辅存的地址空间

为啥要存储管理

  • 转换地址
    • OS有两种转换地址的模式
    • 静态重定位:程序装入内存时转换地址(由装入程序支持)
    • 动态重定位:解析命令才转换地址(现在都用这个,考虑效率的话必须由硬件支持)
  • 分配去配主存空间
  • 管理进程对主存的共享
  • 保护进程,避免越界访问
  • 扩充主存空间
    • 把磁盘作为主存的扩充
    • 对换技术:调出一部分进程
    • 虚拟技术:调入进程的一部分

存储管理的模式

  • 单连续存储管理:1D逻辑地址 占用 一个 主存固定或可变分区
  • 段式存储管理:2D逻辑地址 占用 多个 主存可变分区
  • 页式存储管理:1D逻辑地址 占用 多个 页框
  • 段页式存储管理:2D逻辑地址 占用 多个 页框

虚拟存储器

基本思想

  • 为了让程序员不必考虑主存容量的限制,夸夸用地址,就把辅存的一部分当成主存,随用随调入
  • 主存不够了,就把部分数据调出到辅存上去

3.2-单连续分区存储管理

  • 每个进程占用一个物理上完全连续的存储空间
  • 主存:系统区+用户区
  • 栅栏寄存器存两个区的分界,在访存时提供保护
  • 一般采用静态重定位

内存分配

固定分区存储

  • 主存按递增大小的块来分区,加载任务的时候大小合适就丢进去。

  • e.g.

    04k12k28k44k92k
    OS区(4k)分区1(8k)分区2(16k)分区3(16k)分区4(24k)分区5(24k)

可变分区存储

  • 按实际分配需求来确定内存分区

  • 存储用已分配区表未分配区表记录。包含:分区基址、分区长度、分区标志(未分配还是任务1还是任务2还是…)

  • 分配算法

    • 最先适应分配算法 First fit
      • 从头找第一个大小够的分区
      • 最容易产生碎片
    • 邻近适应分配算法 Next fit
      • 从上一次的空闲分区开始找,第一个大小够的分区
    • 最优适应分配算法 Best fit
      • 找大小最接近的分区
    • 最坏适应分配算法 Worst fit
      • 找最大的分区
  • 移动技术

    • 把已分配的分区移到一堆,碎片就能变成一个新的大空间
    • 需要动态重定向支持(不知道为什么qwq)

3.3-页式存储管理