操作系统笔记8
操作系统笔记8
内存管理
基地址寄存器&界限地址寄存器
Base:基地址寄存器含有最小的合法物理内存地址
Limit:界限地址寄存器决定了范围的大小
越界时,会产生越界中断
逻辑地址空间和物理地址空间
逻辑地址,又称相对地址:CPU所生成的地址
物理地址,又称绝对地址:内存单元所看到的地址,即加载到内存地址寄存器中的地址
相对地址到绝对地址之间的转换,称为重定位
时机:
- 静态重定位:在入主存之前完成重定位,于 编译->链接->装入 过程中完成
- 优点:运行效率高
- 缺点:不能移动,不够灵活
- 动态重定位:运行时再完成重定位
- 优点:可以移动
- 缺点:执行效率低
连续内存分配
采用连续内存分配时,每个进程处于一个连续的区域
所需数据结构:未分分区表,保存可用的内存区间:起址、长度
最初是一个大的、连续的未分分区
固定分区分配:分区数固定、分区大小固定
分区表储存:分区号、状态、大小:
| 分区号 | 状态 | 大小 |
|---|---|---|
| 1 | 0(未分) | 10G |
| 2 | 0(未分) | 20G |
| 3 | 1(已分) | 30G |
- 优点:分配、回收内存十分方便
- 缺点:道数固定、每个分区内存大小固定、内存浪费、最大大小受限
可变分区分配
分区数、分区大小可变
在可变分区分配里,操作系统有一个表,用来保存哪些内存可以用,哪些内存已被占用
两个概念:
- 孔:可用的分配块
- 碎片:分为外碎片和内碎片。
- 外碎片:在未分分区表中存在,但一段时间无法被使用的
- 内碎片:分配给进程,但没有被使用的空间
可变分区分配的三种方法:
- 首次适应:分配第一个足够大的孔
- 优点:高地址留存有较大的空间
- 缺点:效率低、对内存的使用不均匀
- 最佳适应:分配最小且足够大的孔,这种方法可以产生最小剩余孔
- 优点:可以在内存中留有较大的未分分区
- 缺点:效率低
- 最差适应:分配最大的孔,这种方法可以产生最大剩余孔,在某些情况下可能更有用
分配与回收:回收时应该考虑相邻区合并
分页
分页管理方案允许进程的物理地址空间是非连续的
分页的思想:
-
主存的物理地址按照2^n等分成页框(Frame),从0开始编号
-
作业的逻辑地址空间按照页框的大小(2^n)等分成页(Page),也从0开始编号
-
地址的表示:(p,d)
- P:页号,p=A/(2^n),向下取整
- d:偏移,d=A mod (2^n)
-
连续的页可以分配不连续的页框
-
每个进程一张页表,保存各页入主存的情况(第几页在第几号页框)
-
系统设置两个寄存器来保存页表的起址与长度
-
分页技术不会产生外碎片,但会产生内碎片
分页环境下的保护
页表表目扩充:
- 保护位:读写、只读、只写等
- 有效位:0表示无效,1表示有效,试图访问无效的页面会中断
地址映像
- 直接地址映像:查页表
- 间接地址映像:增加若干寄存器,保存当前进程的页表表目
页表结构
-
层次页表
-
哈希页表
-
反置页表
以页框来创建的页表:页框号—进程名—页号
页框 进程名 页号 0 abcd 0
分段
采用分页内存管理有一个不可避免的问题:用户视角的内存和实际物理内存的分离
分段的逻辑地址空间是由一组段来组成的,每组段都有自己的名称和长度。逻辑地址指定了段名称(以段号引用来体现)和段内偏移 <segment-number,offset>。
-
物理地址空间:可变分区分配模式
-
逻辑地址空间:分段,从0开始编号
-
分配采用离散分配,连续的段可以分配不连续的内存
-
逻辑地址:段号-段内偏移:<segment-number,offset>
-
每个作业一张段表
段号 起址 长度 0 100 120 -
系统设置两个寄存器:存段表地址和段表长度
段页式
- 物理地址空间采用分页的方法
- 逻辑地址空间采用分段的方法,每个段内再分页
- 每个作业一张段表,每个段一张页表
- 逻辑地址:段号,页号,页内偏移:<s,p,d>
- 设置一对寄存器:存段表地址和段表长度





