linux kernel 物理内存概述 (八)bootmem引导内存分配

目录

bootmem 

memblock取代bootmem


bootmem 


ARM64已经不用,每个内存节点有一个bootmem_data实例

算法如下

  1. 只把地段内存添加到bootmem分配器,低端内存是可以直接映射到内核虚拟地址空间的物理内存
  2. 使用一个位图记录哪些物理页被分配,如果物理页被分配,把这个物理页对应的为置1
  3. 采用最先适配算法,扫描位图,找到第一个足够大的空闲内存块
  4. 支持小于一页的内存块,记录上次分配的内存块的结束位置后面一个字节的偏移和索引,下次分配时,从上次分配的位置后面开始尝试,如果上次分配的最后一个物理页的剩余空间足够,可以直接在这个物理页上分配内存。

memblock取代bootmem


memblock 分配器对外提供的接口如下 。
memblock_add: 添加新的内存块区域到 memblock.memory 中 。
memblock_remove: 删除内存块 区域。
memblock_alloc: 分配内存。
memblock_free: 释放内存。


设备树描述

/ {#address-c ells= <2> ;#size-cells = <2>;memory@80000000 {device_ type = "memory";reg = <0xOOOOOOOO 0x80000000 0 0x80000000>,<0x00000008 0x800000 00 0 0x8 0000000>;);
}

  • 第一个物理内 存 范围的起始地址是 "0x0000000

        0x80000000", 长度是 "0 0x80000000 ", 即起始地址是 2GB, 长度是 2GB:

  • 第二个物理内存范围的起始地址是 "0x00000008 0x80000000", 长度是 "0 0x80000000 ", 即起始地址是34GB, 长度是 2GB 。

函数调用路径
start kernel () ->setup_arch () - > arm64_memblock init ()
start_kernel() ->setup_arch() ->setup_machine_fdt() ->early_init_dt_scan() - >early_init_dt_scan_nodes()

  • memblock分配器把所有内存添加到memblock.memory中,把分配出去的内存块添加到memblock.reserved中。
  • 内存块类型中的内存按起始物理地址从小到大排序。


memblock_alloc 负责分配内存,把主要工作委托给函数 memblock_alloc_range_nid

算法如下

  1. 调用函数 memblock_fmd_in_range_node 以找到没有分配的内存块区域,默认从高地址向下分配。
  2. 调用函数 memblock_reserve, 把分配出去的内存块区域添加到 memblock.reserved
  3. memblock_free 负责释放内存,只需要把内存块区域从 memblock.reserved 中删除

学习参考

https://course.0voice.com/v1/course/intro?courseId=2&agentId=0


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 SDRAM知识点

1.SDRAM和SRAM的区别 SRAM不需要刷新电路即能保存它内部存储的数据。而SDRAM&#xff08;Dynamic Random Access Memory&#xff09;每隔一段时间&#xff0c;要刷新充电一次&#xff0c;否则内部的数据即会消失&#xff0c;因此SRAM具有较高的性能&#xff0c;但是SRAM也有它…

c#递归函数

在 C#中&#xff0c;递归函数是指在函数内部直接或间接调用自身的函数。递归函数在解决一些问题时非常有用&#xff0c;例如遍历树形结构、递归计算等。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks…

Java核心之细说泛型

泛型是什么&#xff1f; 等你使用java逐渐深入以后会了解或逐步使用到Java泛型。Java 中的泛型是 JDK 5 中引入的功能之一。"Java 泛型 "是一个技术术语&#xff0c;表示一组与定义和使用泛型类型和方法有关的语言特性。在 Java 中&#xff0c;泛型类型或方法与普通…

分享axios+MQTT简单封装示例

MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅&#xff08;publish/subscribe&#xff09;模式的"轻量级"通讯协议&#xff0c;该协议构建于TCP/IP协议上&#xff0c;由IBM在19…

k8s发布nacos-server,nodeport配置注意事项

k8s发布nacos-server注册不上问题 问题描述&#xff1a;分析过程&#xff1a; 问题描述&#xff1a; k8s发布nacos-server做服务公用使用&#xff0c;nodeport暴漏服务给客户端注册&#xff0c; nacos:端口 8848&#xff1a;30601 9848&#xff1a;30701 分析过程&#xff1a…

二维码门楼牌管理系统在教育领域的应用及其优势

文章目录 前言一、二维码门楼牌管理系统概述二、教育领域的应用场景三、二维码门楼牌管理系统的优势四、结语 前言 随着信息技术的快速发展&#xff0c;二维码门楼牌管理系统在教育领域的应用越来越广泛。该系统不仅提高了地址信息的准确性&#xff0c;还为学校、家长和教育工…

关于华为昇腾(Ascend)AI芯片,CANN计算架构,MindSpore深度学习框架,MindStudio开发工具

1、华为昇腾生态 深度学习之前的配置都是&#xff1a;NVIDIA GPU / CPU CUDA Tensorflow/PyTorch 后来老美禁止 NVIDIA 卖GPU芯片给我们&#xff0c;于是国内企业开始发力CPU和GPU硬件&#xff0c;成果丰硕&#xff0c;虽然与NVIDIA顶级GPU还有一些差距&#xff0c;但是也不…

npm包停止了对 require 导入方式的支持,只允许使用import 导入方式,怎么解决

如果你发现一个npm包已经停止支持require导入方式&#xff0c;并且只允许使用ES6的import语法&#xff0c;你可以尝试以下几种方法来解决这个问题&#xff1a; 更新你的Node.js版本&#xff1a;确保你使用的Node.js版本是支持ES6模块导入的。Node.js 从 v13.2.0 开始默认支持ES…

eclipse搭建java web项目

准备条件 eclipsejdk1.8 &#xff08;配置jdk环境&#xff09;apache-tomcat-8.5.97&#xff08;记住安装位置&#xff09; 一 点击完成 开始创建javaweb项目 import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.s…

【经典案例】某大型公园构建检查监督机制项目纪实

——引入网格化监督管理机制&#xff0c;实现责任、人员、信息三位一体 公园管理由于其本身地域范围广的特性在工作中很难进行有效的监督检查&#xff0c;该公园的监督检查由不同的部门分别负责&#xff0c;同部门检查时往往会处于情面而使检查流于形式&#xff0c;并且公园的监…

Media Encoder 2024:未来媒体编码的新纪元 mac/win版

随着科技的飞速发展&#xff0c;媒体内容已成为我们日常生活中不可或缺的一部分。为了满足用户对高质量视频内容不断增长的需求&#xff0c;Media Encoder 2024应运而生&#xff0c;它凭借卓越的技术和创新的特性&#xff0c;重塑了媒体编码的未来。 Media Encoder 2024软件获…

嵌入式学习day34 网络

TCP包头: 1.序号:发送端发送数据包的编号 2.确认号:已经确认接收到的数据的编号(只有当ACK为1时,确认号才有用) TCP为什么安全可靠: 1.在通信前建立三次握手连接 SYN SYNACK ACK 2.在通信过程中通过序列号和确认号保障数据传输的完整性 本次发送序列号:上次…

LeetCode Python - 42.接雨水

目录 题目答案运行结果 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组…

【网站项目】096实验室开放管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

错误与异常之为何要异常

为什么用异常 毫无疑问,错误的存在会伴随着软件的存在.区别在于当今快节奏的计算世界, 我们的执行环境 已经改变, 所以我们需要改变错误处理, 以准确反映我们软件的开发环境. 就现今应用来说, 普遍 的是自洽(self-contained)的图形用户界面(GUIs)或是客户机/服务器体系, 例如 …

精通ChatGPT:掌握高效Prompt设计的艺术与科学

精通ChatGPT&#xff1a;掌握高效Prompt设计的艺术与科学 在人工智能的迅猛发展中&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术已经成为了一个热门的话题。OpenAI推出的ChatGPT是基于强大的GPT-3模型&#xff0c;它通过深度学习的方法训练出能够理解和生成人类语…

Java面试——Netty

优质博文&#xff1a;IT-BLOG-CN 一、BIO、NIO 和 AIO 【1】阻塞 IO(Blocking I/O)&#xff1a; 同步阻塞I/O模式&#xff0c;当一条线程执行 read() 或者 write() 方法时&#xff0c;这条线程会一直阻塞直到读取一些数据或者写出去的数据已经全部写出&#xff0c;在这期间这条…

泛微OA服务器获取 token

泛微OA服务器获取 token 文章目录 泛微OA服务器获取 token一、泛微官方方法1 ecology 系统配置2 发放/生成许可证(appid)3 限制许可证使用ip地址&#xff08;该步骤也可以跳过&#xff09;4 使用 postman 注册5 获取 token6 访问业务系统接口 二、java 代码获取 token三、封装到…

ospf介绍

Ospf首先是一种内部网关协议,其描述的路由信息属于同一个自制系统。所谓自制系统,即属于该自制系统的路由器都必须使用同一种内部网关协议。在这里,即为ospf。 Ospf的一些常用术语:Ospf协议的内容比较丰富,涉及的术语、定义较多。在这里有一些常用的定义: 自制系统(AS)…

4 AI系统的测试关键技术和实践

4 AI系统的测试关键技术和实践 4.1 功能测试的困局 在传统系统的功能测试中,测试工程师无论是做手工测试还是自动化测试,都必须先设计和开发测试用例,然后才能利用测试用例完成测试工作,给出测试结论。从这里可以看出,测试用例是测试工作中很重要的产出物。IEEE 610在19…