加入收藏 | 设为首页 | 会员中心 | 我要投稿 新余站长网 (https://www.0790zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 空间 > 正文

聊一聊Linux虚拟内存技术

发布时间:2019-03-20 22:39:56 所属栏目:空间 来源:Yngz_Miao
导读:以存储单元为单位来管理显然不现实,因此Linux把虚存空间分成若干个大小相等的存储分区,Linux把这样的分区叫做 页。为了换入、换出的方便,物理内存也就按页的大小分成若干个块。由于物理内存中的块空间是用来容纳虚存页的容器,所以物理内存中的块叫做

需要注意的是,页表是操作系统创建的用于内存管理的表格。因此,一个程序在运行时,其页表也要存放到内存空间。如果一个程序只需要一个页表,则不会有什么问题。但如果,程序的虚拟空间很大的话,就会出现一个比较大的问题。

比如:一个程序的虚拟空间为4GB,页表以4KB为一页,那么这个程序空间就是1M页。为了存储这1M页的页指针,那么这个页表的长度就相当大了,对内存的负担也很大了。所以,最好对页表也进行分页存储,在程序运行时只把需要的页复制到内存,而暂时不需要的页就让它留在辅存中。为了管理这些页表页,还要建立一个 记录页表页首地址的页目录表,于是单级页表就变成了二级页表。二级页表的地址转换如下图所示:

当然,如果程序的虚拟空间更大,那么也可以用三级页表来管理。为了具有通用性,Linux系统使用了三级页表结构:页目录(Page Directory,PGD)、中间页目录(Page Middle Directory,PMD)、页表(Page Table,PTE)。

Linux的页表结构

为了通用,Linux系统使用了三级页表结构:页目录、中间页目录和页表。PGD为 顶级页表,是一个pgdt数据类型的数组,每个数组元素指向一个中间页目录;PMD为 二级页表,是一个pmdt数据结构的数组,每个数组元素指向一个页表;PTE则是 页表,是一个pte_t数据类型的数组,每个元素中含有物理地址。

为了应用上的灵活,Linux使用一系列的宏来掩盖各种平台的细节。用户可以在配置文件 config中根据自己的需要对页表进行配置,以决定是使用三级页表还是使用二级页表。

在系统编译时,会根据配置文件 config中的配置,把目录 include/asm符号连接到具体CPU专用的文件目录中。例如,对于i386CPU,该目录符号会连接到include/asm-i386,并在文件pgable-2level-defs.h中定义了二级页表的基本结构,如下图:

其中还定义了:

  1. #define PGDIR_SHIFT  22 //PGD在线性地址中的起始地址为bit22 
  2. #define PTRS_PER_PGD  1024  //PGD共有1024个表项 
  3.                       
  4. #define PTRS_PER_PTE  1024  //PTE共有1024个表项 
  5. #endif 

在文件include/asm-i386/pgtable.h中定义了页目录和页表项的数据结构,如下:

  1. typedof struct { unsigned long pte_low; }  pte_t ;                     //页表中的物理地址,页框码 
  2. typedof struct { unsigned long pgd; }  pgd_t ;                         //指向一个页表 
  3. typedof struct { unsigned long pgprot; }  pgprot_t ;                   //页表中的各个状态信息和访问权限 

从定义可知,它们都是只有一个 长整型类型(32位)的结构体。

注意:如上文的“页的保护”部分,页框码代表物理地址,只需要高20位就够了(因为页框的长度为4KB,因此页内偏移12位)。而后12位可以存放各个状态信息和访问权限。但是Linux并没有这样做,反而重新定义了一个结构体来存放,通过“或”运算来将两者结合。

【编辑推荐】

  1. 核心基础:理解何为JVM?掌握Java虚拟机构成精髓
  2. 服务器虚拟化技术深度科普
  3. VMware 虚拟化平台规划设计方案
  4. Linux系统的虚拟内存原来这么坑!
  5. 程序员从宏观、微观角度浅析JVM虚拟机!
【责任编辑:武晓燕 TEL:(010)68476606】
点赞 0

(编辑:新余站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读