虽然应用程序操作的对象是映射到物理内存之上的虚拟内存,但是处理器直接操作的却是物理内存。所以当应用程序访问一个虚拟地址时,首先必须将虚拟地址转化成物理地址,然后处理器才能解析地址访问请求。地址的转换工作需要通过查询页表才能完成,地址转换需要将虚拟地址分段,使每段虚拟地址都作为一个索引指向页表,而页表项则指向下一级别的页表或指向最终的物理页面。
Linux中使用三级页表完成地址转换。利用多级页表能够节约地址转换需要占用的存放空间。如果利用三级页表转换地址,即使是64位机器,占用的空间也很有限。但是如果使用静态数组实现页表,那么即便在32位机器上,改数组也将占用巨大的存放空间。Linux对所有的体系结构都使用三级页表管理内存。
顶级页表是页全局目录(PGD),它包含了一个pgd_t类型数组,多数体系结构中pgd_t类型等同于无符号长整形类型。PGD中的表项指向二级页目录中的表项:PMD。
二级页表是中间页目录(PMD),它是个pmd_t类型数组,其中表项指向PTE中的表项。
最后一级的页表简称页表,其中包含了pte_t类型页表项,该页表项指向物理页面。
每个进程都有自己的页表,内存描述符的pdg域指向的就是进程的全局目录。操作和检索页表时必须使用page_table_lock锁,该锁在相应的进程的内存描述符中,以防止竞争条件。
由于几乎每次对虚拟内存中的页面访问都必须先解析,从而得到物理内存中的对应地址,所以页表操作的性能非常关键。但是不幸的是,搜索内存中的物理地址速度很有限,因此为了加快搜索,多数体系结构都实现了一个翻译后缓冲器(translate lookaside buffer ,TLB)。TLB作为一个将虚拟地址映射到物理地址的硬件缓存,当请求访问一个虚拟地址时,处理器将首先检查TLB中是否缓存了该虚拟地址到物理地址的映射,如果在缓存中直接命中,物理地址立刻返回,否则就需要再通过页表搜索需要的物理地址。
相关推荐
### ARM-Linux内存页表的建立 #### 一、概览 本文将深入解析ARM-Linux环境下内存页表的建立过程。重点在于如何通过一系列汇编指令与内核配置参数来构建并初始化ARM架构下的MMU(Memory Management Unit,内存管理...
Linux源码是开源操作系统Linux的核心代码,它展示了操作系统如何与硬件交互、管理资源以及执行各种任务。这个压缩包“linux”很可能包含了Linux内核的部分或全部源代码,这对于理解操作系统的工作原理、进行系统级...
"Linux 内存页表创建详解" Linux 内存页表创建是 Linux 操作系统中一个非常重要的过程,涉及到物理内存、硬件IO、中断等多个方面。下面是对 Linux 内存页表创建的详细讲解。 内存页表的创建是在 Linux 内核代码...
2.3 Linux页表 20 2.4 页分配和回收 21 2.4.1 页分配 22 2.4.2 页回收 22 2.5 内存映射 22 2.6 请求调页 23 2.7 Linux页缓存 24 2.8 页换出和淘汰 25 2.8.1 减少缓冲区和页缓存大小 25 2.8.2 换出System V共享内存页...
2.3 Linux页表 20 2.4 页分配和回收 21 2.4.1 页分配 22 2.4.2 页回收 22 2.5 内存映射 22 2.6 请求调页 23 2.7 Linux页缓存 24 2.8 页换出和淘汰 25 2.8.1 减少缓冲区和页缓存大小 25 2.8.2 换出System V共享内存页...
**3.3 LINUX页表** 页表是虚拟内存管理的关键数据结构,用于映射虚拟地址到物理地址。 **3.4 页面分配与回收** Linux内核通过页面分配器和回收机制,动态地管理物理内存页面的分配和回收。 **3.5 内存映射** ...
3. **Linux页表管理** Linux采用三级页表(PGD、PMD、PTE)机制,将线性地址转换为物理地址。线性地址由全局页目录、中间页目录、页表项和页内偏移四部分组成。通过逐级查询页表,最终确定物理地址。这种机制允许...
Linux页表负责追踪虚拟地址到物理地址的映射。页面分配负责为进程分配物理内存页面,而页面回收则是释放不再需要的内存页面。内存映射涉及将文件内容映射到进程的地址空间中。此外,页面的换入和换出机制允许操作...
2.3 Linux页表 20 2.4 页分配和回收 21 2.4.1 页分配 22 2.4.2 页回收 22 2.5 内存映射 22 2.6 请求调页 23 2.7 Linux页缓存 24 2.8 页换出和淘汰 25 2.8.1 减少缓冲区和页缓存大小 25 2.8.2 换出System V共享内存页...
3. **LINUX页表**: 页表用于映射虚拟地址到物理地址。 4. **页面分配与回收**: - **页面分配**: 当进程需要更多内存时,内核会分配新的页面。 - **页面回收**: 为了释放不再使用的内存,内核会定期回收空闲页面。 ...
2.3 Linux页表 20 2.4 页分配和回收 21 2.4.1 页分配 22 2.4.2 页回收 22 2.5 内存映射 22 2.6 请求调页 23 2.7 Linux页缓存 24 2.8 页换出和淘汰 25 2.8.1 减少缓冲区和页缓存大小 25 2.8.2 换出System V共享内存页...
Linux内核中存储管理是关键部分,包括虚拟内存的抽象模型、高速缓冲、Linux页表、页面分配与回收、内存映射、请求换页和页面缓存等。详细阐述了Linux内核如何有效地管理物理和虚拟内存,包括内存的换页机制和页面...
内存管理 15 2.1 虚拟内存抽象模型 15 2.1.1 请求调页 17 2.1.2 交换 17 2.1.3 共享虚拟内存 18 2.1.4 物理寻址模式和虚拟寻址模式 18 2.1.5 访问控制 18 2.2 高速缓存 19 2.3 Linux页表 20...
2.3 Linux页表 20 2.4 页分配和回收 21 2.4.1 页分配 22 2.4.2 页回收 22 2.5 内存映射 22 2.6 请求调页 23 2.7 Linux页缓存 24 2.8 页换出和淘汰 25 2.8.1 减少缓冲区和页缓存大小 25 2.8.2 换出System V共享内存页...
- **LINUX页表**:解释Linux内核中的页表结构。 - **页面分配与回收**: - **页面分配**:讲解页面分配的过程和策略。 - **页面回收**:介绍页面回收机制如何避免内存泄漏。 - **内存映射**:探讨内存映射技术的...
- **Linux页表**:深入分析了Linux如何通过页表实现内存的虚拟化管理。 - **页面分配与回收**:详细说明了Linux如何高效地分配和回收内存页面。 - **内存映射**:探讨了不同类型的内存映射技术及其应用场景。 #####...