欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux页表

程序员文章站 2022-03-05 08:26:35
...

        虽然应用程序操作的对象是映射到物理内存之上的虚拟内存,但是处理器直接操作的却是物理内存。所以当应用程序访问一个虚拟地址时,首先必须将虚拟地址转化成物理地址,然后处理器才能解析地址访问请求。地址的转换工作需要通过查询页表才能完成,地址转换需要将虚拟地址分段,使每段虚拟地址都作为一个索引指向页表,而页表项则指向下一级别的页表或指向最终的物理页面。

       Linux中使用三级页表完成地址转换。利用多级页表能够节约地址转换需要占用的存放空间。如果利用三级页表转换地址,即使是64位机器,占用的空间也很有限。但是如果使用静态数组实现页表,那么即便在32位机器上,改数组也将占用巨大的存放空间。Linux对所有的体系结构都使用三级页表管理内存。

       *页表是页全局目录(PGD),它包含了一个pgd_t类型数组,多数体系结构中pgd_t类型等同于无符号长整形类型。PGD中的表项指向二级页目录中的表项:PMD。

        二级页表是中间页目录(PMD),它是个pmd_t类型数组,其中表项指向PTE中的表项。

        最后一级的页表简称页表,其中包含了pte_t类型页表项,该页表项指向物理页面。

        每个进程都有自己的页表,内存描述符的pdg域指向的就是进程的全局目录。操作和检索页表时必须使用page_table_lock锁,该锁在相应的进程的内存描述符中,以防止竞争条件。

Linux页表
            
    
    博客分类: 操作系统  

        由于几乎每次对虚拟内存中的页面访问都必须先解析,从而得到物理内存中的对应地址,所以页表操作的性能非常关键。但是不幸的是,搜索内存中的物理地址速度很有限,因此为了加快搜索,多数体系结构都实现了一个翻译后缓冲器(translate lookaside buffer ,TLB)。TLB作为一个将虚拟地址映射到物理地址的硬件缓存,当请求访问一个虚拟地址时,处理器将首先检查TLB中是否缓存了该虚拟地址到物理地址的映射,如果在缓存中直接命中,物理地址立刻返回,否则就需要再通过页表搜索需要的物理地址。

  • Linux页表
            
    
    博客分类: 操作系统  
  • 大小: 79.6 KB