0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

虚拟机:linux高端内存管理之永久内核映射

如意 来源:CSDN 作者:CaspianSea 2020-06-23 08:38 次阅读

与直接映射的物理内存末端、高端内存的始端所对应的线性地址存放在high_memory变量中,在x86体系结构上,高于896MB的所有物理内存的范围大都是高端内存,它并不会永久地或自动地映射到内核地址空间,尽管x86处理器能够寻址物理RAM的范围达到4GB(启用PAE可以寻址到64GB)。一旦这些页被分配,就必须in射到内核的逻辑地址空间上。在x86上,高端内存中的页被映射到3GB-4GB。

内核可以采用三种不同的机制将页框映射到高端内存;分别叫做永久内核映射、临时内核映射以及非连续内存分配。在这里,只总结前两种技术,第三种技术将在后面总结。

建立永久内核映射可能阻塞当前进程;这发生在空闲页表项不存在时,也就是在高端内存上没有页表项可以用作页框的“窗口”时。因此,永久内核映射不能用于中断处理程序和可延迟函数。相反,建立临时内核映射绝不会要求阻塞当前进程;不过,他的缺点是只有很少的临时内核映射可以同时建立起来。

使用临时内核映射的内核控制路径必须保证当前没有其他的内核控制路径在使用同样地映射。这意味着内核控制路径永远不能被阻塞,后者其他内核控制路径有可能使用同一个窗口来映射其他的高端内存页。

永久内存映射

永久内核映射允许内核建立高端页框到内核地址空间的长期映射。他们使用住内核页表中一个专门的页表,其地址存放在变量pkmap_page_table中,这在前面的页表机制管理区初始化中已经介绍过了。页表中的表项数由LAST_PKMAP宏产生。因此,内核一次最多访问2MB或4MB的高端内存。

虚拟机:linux高端内存管理之永久内核映射

该页表映射的线性地址从PKMAP_BASE开始。pkmap_count数组包含LAST_PKMAP个计数器,pkmap_page_table页表中的每一项都有一个。

高端映射区逻辑页面的分配结构用分配表(pkmap_count)来描述,它有1024项,对应于映射区内不同的逻辑页面。当分配项的值等于0时为自由项,等于1时为缓冲项,大于1时为映射项。映射页面的分配基于分配表的扫描,当所有的自由项都用完时,系统将清除所有的缓冲项,如果连缓冲项都用完时,系统将进入等待状态。

虚拟机:linux高端内存管理之永久内核映射

为了记录高端内存页框与永久内核映射包含的线性地址之间的联系,内核使用了page_address_htable散列表。该表包含一个page_address_map数据结构,用于为高端内存中的每一个页框进行当前映射。而该数据结构还包含一个指向页描述符的指针和分配给该页框的线性地址。

page_address()函数返回页框对应的线性地址

虚拟机:linux高端内存管理之永久内核映射

kmap()函数建立永久内核映射。

虚拟机:linux高端内存管理之永久内核映射

kunmap()函数撤销先前由kmap()建立的永久内核映射

虚拟机:linux高端内存管理之永久内核映射

虚拟机:linux高端内存管理之永久内核映射


如果页确实在高端内存中,则调用kunmap_high()函数

虚拟机:linux高端内存管理之永久内核映射

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10986

    浏览量

    206712
  • 内存
    +关注

    关注

    8

    文章

    2762

    浏览量

    72742
  • 虚拟机
    +关注

    关注

    1

    文章

    854

    浏览量

    27365
收藏 人收藏

    评论

    相关推荐

    Linux内存管理是什么,Linux内存管理详解

    Linux内存管理 Linux内存管理是一个非常复杂的过程,主要分成两个大的部分:
    的头像 发表于 05-11 17:54 5278次阅读
    <b class='flag-5'>Linux</b>的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>是什么,<b class='flag-5'>Linux</b>的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>详解

    Linux内核内存映射原理分析

    Linux 内核采用延迟分配物理内存的策略,在进程第一次访问虚拟页的时候,产生缺页异常。如果是文件映射,那么分配物理页,把文件指定区间的数据
    发表于 07-21 17:06 2174次阅读

    Linux内核内存管理详解

    内存管理的主要工作就是对物理内存进行组织,然后对物理内存的分配和回收。但是Linux引入了虚拟
    发表于 08-31 14:46 425次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>详解

    Linux内核地址映射模型与Linux内核高端内存详解

    Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当
    发表于 05-08 10:33 3326次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>地址<b class='flag-5'>映射</b>模型与<b class='flag-5'>Linux</b><b class='flag-5'>内核</b><b class='flag-5'>高端</b><b class='flag-5'>内存</b>详解

    高效运行Linux虚拟机的六大技巧

    如何更高效地运行Linux虚拟机,下面推荐一些技巧和实用方法。Linux在企业数据中心已经盛行多年。LAMP服务、Web服务器、代理服务器、防火墙和负载平衡器,只是Linux为基本操作
    发表于 11-20 14:55

    手把手教你安装Linux虚拟机

    虚拟机。所谓虚拟机,就是在你已有的电脑里再虚拟出一个或多个电脑,可以理解为电脑中的电脑。比如说,你可以在虚拟机里安装一个Window电脑,或者安装一个
    发表于 05-13 11:47

    Linux内存系统---走进Linux 内存

    域由内核函数 vmalloc 来分配· 永久内存映射区:该区域可访问高端内存· 固定
    发表于 08-26 08:05

    ARM32 Linux内存布局

    ,若都被占用不释放,则没有建立映射到物理内存都无法访问了。2. Linux内核高端内存的划分对于
    发表于 04-24 14:20

    Linux虚拟内存和物理内存的深刻分析

    能够映射的物理内存大小只有896MB,该值保存在high_memory中。内核地址空间的线性地址区间如下图所示:​ 从图中可以看出,内核采用了三种机制将
    发表于 05-31 08:00

    浅析linux内存映射原理

    内存映射,简而言之就是将用户空间的一段内存区域映射内核空间,映射成功后,用户对这段
    发表于 08-24 09:35 1476次阅读
    浅析<b class='flag-5'>linux</b><b class='flag-5'>内存</b><b class='flag-5'>映射</b>原理

    内存虚拟化的类型 内存虚拟化技术实现的几种方法

    内存虚拟化的类型 内存虚拟化有两种类型:基于软件的内存虚拟化和硬件辅助的
    的头像 发表于 08-05 11:50 6389次阅读

    Linux内核虚拟内存管理中的mmu_gather操作

    本文讲解Linux内核虚拟内存管理中的mmu_gather操作,看看它是如何保证刷tlb和释放物理页的顺序的,又是如何将更多的页面聚集起来统一释放的。
    的头像 发表于 05-20 14:37 1599次阅读

    KVM虚拟机管理和基本使用

    KVM — 全称是基于内核虚拟机(Kernel-based Virtual Machine)是一个开源软件,基于内核虚拟化技术,实际是嵌入系统的一个
    的头像 发表于 02-07 09:20 799次阅读

    Linux 内存管理总结

    一、Linux内存管理概述 Linux内存管理是指对系统内存
    的头像 发表于 11-10 14:58 239次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>内存</b><b class='flag-5'>管理</b>总结

    怎么安装linux虚拟机

    在计算机领域,虚拟机是一种软件程序,它允许在主操作系统上运行多个虚拟操作系统。Linux虚拟机在开发、测试和学习等环境中得到广泛应用。本文将详细介绍如何安装
    的头像 发表于 11-23 10:50 609次阅读