操作系统L11
内容
- 与分页内存管理相关的一些问题

- Segmentation 分段
Paged Memory Management 分页内存管理
CPU生成的地址被分为
- Page number(p)
- 用作页表的索引,页表包含物理内存中每个页面的基址
- Page offset(d)
- 结合基地址来定义发送到内存单元的物理内存地址

- p是到页表的索引
- d是页表上的偏差

分页系统中的设计问题
Local versus Global Allocation Policies 本地与全局分配策略
- 全局算法在所有可运行进程之间动态分配页框。
- 本地算法为单个进程分配页面。

全局算法用于防止颠簸(thrashing)并将分页率保持在可接受的范围内:
- A: 太高 -> 为进程分配更多的页框。
- B: 太低 -> 分配进程较少的页框。

Page Size 页面大小
small page size
- 优点:内部碎片较少
- 内部碎片 internal fragmentation
- 随便选择一个正文段、数据段或堆栈段很可能不会恰好装满整个页面,多余的空间就被浪费了,这种浪费便是内部碎片
- 内部碎片 internal fragmentation
- 缺点:程序需要很多页 -> 更大的页表
- 由于页表和内部碎片造成的开销


Separate Instruction and Data Spaces 分离的指令空间和数据空间
大多数计算机只有一个地址空间,既存放程序也存放数据
大多数系统将指令(程序文本)和数据的地址空间分开。
一个进程在其进程表中可以有两个指针:
- 一个指向指令页,一个指向数据页。
一个共享代码可以被两个进程指向。

Shared Pages 共享页面

Cleaning Policy 清除策略
Paging Daemon(分页守护进程):
- 一个后台进程,大部分时间处于休眠状态;
- 定期唤醒以检查内存状态
- 当空闲页框太少时,使用替换算法选择要驱逐的页面
Page Fault Handling 缺页中断处理



Locking Pages in Memory 锁定内存中的页面
- Process通过系统调用从设备读取数据到缓冲区
- 在等待 I/O 时,另一个进程启动
- 有一个缺页中断
- 第一个进程的缓冲可能会被选择置换出
- 如果通过I/O处于对该页面进行DMA传输的过程中,将这个页面移出,会导致部分数据写入它们所需的缓存区中,而部分数据被写入到最新装入的页面中。
- 在这种情况下,页面需要被钉住(pinning)
Backing Store 后备存储
在磁盘上分配页面空间的两种方法:
1)分页到静态交换区
2)使用磁盘映射动态备份页面

Segmentation 分段
对程序的虚拟地址进行分段,映射到物理地址时,物理地址也被分段了
在机器上提供多个互相独立的称为段(segment)
程序员不知道这些将有多大,或者它们将如何增长,并且不想管理它们在虚拟内存中的位置


Compiler with One-dimensional Address Space 具有一维地址空间的编译器

Compiler with Segmentation 带分段的编译器

- 分段为每个进程维护多个独立的虚拟地址空间
- 允许每个表独立增长或收缩
Pure Segmentation


段(segment)是逻辑上独立的地址空间
- 段可能有不同的大小
- 它们的大小可以动态变化
- 地址空间使用二维内存地址并且有2部分:(段#,段内偏移)
- 段可以有不同的保护
- 允许共享程序和进程之间的数据。
分段和分页结合:MULTICS

问题








本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yeの博客!