[转帖]Linux:页表中PGD、PUD、PMD、TLB等概念介绍

linux,页表,pgd,pud,pmd,tlb,概念,介绍 · 浏览次数 : 0

小编点评

**1. PGD (Page Global Directory)** * 是一个包含页表项的物理页面,包含页表项数组、页目录项数组、页中表项数组。 * 每个进程有自己的 PGD,用于存储该进程的页面目录信息。 **2. TLB (Translation Lookaside Buffer)** * 是一个缓存页表文件的内存,存放逻辑地址到物理地址的转换信息。 * 命中TLB时,可以快速找到页框号,从而获得最终的物理地址。 * 否则,需要通过常规页表查询。 **3. 进程虚拟空间** * 每个进程有它自己的 PGD,包含用户空间和系统空间的页面目录信息。 * 用户空间用于存储进程的代码和数据。 * 系统空间用于存储内核代码和数据。 **4. PUD (Page Upper Directory)** * 是一个包含页目录项的页面,包含所有进程和内核共享的页面目录信息。 * 每个进程有一个 PUD,包含它所需的所有 Page 的地址。 **5. PGD 中的 PUD 和 PMD** * PUD 存储了所有进程的 Page 的地址。 * PMD 存储了所有进程和内核共享的 Page 的地址。 **6. TLB 的分组** * 为了提高性能,TLB 通常分为多个组,以减少内存访问的开销。

正文

1、PGD: Page Global Directory
       Linux系统中每个进程对应用户空间的pgd是不一样的,但是linux内核 的pgd是一样的。当创建一个新的进程时,都要为新进程创建一个新的页面目录PGD,并从内核的页面目录swapper_pg_dir中复制内核区间页面目录项至新建进程页面目录PGD的相应位置,具体过程如下:do_fork() --> copy_mm() --> mm_init() --> pgd_alloc() --> set_pgd_fast() --> get_pgd_slow() --> memcpy(&PGD + USER_PTRS_PER_PGD, swapper_pg_dir +USER_PTRS_PER_PGD, (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t))
         这样一来,每个进程的页面目录就分成了两部分,第一部分为“用户空间”,用来映射其整个进程空间(0x0000 0000-0xBFFF FFFF)即3G字节的虚拟地址;第二部分为“系统空间”,用来映射(0xC000 0000-0xFFFF FFFF)1G字节的虚拟地址。可以看出Linux系统中每个进程的页面目录的第二部分是相同的,所以从进程的角度来看,每个进程有4G字节的虚拟空间,较低的3G字节是自己的用户空间,最高的1G字节则为与所有进程以及内核共享的系统空间。每个进程有它自己的PGD( Page Global Directory),它是一个物理页,并包含一个pgd_t数组。
关键字:
             PTE:  页表项(page table entry)
             PGD(Page Global Directory)
             PUD(Page Upper Directory)
             PMD(Page Middle Directory)
             PT(Page Table)

PGD中包含若干PUD的地址,PUD中包含若干PMD的地址,PMD中又包含若干PT的地址。每一个页表项指向一个页框,页框就是真正的物理内存页。

2、TLB

        Translation lookaside buffer,即旁路转换缓冲,或称为页表缓冲;里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。又称为快表技术。如果匹配到逻辑地址就可以迅速找到页框号(页框号可以理解为页表项),通过页框号与逻辑地址的后12位的偏移自合得到最终的物理地址。如果没在TLB中匹配到逻辑地址,就出现TLB不命中(TLB Misss),需要通过常规的页表查询。如果TLB足够大,那么这个转换就会变得迅速。但是事实是TLB的容量非常小,一般都是几十项到几百项不等。
       在有些的处理器架构中,为了提供效率,还将TLB进行分组,以X86架构为例,一般都分为以下四个组:
       第一组:缓存一般页表(4KB页面)的指令页表缓存(Instruction-TLB)
       第二组:缓存一般页表(4KB页面)的数据页表缓存(Data-TLB)
       第三组:缓存大尺寸页表(2MB/4M页B面)的指令页表缓存(Instruction-TLB)    
       第四组:缓存大尺寸页表(2MB/4MB页面)的数据页表缓存(Data-TLB)
       举一个例子:假设一个应用程序需要使用8KB的物理内存,如果使用常规页(4KB)并且使TLB总能命中,那么至少需要在TLB表中存放两个表项,在这种情况下,只要寻址的内容都在该内容页内,那么只要两个表项就足够了。如果该应用程序需要使用512个内容页也就是2MB大小,那么需要512个页表表项才能保证不会出现TLB不命中的情况。但是TLB容量有限,随着程序的变大或者使用内存的增加,那么势必会增加TLB的使用项,最后导致TLB出现不命中的情况。此时,大页的优势就显示出来了,如果使用2MB作为分页的基本单位,那么只需要一个页表项就可以保证不出现TLB不命中的情况;对于消耗内存以GB(2^30)为单位的大型程序,可以采用1GB为单位作为分页的基本单位,减少TLB不命中的情况。
 

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux29068 人正在系统学习中

与[转帖]Linux:页表中PGD、PUD、PMD、TLB等概念介绍相似的内容:

[转帖]Linux:页表中PGD、PUD、PMD、TLB等概念介绍

1、PGD: Page Global Directory Linux系统中每个进程对应用户空间的pgd是不一样的,但是linux内核 的pgd是一样的。当创建一个新的进程时,都要为新进程创建一个新的页面目录PGD,并从内核的页面目录swapper_pg_dir中复制内核区间页面目录项至新建进程页面目

[转帖]linux性能优化-内存回收

linux文件页、脏页、匿名页 缓存和缓冲区,就属于可回收内存。它们在内存管理中,通常被叫做文件页(File-backed Page)。通过内存映射获取的文件映射页,也是一种常见的文件页。它也可以被释放掉,下次再访问的时候,从文件重新读取。 大部分文件页,都可以直接回收,以后有需要时,再从磁盘重新读

[转帖]Linux下curl用法详解

https://zhuanlan.zhihu.com/p/430490147 Curl(CommandLine Uniform Resource Locator),即在命令行中利用URL进行数据或者文件传输,它是Linux下强大的http命令行工具,其功能十分强大,我们来看下帮助页面,参数非常丰富。

[转帖]Linux 内核内存性能调优的一些笔记

https://my.oschina.net/u/6150560/blog/7759034 一、前言 在工作生活中,我们时常会遇到一些性能问题:比如手机用久了,在滑动窗口或点击 APP 时会出现页面反应慢、卡顿等情况;比如运行在某台服务器上进程的某些性能指标(影响用户体验的 PCT99 指标等)不达

[转帖]Linux性能优化和内核观测 - 内存篇(一)

内存虚拟内存Linux 采用的是​​虚拟内存​​机制,每个进程都有自己的虚拟内存地址空间,仅当实际使用内存的时候才会映射到物理内存地址之上。这种设计提供了物理内存的超额分配,Linux 中的内存管理机制包括页换出守护进程(page out daemon)、物理换页设备(swap device),以及

[转帖]Linux 6种网络IO模型

https://www.jianshu.com/p/c5aa9197ecf4 背景 大多数文件系统的默认 IO 操作都是缓存 IO,又被称作标准IO。在 Linux 的缓存 IO 机制中,操作系统会将 IO 的数据缓存在文件系统的页缓存(page cache )中,也就是说,数据会先被拷贝到操作系统

[转帖]Linux 页表、大页与透明大页

一、 内存映射与页表 1. 内存映射 我们通常所说的内存容量,指的是物理内存,只有内核才可以直接访问物理内存,进程并不可以。 Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。 虚拟地址空间的内部又被分为内

[转帖]Linux 页表、大页与透明大页

一、 内存映射与页表 1. 内存映射 我们通常所说的内存容量,指的是物理内存,只有内核才可以直接访问物理内存,进程并不可以。 Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。 虚拟地址空间的内部又被分为内

[转帖]Linux 写时复制技术

https://www.cnblogs.com/dwtfukgv/p/15125933.html 目录 Linux fork Linux exec Linux 进程虚拟地址空间 栈 内存映射段 堆 BSS段 数据段 代码段 分段的优点 页表 写时复制原理 非写时复制fork一个子进程 写时复制for

[转帖]Linux 调优篇:虚拟化调优(hugepage 大页内存)* 叁

一. 大页(HugePages)概念 Hugepage的引入二. hugepages相关概念三.Regular Pages 与 HugePages a、Regular Pages b、Huge Pages四. hugepage 优点五.调优方法 5.1 在Host侧查看各个numa节点上的大页分配情