页式存储管理
基本思想
把一个逻辑地址连续的程序分散存放在几个不连续的内存区域中,并且保证程序正常运行。
MMU
支持页式存储管理的硬件部件称为存储管理部件,也就是MMU(memory management unit)
重点概念梳理
首先要明白分页分的是谁,分用户程序的虚拟地址空间,也分内存的物理地址空间。这二者都是等分
1、块/内存块/物理块/页面/页
内存分成的页(块),大小固定,一般为29,210,211单元。
2、页号 & 块号
页号是程序(相对)地址空间分页之后编的号码
块号是内存(绝对)存储空间分页之后编的号码
3、地址形式
由于页式存储管理这个概念,我们把用户程序所访问的地址理解为两部分组成:|相对页号|页内地址|
而内存中实际的物理地址组成为:|物理块号|页内地址|
【此二者的页内地址是一样的,只是把相对页号转换成了物理块号】
4、页表
什么内容?
页号和块号之间的对应关系。
什么时候用?
每个装入内存的进程都要准备一张页表。
存在哪里?
页表存在内存之中,页表的起始地址和页表长度作为现场信息存放在进程控制块PCB中。
5、页表长度
就是页表一共多少个页表项。页表项数=页面数=页面编号个数
地址转换
所需硬件支持:高速缓存cache、页表始址寄存器、页表长度寄存器。
物理地址=内存块号*块长+页内地址 【重要】
由于块长是2的幂次方,从二进制角度来看,上面的公式本质上是把内存块号作为物理地址的高位部分,然后把页内地址作为物理地址的低位部分。
【注意:没换算成二进制的话别用移位的办法,容易错。十进制就是直接用公式直接算】
快表
由于一级页表自己本身就很占内存,于是产生了两级页表,把页表本身也分成页,做成目录的目录。但是两级页表的问题在于要访问两次内存,第一次读取页表,第二次获取物理块号。为了减少每次都访问两次内存的现象,引入快表TLB记录最频繁的少数页的页号和物理块号对应关系。
TLB内容:
|序号|相对页号|物理块号|访问过|特征位|
访问位:用来记录是否被访问过,判断是否继续留在TLB
特征位:该行是否有页表的某一页存在。