内容

  • 与分页内存管理相关的一些问题

  • 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
      • 随便选择一个正文段、数据段或堆栈段很可能不会恰好装满整个页面,多余的空间就被浪费了,这种浪费便是内部碎片
  • 缺点:程序需要很多页 -> 更大的页表
  • 由于页表和内部碎片造成的开销

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

问题