关于页表,页表其实仅仅就是保存虚拟内存和物理内存的映射关系的,跟物理内存有没有被使用没关系的。
关于内存管理,物理内存和虚拟内存都是各自管理的,使用他们的时候都要申请,没有谁是可以不申请就用的。所以建立页表映射时需要有两次申请操作。最明显的就是用户态下内存使用过程:malloc函数就是线性地址的申请过程,而当发生缺页异常,内核再申请物理内存,并建立页表项,这里明显可以看出两次申请操作。但是内核页表的建立就比较隐晦了,因为内核页表的映射关系是固定的(仅指的是lowmem区域),所以页表是按照约定直接建立,看不出两次申请过程。但是高端内存页表建立也是有明显的两次申请过程的。
启动mmu后,CPU就不认物理内存了,只能使用虚拟地址。这时内存访问的过程一定是:虚拟地址—页表—物理地址,无论是内核态还是用户态都一样。内存有没有被使用,是他们各自的管理系统确定的,具体点就是物理内存由伙伴系统管理,而虚拟内存由vma管理。