线性地址是一个32位无符号整数,它可以表示多达4GB的地址空间,即最多可达4,294,967,296个
内存单元。这种地址通常以十六进制形式表示,其数值范围从0x00000000到0xffffffff。程序产生的逻辑地址可以通过一定的变换过程转化为线性地址。如果启用了分页机制,线性地址还可以进一步转换成物理地址。在4KB分页模式下,线性地址的高位20位代表页
目录项在页目录表中的编号,中间10位表示页表中的页号,低位12位则是偏移地址。而在4MB分页模式下,高位10位表示页号,低位22位表示偏移地址。若未启用分页机制,则线性地址等同于物理地址。
CPU的页式内存管理单元负责将线性地址最终映射为物理地址。为了提高管理和效率,线性地址被划分为固定长度的页面,这些页面构成了一个名为页目录的大数组。每个页目录项指向相应的页地址。具体转换过程如下所示:
2. 每个活跃进程都拥有自己的虚拟内存和唯一的页目录地址。在切换进程时,操作系统会将当前进程的页目录地址加载到cr3寄存器中,并保存其他进程的相关信息。
3. 每个32位线性地址由三个部分组成:页目录索引(10位)、页表索引(10位)和偏移(12位)。
4. 转换过程包括从cr3寄存器中获取当前进程的页目录地址,根据线性地址的前两位在页目录中查找对应的索引项,由于采用了二级管理模式,页
目录项不再包含页地址,而是指向页表的地址。
5. 根据线性地址的中间十位在页表中查找页的起始地址。
6. 将页的起始地址与线性地址的后十二位相加,得出所需的物理地址。