C3 存储管理
第三章-存储管理
3.1-存储管理基础
有哪些地址
逻辑地址
- 又叫相对地址。是用户编程所使用的地址空间。
物理地址
- 处理器执行指令时所使用的地址空间
虚拟地址
- 辅存的地址空间
为啥要存储管理
- 转换地址
- OS有两种转换地址的模式
- 静态重定位:程序装入内存时转换地址(由装入程序支持)
- 动态重定位:解析命令才转换地址(现在都用这个,考虑效率的话必须由硬件支持)
- 分配和去配主存空间
- 管理进程对主存的共享
- 保护进程,避免越界访问
- 扩充主存空间
- 把磁盘作为主存的扩充
- 对换技术:调出一部分进程
- 虚拟技术:调入进程的一部分
存储管理的模式
- 单连续存储管理:1D逻辑地址 占用 一个 主存固定或可变分区
- 段式存储管理:2D逻辑地址 占用 多个 主存可变分区
- 页式存储管理:1D逻辑地址 占用 多个 页框
- 段页式存储管理:2D逻辑地址 占用 多个 页框
虚拟存储器
基本思想
- 为了让程序员不必考虑主存容量的限制,夸夸用地址,就把辅存的一部分当成主存,随用随调入
- 主存不够了,就把部分数据调出到辅存上去
3.2-单连续分区存储管理
- 每个进程占用一个物理上完全连续的存储空间
- 主存:系统区+用户区
- 栅栏寄存器存两个区的分界,在访存时提供保护
- 一般采用静态重定位
内存分配
固定分区存储
主存按递增大小的块来分区,加载任务的时候大小合适就丢进去。
e.g.
0 4k 12k 28k 44k 92k … OS区(4k) 分区1(8k) 分区2(16k) 分区3(16k) 分区4(24k) 分区5(24k) …
可变分区存储
按实际分配需求来确定内存分区
存储用已分配区表和未分配区表记录。包含:分区基址、分区长度、分区标志(未分配还是任务1还是任务2还是…)
分配算法
- 最先适应分配算法 First fit
- 从头找第一个大小够的分区
- 最容易产生碎片
- 邻近适应分配算法 Next fit
- 从上一次的空闲分区开始找,第一个大小够的分区
- 最优适应分配算法 Best fit
- 找大小最接近的分区
- 最坏适应分配算法 Worst fit
- 找最大的分区
- 最先适应分配算法 First fit
移动技术
- 把已分配的分区移到一堆,碎片就能变成一个新的大空间
- 需要动态重定向支持(不知道为什么qwq)