6 内存管理
type
status
date
slug
summary
tags
category
icon
password
6.1 内存管理的需求
- 需要将内存划分成不同部分进行管理:
- 操作系统和用户程序需要分隔开
- 不同进程需要分隔开
- 一个进程的不同模块需要分隔开
- 内存分区也是内存保护的必要条件:
- 给不同分区(模块)提供不同的保护级别(如代码段不能写)
- 不同分区具有不同的访问授权(如内核态和用户态)
- 特定分区有其特定的限长
- 需要将进程换入或换出内存:重定位
6.2 分区
- 固定分区:大小相等/大小不等
- 程序太大而无法装载到一个分区中:部分装载+覆盖
- 内部碎片(分区内未被利用但无法再分配的空间)
存在问题:
放置算法:把进程放置在能够容纳它的最小分区中
- 动态分区:分区的长度和数量可变
- 最佳适配:选择与要求大小最接近的块
- 首次适配:选择大小足够的第一个可用块
- 下次适配:在上次放置位置后,选择大小足够的第一个可用块
存在问题:外碎片(分区之间分散的小块空闲空间),需要不时的移动进程来使空闲空间连成一片(压缩)
放置算法:
- 伙伴系统(Buddy System)



6.3 分页
重定位
- 逻辑地址:每个用户进程所看到的独立的地址空间,就是逻辑地址空间。逻辑地址空间里的地址,就是逻辑地址(段基址+段偏移量)
对应物理地址
- 相对地址:相对地址是相对于进程当前部分(比如程序起始位置)的地址
对应绝对地址
- 虚拟地址:操作系统为进程分配的连续地址空间(线性地址),通过分页机制直接映射到物理地址(可能是非线性的)
分页
- 将内存划分成大小固定、相等且较小的块,将进程划分成同样大小的块
- 进程的块称为页(page)
- 内存中的块成为页框(frame)
- 通过将进程的各页放置在可用的页框中,一个进程可以占据多个不连续的页框
- 仅最后一页中存在很小的内碎片,没有外碎片
- 操作系统需要为每个进程维持一个页表(page table)
- 页表描述了该进程每页所对应的页框的位置

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