嵌入式linux开发 (二十九) 内存管理2.0(1) 内存管理总述

2024-05-27 16:18

本文主要是介绍嵌入式linux开发 (二十九) 内存管理2.0(1) 内存管理总述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

硬件讲了 sram sdram ddr3
驱动讲了 控制器初始化  读写内存内存管理2.0主要讲软件对内存的管理(分块及保护及管理)
关于内存管理2.0,其实也讲了一部分,对内存的分段应该就属于内存2.0// .code .ro-data .data .bss .stack .heap现在要讲 内存保护(MPU MMU) buddy slab 
内存管理流程
  • 加载文件到内存
刚加载到内存,还没运行代码的时候,最多只有.code .ro-data .data // 一般为 bootrom建立的.bss .stack .heap 是代码建立起来的.
  • .bss .stack .heap的建立
一般是开始运行的用户代码建立的对于用户程序是start.S中的_start对于arm-linux是arch/arm/kernel/head.S 中的 stext
  • 更复杂的内存管理
内存管理的主要功能有:内存分配、内存保护、地址映射和内存扩充。
// 涉及到系统,所以接下来要以 rtos 或者linux源码为 参考 讲述内存管理
// 包括系统的 代码开发包括
// 1. 系统开发
// 		用来读写并管理真实物理内存,并提供接口
// 			给系统提供内存管理接口
//			给用户程序提供内存管理接口
// 2. 应用程序开发
// 		由系统加载应用程序到内存,并为应用程序准备好的内存空间.应用程序使用系统提供的api管理系统为应用程序准备好的内存空间.
// 		应用程序最好不要绕过这些api访问内存空间我们怎么看到一个系统,一个操作系统包括1. 操作系统内核 // 操作系统代码2. 应用程序A // 应用程序A代码3. 应用程序B // 应用程序B代码
对内存的管理的日益增长的需求及解决方案
  • 裸机程序
只有 .code .ro-data .data .bss .stack .heap 不能满足吗?
一开始是裸机程序,安排好这些就够了.
  • rtos
需要多道程序并发运行,这就需要内存方面有改善
内存分配:为每道程序分配内存。需要OS支持,并给每个程序的程序内存空间做分块.每一个程序对应一个task_struct结构体,该结构体中一个成员类似 linux内核中的task_struct中的mm成员,指向进程所管理的内存的一个总的抽象的数据结构mm_struct
内存保护:确保每道用户程序都只在自己的内存空间运行,彼此互不干扰。MPU的支持用系统控制处理器(CP15)寄存器来完全定义保护区域基于区域,不是基于页面,控制颗粒度要比VMSA少不支持虚拟到物理地址的映射物理内存地址始终与ARM处理器生成的虚拟地址相同
// 现实是绝大多数rtos都没有用到MPU的功能.
// 只实现了内存管理,调度,IPC,定时器,MUTEX等功能
  • linux

地址映射:将地址空间的逻辑地址转换为内存空间与对应的物理地址。MMU的支持用翻译表来定义保护页面基于页面,不是基于区域,控制颗粒度要比PMSA多(MMU允许对内存系统进行细粒度控制)翻译表存储在内存中,然后常用的部分被加载到TLB(TLB通过缓存转换表遍历的结果来降低内存访问的平均成本。)执行完整翻译表查找的过程称为 translation table walk,它由硬件自动执行,并且在执行时间上有很大的开销,至少有一个主内存访问,通常有两个支持虚拟到物理地址的映射由ARM®处理器生成的地址称为虚拟地址MMU允许将此地址映射到不同的物理地址。此物理地址标识正在访问的主内存位置。内存扩充:用于实现请求调用功能,置换功能等。就是内存不够的时候,将不常用的内存数据A 放到flash的文件B里面,然后释放这些不常用的内存A.可使用内存就会增加. 在使用这些不常用内存A的时候,再加载B到内存.// 如果flash够快的话,这就相等于将flash当内存用.同样,也有拿内存当flash 用的,例如ramfs// 一般文件系统是管理flash的,同样我们也可以将一块内存做成一种文件系统ramfs(基于内存的文件系统),此时读写ramfs 文件里面的数据,其实是在操作内存,缺点是掉电就没了.https://blog.csdn.net/No1_tiger/article/details/75126974https://blog.csdn.net/u012489236/article/details/104172649

这篇关于嵌入式linux开发 (二十九) 内存管理2.0(1) 内存管理总述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007972

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor