首页 > 系统相关 >内存模型

内存模型

时间:2024-11-20 19:18:24浏览次数:1  
标签:map mem section page 内存 pfn 模型

前言

不是特别懂,但是先把自己目前的理解写下来(甚至目前的有些理解都是错的),随着时间的积累再丰富;

内存模型

有三种内存模型:

  • Flat Memory:所有内存都是连续的,通过数组管理所有的page,数组的下标就是pfn;所有可以很简单的pfn下标找到对应的page,page可以很简单的找到pfn;
  • Discontiguous Memory:非连续内存;没有深入研究,通过node管理page,一个node中page都是连续的;
  • Sparse Memory:稀疏内存模型;集中关注这里;

sparse memory

管理思想

存在一个struct mem_section **mem_section的全局变量,该变量是一个二级指针;
sparse_index_init函数可以看出mem_section的组织形式;
sparse_index_init中使用sparse_index_alloc分配struct mem_section的内存,然后赋值给mem_section全局变量进行保存;

  • 所以首先可以确定 *mem_section 指向了一个实际的地址,那*mem_section是一个简单的变量地址,还是一个数组的地址呢?(C语言一个指针比如int *p,这个p可能是一个变量的地址,也有可能是一个数组的地址)

sparse_index_alloc可以了解
里面这个内存分配的大小是 SECTIONS_PER_ROOT * sizeof(struct mem_section),也就是说这个一级指针指向了一个实际的数组,这个数组的长度是 SECTIONS_PER_ROOT;可以同时计算出array_size是一个page的大小;
那么mem_section的组织形式就出来了:

如何通过mem_section,进行pfn和page的相互转化

mem_section的section_mem_map存放了该section的起始page(__section_mem_map_addr)
所以__section_mem_map_addr + pfn就是对应的page;
page-__section_mem_map_addr = pfn;

源码实现

创建

arm64_memory_present中遍历memblock,进行memory_present,memory_present中完成了内存的创建

初始化

sparse_init,->sparse_init_nid:
struct page *map,估计就是page,spares_init_one_section,ms->section_mem_map进行了初始page的赋值;

no-map 为什么会报错

现象:

  • 使用phys_to_page获取page;再使用page_to_phys将page转化为phys,出错;
    page_to_phys 核心是 __page_to_pfn->page_to_section,page_to_section获取section依赖于page->flag;访问flga成员时候出先空指针;
  • 用户空间分配一个较大的全局变量时,没有该问题;

原因分析

  • no-map的内存并没有加入伙伴系统,可以理解为no-map自己实现了一套内存管理方法,它的内存管理只是简单的bitmap置位管理,虚拟地址是通过ioremap获取的,与物理地址是一个简单的偏移;
  • __fdt_scan_reserved_mem扫描reserved-memory->__reserved_mem_reserve_reg的时候,会把no-map内存属性的memory从memblock移除掉(early_init_dt_reserve_memory_arch),不是no-map的进行reserve;
  • arm64_memory_present只会对memblock管理的地址进行pfn对应section的创建,所以no-map没有进行管理,进而使用page_to_pfn就会出错;
    可以从两个方面理解:1是它没有实际的page;2是它并没有被memblock管理然后创建;

针对现象进行分析

了解了原因之后,分析为什么有这么一个现象;

1是没有实际的page

phys_to_page得到的一个page就是一个错误的page,误打误撞到了用户空间的一个地址,所以当用户空间有一个较大的全局变量时,就不会报错;但是结果有错;

2是它并没有被memblock管理然后创建

由于page是一个错误的page,那后面的访问flag操作就自然而然错误了;

解决方法

直接获取物理地址

不使用pfn_to_page,直接特殊判断使用物理地址;

能否通过配置修复

标签:map,mem,section,page,内存,pfn,模型
From: https://www.cnblogs.com/xingxingx/p/18556432

相关文章

  • 实时多模态 AI 的 N 种新可能丨实时互动和大模型专场@RTE2024回顾
      在本届RTE2024大会上,来自产业界和学术界的多位专家深入探讨了实时互动和大模型技术的最新进展及其潜在应用。 西湖心辰联合创始人俞佳、声网AI算法工程师乔齐、MiniMax资深音频算法专家张博闻、商汤科技数字文娱解决方案负责人焦文奎以及面壁智能算法VP翟忠武等......
  • 卫生间3D模型哪里有?厕所/洗手间/浴室等3d模型哪有?
    ​在现代家居设计中,卫生间的美观与功能性同样重要。寻找合适的卫生间3D模型,可以为设计师提供灵感和参考。无论是厕所、洗手间还是浴室,3D模型都能帮助我们预览最终效果,确保设计既实用又美观。那么,哪里可以找到这些高质量的3D模型呢?让我们一探究竟。Bimobject拥有来自250个卫生......
  • 开源模型应用落地-LangChain实用小技巧-检索器-集成多种检索器(十八)
    一、前言   在LangChain中,检索器是一个重要模块,主要用于从数据源中检索与查询相关的文档或片段。它能高效进行信息检索,通过快速筛选和语义理解从大规模文本数据中找到相关内容,支持复杂应用场景如检索增强生成和多源数据整合,还具有可定制性和灵活性,可选择不同嵌入模型和索......
  • 【论文阅读笔记】多模态大语言模型必读 —— LLaVA
    论文地址:https://arxiv.org/abs/2304.08485代码地址:https://github.com/haotian-liu/LLaVA目录简介VisualInstruction数据生成视觉指令微调模型架构训练简介人类对于世界的认知是通过视觉、语言多个途径的,因此设计出能够遵循多模态的视觉和语言指令的通用大模型成为了人......
  • 29套AI全栈大模型项目实战,人工智能视频课程-多模态大模型
    29套AI全栈大模型项目实战:探索人工智能视频课程中的多模态大模型随着人工智能技术的飞速发展,多模态大模型已成为当前研究的热点。这类模型能够同时处理和理解来自多种模态的信息,如文本、图像、音频和视频等,从而在复杂场景中展现出更强的智能。为了帮助广大开发者掌握这一前沿技术......
  • Cesium 设置实体(模型、图片)的朝向
    一、需求来源在项目中,需要绘制汽车并且设置其朝向,原始方式是使用模型绘制,便可以很容易的通过设置orientation属性控制朝向,但是后期由于数量过大,要换成图片,于是探究了一下图片如何设置实体朝向。本文将会把两种实体朝向的设置方法都进行介绍。二、先看效果三、代码实现model:var......
  • AI大模型系统实战:挑战与应用多领域,人工智能大模型的实际应用场景
    AI大模型系统实战:挑战与应用多领域随着人工智能技术的飞速发展,AI大模型系统已成为技术革新的重要驱动力。这些大型预训练模型,如GPT、BERT等,通过大规模无监督学习积累了丰富的知识,并在自然语言处理、图像识别、智能推荐等多个领域展现出巨大的应用潜力。本文将深入探讨AI大模型系......
  • 【书生浦语大模型实战营四期】基础岛 第6关 OpenCompass 评测书生大模型实践
    基础任务评测API模型创建用于评测conda环境condacreate-nopencompasspython=3.10condaactivateopencompasscd/rootgitclone-b0.3.3https://github.com/open-compass/opencompasscdopencompasspipinstall-e.填写APIKEYexportINTERNLM_API_......
  • litellm - 简化大模型 API 调用的工具
    更多AI开源软件:AI开源-小众AIhttps://www.aiinn.cn/sources11000Stars1300Forks445Issues275贡献者MITLicensePython语言代码:GitHub-BerriAI/litellm:PythonSDK,ProxyServer(LLMGateway)tocall100+LLMAPIsinOpenAIformat-[Bedrock,Azur......
  • Lora里面说大模型参数是over-parametrized(过参数的),什么是over-parametrized?(另附相关概
    诸神缄默不语-个人CSDN博文目录本文会介绍over-parametrized(过参数化)、doubledescent、bias-variancetrade-off概念。主要是我在看Lora论文的过程中看到了“over-parametrized”这个概念,所以写一篇关于这个概念的博文。文章目录1.over-parametrized2.doubledesce......