1.分页内存管理
1.物理内存划分成无数个大小一样的块,每个块被称为页框
2.内存大小为2^n,页框大小为2^m,那么就有2^(n-m)个页框
3.页表则存在2^(n-m)个页号,页表的每个页表项为n-m位,一般为了整数操作会凑个整,多出来的做留着用来做标志位, 的最大占用空间则为2^(n-m)*((n-m)/8的大整数)
上面的n=32,代表32位,m=12代表每个叶框大小为2^12=4K,页表长度为2^20=1M,页表项为4B,所以整个页表始终占用空间为4MB,可能程序访问的时候一直访问前面的小部分,浪费了后面大部分
所以将页表从一级改为二级,页表长度为2^((n-m)/2),页长度为2^10=1K,页表项为4B,所以一个页表为4KB,然后每个页表项指向另一个页表,这个就是二级页表,一级页表中没用到的项对应的页表可以不用创建
举个例子就是,如果一级页表要映射一个物理地址的话,要初始化整个一个页表为4MB,二级页表映射的话,先初始化一级页表4K,然后再初始化一级页表项对应的二级页表4K,一共需要8K
虚拟地址含义
一级页表:
page index 20bit(下标值) | offset 12bit
二级页表:
pdx 10bit(下标值) | ptx 10bit(下标值) | offset 12bit
请求表:
整个系统有一个请求表,描述系统内各个进程页表的位置和大小,用于地址转换也可以结合到各进程的PCB(进程控制块)里