这是我个人在学习操作系统的笔记。。。
1.基本概念
每个操作系统都有自己的方法来保存页表。
绝大多数都为每个进程分配一个页表。页表的指针与其他寄存器的值一起存入进程控制块
- 转换表缓冲区(TLB)–快表
快表只存部分表,若发现匹配的页号,则将块号取出,不通过页表,直接与页内位移拼接,形成物理地址。
若没有匹配的页号,按普通访问页表方式进行。再把该页号与块号对应关系送入快表保存。若快表满,则删除其中一个表项。 - 快速寄存器价格昂贵,完全由它来组成页表的方案不可取
- 分页保护
分页环境下,内存保护通过与每个帧相关联的保护位来实现,保护位在页表中保存 - 分页的优先之一
可以共享公共代码,其特点是只读,通过正确的代买,及操作系统强制实现
1.非连续内存分配:分段
1.1非连续分配内存的原因
- 连续内存分配的缺点
分配给一个程序的物理内存是连续的
内存利用率低
有外碎片、内碎片的问题
1.2非连续内存分配
优点
一个程序的物理地址空间是非连续的
更好的内存利用和管理
允许共享代码与数据(共享库等)
更支持动态加载和动态链接缺点
建立虚拟地址和物理地址之间的转换
软件方案(开销大)
硬件方案
两种硬件方案
分段
分页
2.分段
程序的分段地址空间(内存地址空间如何去寻址)
逻辑地址空间是连续的,物理地址是离散的。中间需要有一种映射机制,让它们建立一种相应的关系。![]()
分段寻址方案(硬件手段)
段访问机制:一个段指的是一个内存块,是一个逻辑地址空间
程序访问内存地址需要:一个二维的二元组(s段号,addr端内偏移)![]()
段访问机制的硬件实现方案
![]()
2.非连续内存分配:分页
- 页号作为页表的索引
页表包含每页所在物理内存的基地址
- 划分物理内存至固定大小的-帧(物理)
大小是2的幂,如512,4096,8192 - 划分逻辑地址空间至相同的-页(逻辑)
大小是2的幂,如512,4096,8192 - 建立方案:逻辑转换为物理地址
页表、MMU/TLB
2.1 物理地址部分:页帧
页帧:物理内存的布局和组织方式
帧:物理内存被分割为大小相等的帧
一个内存物理地址是一个二元组(f,o)表示
- f –帧号(F位,共有2^F个帧)
- o –帧内位移(S位,每帧有2^S个字节)
![]()
- 通过一个实例来加深对这个概念的理解
![]()
首先有一个物理内存地址(3,6),帧号是3,它是7位的,说明一共能有2^7个帧,这个帧是其中的第3个;
帧内偏移是6,他是9位的,说明一个帧里可以有2^9个字节,当前地址是在这个帧里的第6个字节;
因此,它的物理地址是3 * 2^9 + 6。
通过这个例子,可以发现 页帧号 的作用就是通过一个二元组能够找到一个物理地址。
2.2 逻辑地址部分:页
页:一个程序的逻辑地址空间被划分为大小相等的页
- (逻辑地址)页内偏移的大小 = (物理地址的)帧内偏移的大小
- (逻辑地址)页号大小可能不等于(物理地址的)帧号大小
- 一个逻辑地址是一个二元组(p,o)
p –页号(P位,2^p个页)
o –页内偏移(S位,每页有2^s字节)![]()






