鸿蒙OpenHarmony【小型系统基础内核(虚实映射)】子系统开发

虚实映射

基本概念

虚实映射是指系统通过内存管理单元(MMU,Memory Management Unit)将进程空间的虚拟地址与实际的物理地址做映射,并指定相应的访问权限、缓存属性等。程序执行时,CPU访问的是虚拟内存,通过MMU页表条目找到对应的物理内存,并做相应的代码执行或数据读写操作。MMU的映射由页表(Page Table)来描述,其中保存虚拟地址和物理地址的映射关系以及访问权限等。每个进程在创建的时候都会创建一个页表,页表由一个个页表条目(Page Table Entry, PTE)构成,每个页表条目描述虚拟地址区间与物理地址区间的映射关系。MMU中有一块页表缓存,称为快表(TLB, Translation Lookaside Buffers),做地址转换时,MMU首先在TLB中查找,如果找到对应的页表条目可直接进行转换,提高了查询效率。CPU访问内存或外设的示意图如下:

图1 CPU访问内存或外设的示意图

运行机制

虚实映射其实就是一个建立页表的过程。MMU支持多级页表,LiteOS-A内核采用二级页表描述进程空间。每个一级页表条目描述符占用4个字节,可表示1MiB的内存空间的映射关系,即1GiB用户空间(LiteOS-A内核中用户空间占用1GiB)的虚拟内存空间需要1024个。系统创建用户进程时,在内存中申请一块4KiB大小的内存块作为一级页表的存储区域,系统根据当前进程的需要会动态申请内存作为二级页表的存储区域。

  • 用户程序加载启动时,会将代码段、数据段映射进虚拟内存空间,此时并没有物理页做实际的映射;

  • 程序执行时,如下图粗箭头所示,CPU访问虚拟地址,通过MMU查找是否有对应的物理内存,若该虚拟地址无对应的物理地址则触发缺页异常,内核申请物理内存并将虚实映射关系及对应的属性配置信息写进页表,并把页表条目缓存至TLB,接着CPU可直接通过转换关系访问实际的物理内存;

  • 若CPU访问已缓存至TLB的页表条目,无需再访问保存在内存中的页表,可加快查找速度。

    图2 CPU访问内存示意图

开发指导

接口说明

表1 MMU相关操作

接口名称 描述
LOS_ArchMmuQuery 获取进程空间虚拟地址对应的物理地址以及映射属性。
LOS_ArchMmuMap 映射进程空间虚拟地址区间与物理地址区间。
LOS_ArchMmuUnmap 解除进程空间虚拟地址区间与物理地址区间的映射关系。
LOS_ArchMmuChangeProt 修改进程空间虚拟地址区间的映射属性。
LOS_ArchMmuMove 将进程空间一个虚拟地址区间的映射关系转移至另一块未使用的虚拟地址区间重新做映射。

开发流程

虚实映射相关接口的使用:

  1. 通过LOS_ArchMmuMap映射一块物理内存。

  2. 对映射的地址区间做相关操作:

    • 通过LOS_ArchMmuQuery可以查询相应虚拟地址区间映射的物理地址区间及映射属性;
    • 通过LOS_ArchMmuChangeProt修改映射属性;
    • 通过LOS_ArchMmuMove做虚拟地址区间的重映射。
  3. 通过LOS_ArchMmuUnmap解除映射关系。

说明: 上述接口的使用都是基于MMU初始化完成以及相关进程页表的建立,MMU在系统启动阶段已完成初始化,进程创建的时候会建立页表,开发者无需介入操作。

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

下面是鸿蒙的完整学习路线 ,展示如下:

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

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

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

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

鸿蒙面经

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

相关推荐
zhongcx011 小时前
【HarmonyOS】TaskPool非阻塞UI
ui·harmonyos
训山1 小时前
【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式&结构重用
笔记·学习·华为·harmonyos·鸿蒙系统
GY-932 小时前
Flutter鸿蒙化环境配置(windows)
windows·harmonyos
哦豁灬3 小时前
树莓派pico上手
单片机·嵌入式硬件·micropython·树莓派pico
weightOneMillion4 小时前
鸿蒙界面开发(九):列表布局 (List)
前端·学习·华为·list·harmonyos
baobao熊4 小时前
【HarmonyOS】应用权限原理和封装
华为·harmonyos
boldht5 小时前
嵌入式项目:STM32平衡车详解 (基础知识篇) (基于STM32F103C8T6)
c语言·stm32·单片机·嵌入式硬件·嵌入式项目·单片机平衡小车
夜间去看海6 小时前
基于单片机的角度、水位、温度、辅助热源、电机仿真
单片机·嵌入式硬件
夜间去看海6 小时前
基于单片机的小车行走加温湿度检测系统
单片机·嵌入式硬件·proteus
威哥爱编程7 小时前
在 ArkTS 中,如何有效地进行内存管理和避免内存泄漏?
arkts·鸿蒙·harmonyos next