基本分页存储管理
分页存储是一种内存管理技术,用于将计算机的物理内存和虚拟内存结合使用,以更有效地管理内存资源。它通过将程序的虚拟地址空间分割成固定大小的块,称为页(page),然后将这些页映射到物理内存中的物理页框(page frame)上。分页存储的主要目的是通过虚拟内存来支持程序所需的更大地址空间,并提高内存使用效率。
页框和页框号
将实际的物理内存空间
分为一个个大小相等的分区,每一个分区就位一个“页框”,每个页框都会有一个编号,即页框号,页框号从0开始编号。
页(页面)和页号
将进程的逻辑地址空间
也分为和页框大小相等的小块,每一个小块我们称之为“页”或者“页面”。每个页面都会有一个编号,我们称之为页号。页号也是从0开始编号的。
页框号和页号
从逻辑角度来看,无论是物理内存空间还是进程的逻辑地址空间,都可以类比为一个数组结构。而页框号和页号就像是数组的下标。所以操作系统中的页框号和页号都是逻辑上的概念,而不是在实际物理内存中存储的值。
页表和页表项
操作系统以页框为单位为各个进程分配内存空间,进程的每个页面分别放入一个页框中。并且进程中各个页面在实际内存中连续存放,也就是说进程的页面与内存的页框是有一一对应的映射关系的,用来存储此关系的结构我们称之为页表。而其中一条条映射关系我们可以理解为一个个页表项。关于页表和页表项有以下需要注意的几点。
- 一个进程都会对应一张页表。
- 页表不是直接存储在PCB(进程控制块)中,而是存储在内存中的某个位置,PCB 中只保存页表的指针或地址
- 一级页表通常需要存储在连续的内存空间中,因为它通常实现为一个线性数组。
- 进程中的每个页号都会对应页表中的一个页表项。
- 一级页表中,虽然在逻辑意义每个页表项会有页号和页框号的映射关系,但是在实际内存中的页表是一个线性数组,而页号恰巧可以使用数组的下标来表示。所以内存中页表中的页表项只存储一个线性的页框号就可以了。
- 在一个进程中页号通常都是从0开始的,但是并不代表一个进程的逻辑地址是从0开始的。在这里我们先不展开讲。