除了CR3,使用的是物理地址,其他寄存器使用的是线性地址。
是否启动分页机制,是由CR0中PG(31)位决定的。
在启用分页机制后,32位的线性地址被划分成3个域:
- Directory(目录),在线性地址中为最高10位,用于访问页目录表中的项。
- Table(页表),在线性地址中为中间10位,用于访问页表中的项。
- Offset(偏移量),最低12位,用于访问页内的某个存储单元。
映射表结构:4G的线性空间,页大小为4K,那么就需要1M页,也就是说映射表中有1M项,每项占4字节,那么这张表就需要4字节。
采用上面页映射表分为二级。页目录表有1K个表项,每项为4字节。页表也这么分配。
windows98的一个进程的线性空间安排
开始位置 |
|
ffffffff | 操作系统代码 |
c0000000 | 系统dll |
80000000 | 用户dll |
10000000 | 进程堆栈和进程代码、数据 |
00400000 | dos/win16兼容区 |
00001000 | 空指针区域 |
通过切换页表内容让线性地址在不同的时间片内映射不同的内容。