页表:
虚拟内存的概念。操作系统虚拟内存到物理内存的映射,被称为页表。
不可能每一个虚拟内存的Byte都对应到物理内存的地址,因为这样的页表非常大,于是引入 页(Page)概念,进行分页,减小虚拟内存页对应物理内存页映射表的大小。
缺页异常:malloc和mmap函数分配内存是仅建立了 进程虚拟地址空间,并没有分配虚拟内存对应的物理内存,进程访问没有建立映射关系的虚拟内存时,处理器自动触发 缺页异常,引发缺页中断。
缺页中断:缺页异常后产生一个缺页中断,操作系统根据页表中的 外存地址 在外村中找到所缺的一页,将其调入 内存。
在进行动态内存分配的时,(C++ 中 new),操作系统会在硬盘中创建或申请一段虚拟内存空间,并更新到页表(分配一个页表条目),该条目指向硬盘上新创建的虚拟页,产生映射关系。
逻辑地址转线性地址:段起始地址(基地址) + 段内偏移地址 = 线性地址
例如一个存储器大小是 1KB(8位)可以分为4段,第一段地址范围是0~255,段地址为0;;;第四段地址范围是768~1023,段地址为768;偏移地址为0~255之间。
线性地址是一个32位的无符号整数,可以用来表达4GB的地址,高达4294967296个内存单元。十六进制表示(0x00000000~0xffffffff)
分页机制:
4KB分页大小,线性地址的高10位为页目录项在页表中的编号,中间10位为页表中的页号,低12位是偏移地址。
4MB分页大小,高10位页号,低22位偏移地址。
线性地址转物理地址:页目录地址 + 页目录索引 = 页表地址 ----- 页表地址 + 页表索引 = 页地址 ------ 页地址 + 页内偏移 = 物理地址