鸿蒙OpenHarmony【小型系统基础内核(虚拟内存管理)】子系统开发

news2024/9/25 16:49:05

虚拟内存管理

基本概念

虚拟内存管理是计算机系统管理内存的一种技术。每个进程都有连续的虚拟地址空间,虚拟地址空间的大小由CPU的位数决定,32位的硬件平台可以提供的最大的寻址空间为0-4GiB。整个4GiB空间分成两部分,LiteOS-A内核占据3GiB的高地址空间,1GiB的低地址空间留给用户态进程使用。各个进程空间的虚拟地址空间是独立的,代码、数据互不影响。

系统将虚拟内存分割为称为虚拟页的内存块,大小一般为4KiB或64KiB,LiteOS-A内核默认的页的大小是4KiB,根据需要可以对MMU(Memory Management Units)进行配置。虚拟内存管理操作的最小单位就是一个页,LiteOS-A内核中一个虚拟地址区间region包含地址连续的多个虚拟页,也可只有一个页。同样,物理内存也会按照页大小进行分割,分割后的每个内存块称为页帧。虚拟地址空间划分:内核态占高地址3GiB(0x40000000 ~ 0xFFFFFFFF),用户态占低地址1GiB(0x01000000 ~ 0x3F000000),具体见下表,详细可以查看或配置los_vm_zone.h。

表1 内核态地址规划:

Zone名称描述属性
DMA zone供IO设备的DMA使用。Uncache
Normal zone加载内核代码段、数据段、堆和栈的地址区间。Cache
high mem zone可以分配连续的虚拟内存,但其所映射的物理内存不一定连续。Cache

表2 用户态虚地址规划:

Zone名称描述属性
代码段用户态代码段地址区间。Cache
用户态堆地址区间。Cache
用户态栈地址区间。Cache
共享库用于加载用户态共享库的地址区间,包括mmap所映射的区间。Cache

运行机制

虚拟内存管理中,虚拟地址空间是连续的,但是其映射的物理内存并不一定是连续的,如下图所示。可执行程序加载运行,CPU访问虚拟地址空间的代码或数据时存在两种情况:

  • CPU访问的虚拟地址所在的页,如V0,已经与具体的物理页P0做映射,CPU通过找到进程对应的页表条目,根据页表条目中的物理地址信息访问物理内存中的内容并返回。

  • CPU访问的虚拟地址所在的页,如V2,没有与具体的物理页做映射,系统会触发缺页异常,系统申请一个物理页,并把相应的信息拷贝到物理页中,并且把物理页的起始地址更新到页表条目中。此时CPU重新执行访问虚拟内存的指令便能够访问到具体的代码或数据。

    图1 内存映射示意图

    1

开发指导

接口说明

表3 获取进程空间系列接口

接口名称描述
LOS_CurrSpaceGet获取当前进程空间结构体指针
LOS_SpaceGet获取虚拟地址对应的进程空间结构体指针
LOS_GetKVmSpace获取内核进程空间结构体指针
LOS_GetVmallocSpace获取vmalloc空间结构体指针
LOS_GetVmSpaceList获取进程空间链表指针

表4 虚拟地址区间region相关的操作

接口名称描述
LOS_RegionFind在进程空间内查找并返回指定地址对应的虚拟地址区间
LOS_RegionRangeFind在进程空间内查找并返回指定地址范围对应的虚拟地址区间
LOS_IsRegionFileValid判断虚拟地址区间region是否与文件关联映射
LOS_RegionAlloc申请空闲的虚拟地址区间
LOS_RegionFree释放进程空间内特定的region
LOS_RegionEndAddr获取指定地址区间region的结束地址
LOS_RegionSize获取region的大小
LOS_IsRegionTypeFile判断是否为文件内存映射
LOS_IsRegionPermUserReadOnly判断地址区间是否是用户空间只读属性
LOS_IsRegionFlagPrivateOnly判断地址区间是否是具有私有属性
LOS_SetRegionTypeFile设置文件内存映射属性
LOS_IsRegionTypeDev判断是否为设备内存映射
LOS_SetRegionTypeDev设置设备内存映射属性
LOS_IsRegionTypeAnon判断是否为匿名映射
LOS_SetRegionTypeAnon设置匿名映射属性

表5 地址校验

接口名称描述
LOS_IsUserAddress判断地址是否在用户态空间
LOS_IsUserAddressRange判断地址区间是否在用户态空间
LOS_IsKernelAddress判断地址是否在内核空间
LOS_IsKernelAddressRange判断地址区间是否在内核空间
LOS_IsRangeInSpace判断地址区间是否在进程空间内

表6 vmalloc操作

接口名称描述
LOS_VMallocvmalloc申请内存
LOS_VFreevmalloc释放内存
LOS_IsVmallocAddress判断地址是否是通过vmalloc申请的

表7 内存申请系列接口

接口名称描述
LOS_KernelMalloc当申请的内存小于16KiB时,系统从堆内存池分配内存;当申请的内存超过16KiB时,系统分配多个连续物理页用于内存分配
LOS_KernelMallocAlign申请具有对齐属性的内存,申请规则同LOS_KernelMalloc接口
LOS_KernelFree释放由LOS_KernelMalloc和LOS_KernelMallocAlign接口申请的内存
LOS_KernelRealloc重新分配由LOS_KernelMalloc和LOS_KernelMallocAlign接口申请的内存

表8 其他

接口名称描述
LOS_PaddrQuery根据虚拟地址获取对应的物理地址
LOS_VmSpaceFree释放进程空间,包括虚拟内存区间、页表等信息
LOS_VmSpaceReserve在进程空间中预留一块内存空间
LOS_VaddrToPaddrMmap将指定长度的物理地址区间与虚拟地址区间做映射,需提前申请物理地址区间

开发流程

虚拟内存相关接口的使用:

  1. 根据进程空间获取的系列接口可以得到进程空间结构体,进而可以读取结构体相应信息。

  2. 对虚拟地址区间做相关操作:

    • 通过LOS_RegionAlloc申请虚拟地址区间;
    • 通过LOS_RegionFind、LOS_RegionRangeFind可以查询是否存在相应的地址区间;
    • 通过LOS_RegionFree释放虚拟地址区间。
  3. vmalloc接口及内存申请系列接口可以在内核中根据需要申请内存。

说明: 内存申请系列接口申请的内存要求物理内存是连续的,当系统内存无法满足大块连续内存的申请条件时会申请失败,一般适用于小块内存的申请;vmalloc相关接口申请的内存可以获得不连续的物理内存,但其是以页(当前系统一个页为4096字节)为单位的,当需要申请以页为整数倍的内存时可以通过vmalloc申请,例如文件系统中文件读取需要较大的缓存,便可以通过vmalloc相关接口申请内存。

以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
1

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下

内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!

鸿蒙【北向应用开发+南向系统层开发】文档

鸿蒙【基础+实战项目】视频

鸿蒙面经

2

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!
3

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

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

相关文章

Go weak包前瞻:弱指针为内存管理带来新选择

在介绍Go 1.23引入的unique包的《Go unique包:突破字符串局限的通用值Interning技术实现》一文中,我们知道了unique包底层是基于internal/weak包实现的,internal/weak是一个弱指针功能的Go实现。所谓弱指针(Weak Pointer,也称为弱…

算法分享——《滑动窗口》

🚍《长度最小的子数组》 🚲题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符…

Linux进程状态与进程优先级

目录 Linux进程状态与进程优先级 前置知识 并行与并发 时间片 进程状态 基本介绍 等待状态的本质 swap分区 Linux进程状态 Linux进程状态分类 运行状态(Running)与等待状态(Sleeping) 硬盘等待状态(Disk S…

计算机视觉必备模型YOLO系列模型的知识点,提供YOLOv1-v8模型结构与代码实例

大家好,我是微学AI,今天给大家介绍一下计算机视觉必备模型YOLO系列模型的知识点,提供YOLOv1-v8模型结构与代码实例。本文全面介绍了计算机视觉领域中必备的YOLO系列模型,详细梳理了YOLOv1至YOLOv8模型的结构及其演变过程。文章内容…

Node.js 学习 path模块、fs模块、npm软件包管理器、导出、导入

目录 1.Node.js入门 1.1 什么是 Node.js 1.2 fs模块-读写文件 1.3 path模块-路径处理 1.4 案例-压缩前端html 1.5 认识URL中的端口号 1.6 http模块-创建Web服务 1.7 案例-浏览时钟 2.Node.js 模块化 2.1 模块化简介 2.1.1 什么是模块化? 2.1.2 CommonJS…

【软件建设方案】设备管理系统建设方案(Doc原件参考)

1.系统概述 1.1.需求描述 1.2.需求分析 1.3.重难点分析 1.4.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 3.系统功能设计 3.1.功能清单列表 3.2.设备信息数据库 3.3.设备维护计划管理子系统 3.4.设备维护管理子系统 3.5.备件物资管理子系统 3.6.…

1区IEEE-Trans发文暴涨3倍,CCF-B类,刚跌出了TOP榜!这是不是官方提前发出警告?

【SciencePub学术】今天给大家推荐的是1本地球科学领域的SCI—《IEEE TRANSACTIONS ON GEOSCIENCE AND REMOTE SENSING》,IEEE-Trans系列,并且是CCF-B类期刊!此系列的期刊在业界的权威性还是不容置疑的。 优点VS缺点 ✦ IEEE-Trans系列 ✦ C…

普通本科生也能成为AI高手:人工智能学习指南

在人工智能(AI)日益普及的今天,许多人都渴望掌握这项技术,但常有人疑惑:没有顶尖学府的背景,我也能学习人工智能吗? 答案是肯定的! 人工智能是一个充满机遇与挑战的领域&#xff0c…

渗透测试工具 sqlmap 基础教程

一、引言 在网络安全领域,渗透测试是一项至关重要的工作,它可以帮助我们发现系统中的安全漏洞,从而采取相应的措施进行修复。而 sqlmap 作为一款强大的开源渗透测试工具,专门用于检测和利用 SQL 注入漏洞。本文将为大家详细介绍 …

HTTP 1.0 2.0 3.0详解

HTTP HTTP全称超文本传输协议,是一种属于应用层的通信协议。它允许将超文本标记语言文档(HTML)从Web服务器传输到客户端的浏览器。 HTTP报文结构 请求报文结构 请求方法: GET:一般用来请求已被URI识别的资源&#x…

Elasticsearch7.7.1集群不能相互发现的问题解决以及Elasticsearch7.7.1安装analysis-ik中文分词插件的应用

一、Elasticsearch7.7.1集群不能相互发现的问题解决 在使用elasticsearch7.7.1搭建集群,使用了3台服务器作为节点,但在搭建的过程中发现每台服务器的elasticsearch服务都正常,但是不能相互发现,期间进行了一些配置的修改偶尔出现了…

(附源码)SSM养老院综合服务管理系统-计算机毕设 23237

基于SSM的养老院综合服务管理系统 摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,…

助力解析化学图像生成文本分析,化学大语言模型 ChemVLM 来啦!

ChemVLM 是由上海人工智能实验室于 2024 年推出的首个面向化学领域的开源多模态大型语言模型。该模型旨在解决化学图像理解与文本分析之间的不兼容问题,通过结合视觉 Transformer (ViT)、多层感知机 (MLP) 和大型语言模型 (LLM) 的优势,实现了对化学图像…

万维组态介绍

演示地址:http://121.40.16.189:12000 万维组态本地部署文档万维组态线上部署文档万维组态操作说明文档万维组态接入文档万维组态绑点示例文档万维组态接入源代码说明万维组态扩展图元示例文档万维组态大屏图元示例文档 项目介绍 万维组态是一款功能强大的基于Web的…

sar信号RD域的距离向傅里叶变换

下面可知,举例傅里叶变换时,posp 距离时间和频率 t不等于ft/K。而方位时间和频率时这种线性关系

整合SpringSecurity框架经典报错

报错描述Description: Field userDetailsService in com.atguigu.security.config.WebSecurityConfig required a bean of type org.springframe 这是整合SpringSecurity权限认证中经常出现的一个问题,由于SpringSecurity中这个UserDetailsService未找到 解决方案…

稀疏线性方程组求解技术——超节点法(Supernodal)简介

一、介绍 直接法的基础是矩阵的分解,常见的分解形式有LU分解、Cholesky分解、LDL分解等。 直接法通过将A矩阵分解成两个或多个因子的乘积,使得原方程组转化为若干个较容易求解的子问题。例如LU分解ALU,其中L是单位下三角矩阵,U是…

JavaScript typeof运算符

在js中可以typeof来做到确定一个值到底是什么类型。 <script>var num 100;//数值类型var name "mingzi";//字符串类型var book true;//布尔类型var student {name: " 小明",age: 16,tnum: "213444"}//对象是由多个数据组合而成&#x…

效率工具推荐 | 高效管理客服中心知识库

人工智能AI的广泛应用&#xff0c;令AI知识库管理已成为优化客服中心运营的核心策略之一。一个高效、易用且持续更新的知识库不仅能显著提升客服代表的工作效率&#xff0c;还能极大提升客户的服务体验。而高效效率工具如HelpLook&#xff0c;能够轻松搭建AI客服帮助中心&#…

[论文速读] Multimodal Fusion on Low-quality Data:A Comprehensive Survey 低质多模态数据融合综述

摘要&#xff1a; 多模态融合侧重于整合多种模态的信息&#xff0c;以实现更准确的预测&#xff0c;在自动驾驶和医疗诊断等广泛场景中取得了显着进展。然而&#xff0c;多模态融合的可靠性在很大程度上仍未得到探索&#xff0c;特别是在低质量数据设置下。本文调查了野外多模态…