第十学 linux内核——内存寻址——分页机制(2)
2013-05-17 10:19
267 查看
前面我们提到linux是如何把程序的逻辑地址通过摒弃段机制直接映射到线性地址空间,这节我们讨论linux如何实现线性地址到物理地址的映射。
我们强调过linux如何致力于做出一个强大的可移植系统。linux为了可移植,采用了三级分页模式,以支持一些64位机。于是linux定义了以下三种类型的页表:
页总目录(PGD)、页中间目录(PMD)、页表(PT)。linux的三级分页看起来是这样:(图片来自《linux操作系统原理与应用(陈莉君)》)
跟我们前边提到的两级分页原理一样。
x86是支持两级目录的,那如果我们要把linux的三级分页模式移植到这样一个结构上要怎么做呢?
linux同样有非常巧妙的办法。
我们说每一个进程都有自己的页目录和页表集,当进程切换发生时,linux把CR3控制寄存器的内容保存在前一个执行进程的PCB中,然后把下一个进程PCB中CR3的值装入CR3,这样我们就能正确的找到自己在物理内存中的地址。
linux把PMD(页中间目录)看做只有一项的表,并把它存在PGD表项中,页表的中间目录被巧妙的折叠到页表总目录中,从而适应二级页表。
我们强调过linux如何致力于做出一个强大的可移植系统。linux为了可移植,采用了三级分页模式,以支持一些64位机。于是linux定义了以下三种类型的页表:
页总目录(PGD)、页中间目录(PMD)、页表(PT)。linux的三级分页看起来是这样:(图片来自《linux操作系统原理与应用(陈莉君)》)
跟我们前边提到的两级分页原理一样。
x86是支持两级目录的,那如果我们要把linux的三级分页模式移植到这样一个结构上要怎么做呢?
linux同样有非常巧妙的办法。
我们说每一个进程都有自己的页目录和页表集,当进程切换发生时,linux把CR3控制寄存器的内容保存在前一个执行进程的PCB中,然后把下一个进程PCB中CR3的值装入CR3,这样我们就能正确的找到自己在物理内存中的地址。
linux把PMD(页中间目录)看做只有一项的表,并把它存在PGD表项中,页表的中间目录被巧妙的折叠到页表总目录中,从而适应二级页表。
相关文章推荐
- 第九学 linux内核——内存寻址——分页机制(1)
- 第九学 linux内核——内存寻址——分页机制(1)
- 第八学 linux内核——内存寻址——段机制(2)
- Linux内存寻址之分段机制及分页机制
- 内存寻址(二):linux中的分段与分页机制
- 内存寻址(一)硬件寻址的基本原理:硬件中的分段和分页机制,控制寄存器CR0与CR3
- Linux 内存寻址之分页机制
- 第八学 linux内核——内存寻址——段机制(2)
- 第八学 linux内核——内存寻址——段机制(2)
- 第七学 linux内核——内存寻址——段机制(1)
- Linux内存寻址之分段机制及分页机制【转】
- Linux内存寻址之分页机制
- 深入理解计算机系统-之-内存寻址(六)--linux中的分页机制
- 深入理解计算机系统-之-内存寻址(三)--分段管理机制(段描述符,段选择子,描述符表)
- 二、内存寻址(分页)
- Intel X86 CPU 系列的寻址方式与段式内存管理机制
- Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型
- 深入详解保护模式下的内存分页机制
- linux内核设计与实现--内存寻址
- 内存寻址(一)硬件寻址的基本原理:硬件中的分段和分页机制,控制寄存器CR0与CR3