内存管理的需求

重定位

  • 程序执⾏时可能被交换到磁盘 并返回到位置不同的主存中 此时就需要重定位
  • 将内存访问转换为实际的物理内存地址

保护

  • 一个进程不能访问其他进程的内存空间和操作系统的其他部分
  • 由硬件(处理器)检查而不是软件(操作系统) 硬件能获取所有出现的内存引用

共享

  • 允许多个进程访问内存的同⼀部分
  • 多个进程访问一个程序的同一副本
  • 受控访问

逻辑组织

  • 程序是⽤模块编写的 模块可以独⽴编写和编译
  • 为模块提供不同程度的保护(只读、仅执⾏)
  • 在进程之间共享模块

内存分区

内存是一组具有存储功能的单元 每个内存单元成为地址空间

每个内存单元通过内存地址(编号)来查找位置

分类

Untitled
  • 页框:内存中固定长度的块
  • 页:固定长度的数据块
  • 段:变长的数据块
  • 分段分页的特点:
    1. 进程划分为多个块 执行时不需要连续位于内存中
    2. 内存访问使用逻辑地址 执行时动态转为物理地址

固定分区

内部碎片:装入的数据块小于分区大小 导致分区内部存在空间浪费

等大小 or 不等

等大小:程序太大放不下 ⇒ 覆盖技术:程序自己按逻辑分模块 不同时运行的共享一个空间

内存大小不等时 放置算法:

  1. 能够容纳的最⼩空间的分区中 每个分区都需要维护一个调度队列 ⇒ 内部碎片最少
  2. 所有进程一个调度队列 选择最⼩可⽤分区

缺点:

  1. 分区的数量在系统生成阶段己经确定 限制系统中活动进程的数量
  2. 小作业不能充分利用空间

动态分区

分区长度&数量可变

会产生外部碎片 ⇒ 可通过压缩技术克服外部碎片 但费时且需要动态重定位

放置算法:

  • 最佳适配:选最接近的 ⇒ 性能差 且会产生大量非常小的分区 需要频繁压缩
  • 首次适配:从头扫描 选择大小足够的第一个 ⇒ 快 但前端出现小分区
  • 下次适配:从上一次放置的位置开始扫描 ⇒ 末尾大块很快被分割

无内部碎片 但要压缩外部碎片 处理器利用率低

伙伴系统

Untitled

判断+二分

简单分页

将内存划分为大小相等的小块 并将每个进程划分为大小相同的块

  • 类似固定分区 会产生内部碎片
  • 进程的块 – 页
  • 内存块 – 页框
  • 每个进程维护一个页表
  • 内存地址由页面内的页码和偏移量组成
Untitled

逻辑地址:页号 偏移量 物理地址:页框号偏移量

给出逻辑地址后 处理器用页表转换产生物理地址

一个程序可以占据多个分区 并且这些分区不需要连续

内存可分成许多 大小相等且很小的页框 每个进程可划分成同样大小的页 较小的进程需要较少的页,较大的进程需要较多的页 装入一个进程时 其所有页都装入可用页框中 并建立一个页表

简单分段

  • 类似动态分区 同样会产生外部碎片 但一个程序可以占多个分区 分区不需要连续
  • 逻辑地址:段号 偏移量
  • 会产生很小的外部碎片
  • 段有最大长度限制 所有程序的所有段的长度不要求都相等
  • 每个进程都有一个段表 系统也会维护一个内存中的空闲块列表
  • 每个段表项给出相应段在内存中的起始地址,还必须指明段的长度,以确保不会使用无效地址
Untitled

逻辑地址转换物理地址:

  • 提取段号,即逻辑地址最左侧的n位
  • 以这个段号为索引,查找进程段表中该段的起始物理地址
  • 最右侧m位表示偏移量,偏移量和段长度进行比较,若偏移量大于段长度,则该地址无效
  • 物理地址为该段的起始物理地址与偏移景之和
Untitled

About the Author

XFishalways

Fisher不钓鱼 川大21级在读 网络空间安全专业 7年前的围棋业余5段 素描彩铅水粉国画书法童子功拥有者 Hala Madrid Letsgo Pat Self-Commentator Analyzer ing 七年前的业余5段 AI Skipper nparadigm申工智能yyds 飞禽岛少年Lee Sedol

View All Articles