首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

系统内存管理:虚拟内存内存分段与分页、缓存TLB以及Linux内存管理

内存分页内存分页是将整个虚拟和物理内存空间划分为固定大小的连续内存块,称为(Page)。在Linux下,每一的大小通常为4KB。...虚拟地址与物理地址之间通过进行映射,存储在CPU的内存管理单元(MMU)中,从而CPU可以直接通过MMU找到实际访问的物理内存地址。...这是因为程序执行过程中,访问的表项相对固定。通过利用TLB,可以大大提高地址转换的速度,加快程序的执行效率。Linux内存管理Linux内存管理涉及逻辑地址和线性地址的转换。...逻辑地址是程序使用的地址,而线性地址是通过段式内存管理映射的地址,也称为虚拟地址。Linux的虚拟地址空间分为内核空间和用户空间两部分。...Linux内存管理涉及逻辑地址和线性地址的转换,将虚拟地址空间分为内核空间和用户空间,方便进程访问内核空间内存。我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

68180

Linux-3.14.12内存管理笔记【建立内核(3)

前面已经分析了内核的准备工作以及内核低端内存的建立,接着回到init_mem_mapping()中,低端内存建立后紧随着还有一个函数early_ioremap_page_table_range_init...,是从缓冲空间中申请还是通过memblock算法申请内存。...,创建并使其指向被创建的。...为了避免前期可能对固定映射区已经分配了表项,基于临时内核映射区间要求连续性的保证,所以在此重新申请连续的空间将原内容拷贝至此。...值得注意的是,与低端内存初始化不同的是,这里的只是被分配,相应的PTE项并未初始化,这个工作将会交由以后各个固定映射区部分的相关代码调用set_fixmap()来将相关的固定映射区与物理内存关联

1.5K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux-3.14.12内存管理笔记【建立内核(1)】

    前面已经分析过了Intel的内存映射和linux的基本使用情况,已知head_32.S仅是建立临时,内核还是要建立内核,做到全面映射的。...建立内核前奏,了解两个很关键的变量: max_pfn:最大物理内存页面帧号; max_low_pfn:低端内存区(直接映射空间区的内存)的最大可用帧号; max_pfn 的值来自setup_arch...Linux是一个支持多硬件平台的操作系统,各种硬件芯片的分页并非固定的2级(全局目录和),仅仅Intel处理器而言,就存在3级的情况(全局目录、中间目录和),而到了64位系统的时候就成了4...所以Linux为了保持良好的兼容性和移植性,系统设计成了以下的4级分页模型,根据平台环境和配置的情况,通过将上级目录和中间目录的索引位设置为0,从而隐藏了三级目录和中间目录的存在。...由此管中窥豹,看到了Linux内存分页映射模型的存在和相关设计,暂且也就先了解这么多。 分析宏是一件很乏味的事情,不过以小见大却是一件很有意思的事情。

    1.8K41

    Linux 内核 内存管理内存管理架构 ③ ( Linux 内核中的内存管理模块 | 分配器 | 不连续分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 缓存 | 高速缓存 )

    文章目录 一、Linux 内核中的内存管理模块 二、硬件设备内存管理 一、Linux 内核中的内存管理模块 ---- Linux 内核还需要处理如下内容 : ① 错误异常处理 ② 管理 ③ 引导内存分配器...: 分配器 , 块分配器 , 不连续分配器 , 连续内存分配器 , 每处理器内存分配器 ; " 分配器 " 负责分配 内存物理 , 使用的是 " 伙伴分配器 " ; " 不连续分配器 " 提供了...: 控制管理 被 进程 占用的 内存 ; 碎片整理 : 如果 " 内存碎片化 " 严重 , 没有连续物理 , 需要通过 整理内存碎片 并迁移数据 得到 连续的 物理 ; 内存回收 : 内存不足时 ,...回收内存 ; ⑦ 回收处理 二、硬件设备内存管理 ---- 硬件设备内存管理 : ① CPU 处理器 中的 " 内存管理单元 " ( MMU ) 和 高速缓存 ; ② 物理内存 在 " 内存管理单元..." ( MMU ) 中 , 还有一个 " 缓存 " ; 缓存 中缓存了 最近使用的 " 映射 “ , 该映射的作用是 将 ” 物理地址 " 映射为 " 虚拟地址 " ; CPU 处理器

    1.5K40

    内存管理映射基础知识

    Linux内核关于的函数 Linux内核中操作的宏定义 Linux内核中封装了很多宏来处理 #define pgd_offset_k(addr) pgd_offset(&init_mm,addr...传入初始内存管理结构体init_mm、映射描述结构体md、早期内存分配函数early_alloc,以及false标志。...,vma应该存在对应物理内存映射,不应该再发生page fault 调用pte_alloc函数来为页面表表项(PTE)分配内存,并传递vma->vm_mm和vmf->pmd作为参数 如果页面错误不是写操作且内存管理子系统允许使用零...,则映射到零面 生成一个特殊表项,映射到专有的0,一大小 据pmd,address找到pte对应的一个表项,并且lock住 如果表项不为空,则调用update_mmu_tlb函数更新内存管理单元...Linux内核的内存管理已经适配了X86的表项,我们可以通过软件适配的办法来解决这个问题。因此,ARM公司在移植该方案时提出了两套的方案。

    16910

    内核知识第八讲,PDE,PTE,目录,内存管理

    内核知识第八讲,PDE,PTE,目录,内存管理 一丶查看GDT....详情请看 https://www.cnblogs.com/hongfei/archive/2013/06/18/3142162.html 转载 三丶分页管理机制 讲解分页管理机制之前,我们要明白以下几个关键词的意思...我们说过,操作系统为了隔离内存.采用了分页管理.而我们线性地址转化到物理地址的时候. 则需要查表. 那么我们觉着这个应该怎么做?...但是通过两个查询.可以映射4G内存.而上面的设计方法不行. 首先前边20位保存了或者物理地址的基地址. 比如我们的目录. 查到了第5项.那么从中取出千20位来,加上000就等于了. ...有没有发现,我们的Ring3程序.不过是那个内存区域也好.都是可以读的. 而我们Ring3下的修改内存分页保护属性,其实就是将这个的这个RW位进行置位. 而我们的虚拟地址当作下表进行查表.

    1.6K10

    DPDK巨地址管理Linux内核内存管理内存映射pagemaprdma内存注册

    DPDK巨地址管理/Linux内核内存管理/内存映射/pagemap/rdma内存/注册术语PFN: 物理地址对应的帧号:pfn = pte_pfn(*pte)INFINIBAND_USER_MEM...HMC 在每个 PCI 功能的基础上管理主机内存,并进一步将每个 PCI 功能的 HMC 内存空间分解为用于管理用于给定 PCI 功能的每个上下文对象的内存。...总共 8 GB(4096个SD * 2MB = 8GB) 专用内存地址空间是使用完全填充的段描述符导出的,该指向保存 2M PD 的 4096 个 4KB 主机。...:起始地址:结束地址:为树的每个级别调用的回调集递归地遍历 VMA 中内存区域的,调用提供的回调。.../man-pages/man2/mmap.2.htmldpdk内存管理/原理/大管理及申请/使用: https://blog.csdn.net/qq_20679687/article/details/

    63410

    Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理 page 简介 | 物理 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理 page 联系 )

    文章目录 一、物理 page 简介 1、物理 page 引入 2、物理 page 与 MMU 内存管理单元 3、物理 page 结构体 4、Linux 内核源码中的 page 结构体 二、内存节点...pglist_data 与 物理 page 联系 内存管理系统 3 级结构 : ① 内存节点 Node , ② 内存区域 Zone , ③ 物理 Page , Linux 内核中 , 使用 上述..., 就是 " 内存区域 " zone , " 内存区域 " 再向下划分 , 就是 " 物理 " page ; 2、物理 page 与 MMU 内存管理单元 在 Linux 内核中 , MMU 内存管理单元...结构体 " 物理 " page 是 Linux 内核 " 内存管理 " 中的 最小单位 , 物理 中的 " 物理地址 " 是连续的 , 每个 " 物理 " 使用 struct page 结构体...SPARSEMEM */ // 描述数组 struct page *node_mem_map; #endif } 参考 【Linux 内核 内存管理】物理内存组织结构 ③ ( 内存管理系统三级结构

    6.8K10

    Linux内存分配策略

    伙伴系统分配算法 在上一节, 我们介绍了Linux内核怎么管理系统中的物理内存....但有时候内核需要分配一些物理内存地址也连续的内存, 所以Linux使用了 伙伴系统分配算法 来管理系统中的物理内存....在Linux内核中, 把两个物理地址相邻的内存当作成伙伴, 因为Linux是以页面号来管理内存的, 所以就是说两个相邻页面号的页面是伙伴关系....上一节我们介绍过内存管理区数据结构 struct zone_struct, 在内存管理区数据结构中有个名为 free_area 类型为 free_area_t 的字段, 他的作用就是用来管理内存管理区内的空闲物理内存...Linux内核使用 free_area[i] 管理 2i 个内存页面大小的内存块列表.

    3.3K10

    Linux 内核 内存管理】物理释放 ( 物理释放 __free_pages 函数 )

    文章目录 一、物理释放 __free_pages 函数 一、物理释放 __free_pages 函数 ---- 分配器 提供了 释放 物理的 函数 __free_pages , 该函数定义在 Linux...内核源码的 linux-4.12\mm\page_alloc.c#4083 位置 ; __free_pages 函数参数分析 : struct page *page 参数 表示 要释放的 物理 page...的 虚拟空间地址 ; unsigned int order 参数 表示 要释放的 物理 的 " 阶数 " , 也就是 要释放的物理大小 ; 阶 ( Order ) : 物理 的 数量单位 ,...n 阶块 指的是 2^n 个 连续的 " 物理 " ; 参考 【Linux 内核 内存管理】伙伴分配器 ① ( 伙伴分配器引入 | 块、阶 | 伙伴 ) __free_pages 函数源码...order == 0) free_hot_cold_page(page, false); else __free_pages_ok(page, order); } } 源码路径 : linux

    12.7K20

    Linux内核管理-那些鲜为人知的秘密

    1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 通用操作系统,通常都会开启mmu来支持虚拟内存管理...,而管理是在虚拟内存管理中尤为重要,本文主要以回答几个管理中关键性问题来解析Linux内核管理,看一看管理中那些鲜为人知的秘密。...Linux内核为何使用多级?...2)使用多级结构优劣: 优势: 1.节省内存 2.可以按需分配各级 3.可以离散存储 劣势: 需要遍历多级,需要多次访问内存,实现复杂度高点 3)Linux内核综合考虑: 典型的以时间换空间...1)应用程序 访问虚拟内存即可如执行指令、读写内存, 没有权限管理 不管虚拟内存如何转换为物理内存,对应用来说透明。

    1.8K22

    高端内存映射之vmalloc分配内存中不连续的--Linux内存管理(十九)

    分配到其中的可能位于物理内存中的任何地方. 通过修改负责该区域的内核, 即可做到这一点. ? ?...因为用于vmalloc的内存总是必须映射在内核地址空间中, 因此使用ZONE_HIGHMEM内存域的要优于其他内存域. 这使得内核可以节省更宝贵的较低端内存域, 而又不会带来额外的坏处....接下来从物理内存分配各个 最后将这些连续地映射到vmalloc区域中, 分配虚拟内存的工作就完成了....unmap_vm_area使用找到的vm_area实例,从删除不再需要的项。与分配内存时类似,该函 数需要操作各级,但这一次需要删除涉及的项。它还会更新CPU高速缓存。...然后对每一项调用__free_page,将释放 到伙伴系统。 最后,必须释放用于管理内存区的内核数据结构。

    3K10

    Linux - Linux内存管理

    移除交换空间 ---- 概念 内存管理Linux系统重要的组成部分。...为了解决内存紧缺的问题,Linux引入了虚拟内存的概念。为了解决快速存取,引入了缓存机制、交换机制等。...当需要用到原始内容时,这些信息会被重新从交换空间读入物理内存Linux内存管理采取的是分页存取机制。...要深入了解Linux内存运行机制,需要知道下面提到的几个方面。 首先,Linux系统会不时地进行页面交换操作,以保持尽可能多的空闲物理内存。...其次,Linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存中,Linux内核根据“最近最经常使用”算法,仅仅将一些不经常使用的页面文件交换到虚拟内存中。

    52.3K41

    Linux内存管理

    本篇介绍 本篇介绍下Linux内存管理,用系统角度看内存的寻址和分配机制。 内容介绍 内存管理应该是系统中最难的模块之一了,而且历史也悠久,就先来简单回顾下。...分页把地址空间按照框来管理,一般是4k,也有其他款式的,总之要和物理内存框大小匹配上。这样内存就按照框的粒度来管理就好了。...再看下内存访问过程,首先虚拟地址和段索引经过分段机制得到了线性地址,如果没有分页的话,此时的线性地址就是物理地址,有分页的话,就需要走分页地址了,首先有一个中会记录线性地址和物理地址的映射关系...分页机制只是将内存管理的粒度变小了,不过还是不能完全避免内存碎片问题,只是目前的内存碎片一定会小于框大小,比起之前的方案已经改进很多了。...物理内存管理 在内核中物理内存是按管理的,每个框对应一个page结构,定义如下: struct page { unsigned long flags; /* Atomic flags

    13.7K51

    Linux 内存管理

    操作系统内存管理包括物理内存管理和虚拟内存管理:       我们这篇主要介绍Linux的虚拟内存管理。...在linux内核,虚拟地址是3G-4G这段地址,它与物理地址通过来映射,逻辑地址是指3G-3G+main_memory_size这段虚拟地址,它与物理地址的映射是线性的,当然也可以通过映射。...并且提供段 内分页管理机制 .   为 Linux虚拟内存管理机制提供了支持 。        ...图2        Linux采用两级结构—— 目录实现地址 映射. 当前正在运行进程的 目录的地址被保存在控制寄  存器 CR3 中。  ...六.分页机制管理 ----          Linux使用分页管理机制来更加有效地利用物理内存.当创建一个进程时.仅仅把当前进程的一小部分真正装入内 存.其余部分需要访问时.处理器产生一个故障.由缺页中断服务程序根据缺页虚拟地址和出错码调用写拷贝函数

    7.7K10

    Linux申请大内存(mmap)

    ---- 1.为什么要使用大内存   了解操作系统内存管理的人一般都知道操作系统对内存采用多级和分页进行管理,操作系统每个默认大小为4KB。...如果进程使用的内存过大,比如1GB,这样会在中占用 1GB / 4KB = 262144个表项,而系统TLB可以容纳的表项远小于这个数量。...操作系统默认支持的大是2MB,当使用1GB内存时,在中将占用 1GB / 2MB = 512个表项,可以大大提升TLB命中率,进而提升应用性能。...---- 2.怎样使用大内存 2.1 先预留一定量的大内存 #先查看系统有多少已经预留的大内存 # cat /proc/meminfo |grep -i huge #预留192个大 # sysctl...\n"); getchar(); munmap(m, s); return 0; } ---- 3.最后的话 大内存的好处不仅是减少TLB未命中次数,而且大内存分配的是物理内存,不会被操作系统的内存管理换出到磁盘上

    11.7K110

    Linux 内核 内存管理内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存 | 产生缺页异常 | 分配物理内存 | 共享内存 | 进程内存 )

    文章目录 一、内存映射概念 二、内存映射原理 1、分配虚拟内存 2、产生缺页异常 3、分配物理内存 三、共享内存 四、进程内存段的内存映射类型 一、内存映射概念 ---- 内存映射 概念 : "..." 物理内存空间 “ 映射到 ” 虚拟内存空间 " , 其中的数据是随机值 ; 二、内存映射原理 ---- 1、分配虚拟内存 分配 虚拟内存 : 在 Linux 系统中 创建 " 内存映射 “ 时..., 会在 ” 用户虚拟地址空间 “ 中 , 分配一块 ” 虚拟内存区域 " ; 2、产生缺页异常 缺页异常 : Linux 内核在分配 " 物理内存 “ 时 , 采用了 ” 延迟策略 “ , 即进程第一次访问...缺页异常 " 后 , 会 分配 " 物理内存 “ , 并且将 要映射的文件 的 部分数据 读取到 该 ” 物理内存 " 中 ; 匿名映射 : 对于 " 匿名映射 " , 直接分配 " 物理内存 “..., 并且在 " “ 中 , 将 ” 虚拟内存 " 映射到 ” 物理内存 " ; 三、共享内存 ---- 内存映射 与 共享内存 关系 : 文件映射 : 在进程间的 " 共享内存 " 就是使用

    8.3K20

    Linux内存描述之高端内存--Linux内存管理(五)

    4 管理 4.1 管理 Linux采用4KB框大小作为标准的内存分配单元。...每个管理区又有自己的描述符,描述了该管理区空闲的框,保留页数目等。每个描述符都有到内存节点和到节点管理区的连接(被放在flag的高位字段)。...内核调用一个内存分配函数时,必须指明请求框所在的管理区,内核通常指明它愿意使用哪个管理区。 4.2 保留的框池 如果有足够的空闲内存可用、请求就会被立刻满足。...通常情况下,这个空间是 4M 大小,因此仅仅需要一个即可,内核通过来 pkmap_page_table 寻找这个。...内核通过内核全局目录来管理所有的物理内存,由于线性地址前3G空间为用户使用,内核全局目录前768项(刚好3G)除0、1两项外全部为0,后256项(1G)用来管理所有的物理内存

    12.4K23
    领券