本次笔记内容:
4.1 非连续内存分配:分段
4.2 非连续内存分配:分页
4.3 非连续内存分配:页表
文章目录
为什么需要非连续内存分配
连续分配有碎片等缺点。
非连续分配的优劣
优点:
- 一个程序的物理地址空间是非连续的;
- 更好的内存利用和管理;
- 允许共享代码与数据(共享库etc.);
- 支持动态加载和动态链接。
缺点:
- 如何建立虚拟地址和物理地址之间的转换
-
- 软件方案(开销巨大)
-
- 硬件方案(主要考虑的方案)
硬件方案: 分段、分页。
分段(segment)
根据程序的段的性质,分离出来管理。
堆、运行栈、程序数据、程序text段分开管理,确保了效率、安全问题。
分段技术是一种映射。使用 硬件支持 来寻址,是一种较好方案。
分段寻址方案
s: segment number,段号;
addr: address,地址。
x86为段寄存器+地址寄存器实现方案。
上图中,左上角应用程序P通过CPU执行每条指令;CPU去寻址,这里采用单地址实现方案。段号保存在 段表 (存储:逻辑地址与物理地址映射关系;每个段起始地址、长度限制)里,段号决定段表中的索引。段表是操作系统在寻址之前就建立好的。
段表如何建立在实验部分展开讲解。
分页(paging)
分页为较为常用方式。分页机制中,“段”的尺寸不可变,即为页。
基本规定
- 划分物理内存至固定大小的帧:大小是2的幂,e.g.,512,4096,8192。
- 划分逻辑地址空间至相同大小的页:大小是2的幂,e.g.,512,4096,8192。
- 建立方案:转换逻辑地址为物理地址(pages to frames)
-
- 页表
-
- MMU/TLB
帧(Frame)
物理内存被分割为 大小相等的帧 。帧存在帧号(frame number)与偏移(offset),相当于段中的段号与偏移。 帧号占了F这么多位,本身大小占了S这么多位。
上图示例中,(f,o)=(3,6),分别代表段号与本身所表示值。
思考(不一定对): 如果f=1(第一个页),o=3,则物理地址为 2 9 + 3 2^9 + 3 29+