摘要:鸿蒙轻内核M核新增支持了多段非连续性内存区域,把多个非连续性内存逻辑上合一,用户不感知底层的不同内存块. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列九 动态内存Dynamic Memory 补充>,作者:zhushy. 一些芯片片内RAM大小无法满足要求,需要使用片外物理内存进行扩充.对于多段非连续性内存,需要内存管理模块统一管理,应用使用内存接口时不需要关注内存分配属于哪块物理内存,不感知多块内存. 多段非连续性内存如下图所示: 鸿蒙轻内核M核新增支持了多段非连续性内存区域,把多…
摘要:本文先简单介绍下Fault异常类型,向量表及其代码,异常处理C语言程序,然后详细分析下异常处理汇编函数实现代码. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十八 Fault异常处理>,作者:zhushy. Fault异常处理模块与OpenHarmony LiteOS-M内核芯片架构相关,提供对HardFault.MemManage.BusFault.UsageFault等各种故障异常处理.有关Cortex-M芯片相关的知识不在本文讨论,请自行参考<Cortex-M7 Devi…
摘要:本文学习了LiteOS-M内核Musl LibC的实现,特别是文件系统和内存分配释放部分. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十九 Musl LibC>,作者:zhushy. LiteOS-M内核LibC实现有2种,可以根据需求进行二选一,分别是musl libC和newlibc.本文先学习下Musl LibC的实现代码.文中所涉及的源码,均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取.LiteOS-M内核提…
摘要:本文带领大家一起剖析了鸿蒙轻内核的动态内存模块的源代码,包含动态内存的结构体.动态内存池初始化.动态内存申请.释放等. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列九 动态内存Dynamic Memory 第一部分>,原文作者:zhushy. 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要包括内存的初始化.分配以及释放. 在系统运行过程中,内存管理模块通过对内存的申请/释放来管理用户和OS对内存的使用,使内存的利用率和使用效率达到最优,同时最大限度地解决系统的内存碎…
摘要:本文通过分析鸿蒙轻内核定时器模块的源码,掌握定时器使用上的差异. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十四 软件定时器Swtmr>,作者:zhushy . 软件定时器(Software Timer)是基于系统Tick时钟中断且由软件来模拟的定时器.当经过设定的Tick数后,会触发用户自定义的回调函数.硬件定时器受硬件的限制,数量上不足以满足用户的实际需求.鸿蒙轻内核提供了软件定时器功能可以提供更多的定时器,满足用户需求. 本文通过分析鸿蒙轻内核定时器模块的源码,掌握定时器使用…
摘要:本文先介绍下LFS文件系统结构体的结构体和全局变量,然后分析下LFS文件操作接口. 本文分享自华为云社区<# 鸿蒙轻内核M核源码分析系列二一 02 文件系统LittleFS>,作者:zhushy . LittleFS是一个小型的Flash文件系统,它结合日志结构(log-structured)文件系统和COW(copy-on-write)文件系统的思想,以日志结构存储元数据,以COW结构存储数据.这种特殊的存储方式,使LittleFS具有强大的掉电恢复能力(power-loss resi…
摘要:本文为大家介绍FatFS文件系统结构体的结构体和全局变量,并分析FatFS文件操作接口. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列二一 03 文件系统FatFS>,作者:zhushy. FAT文件系统是File Allocation Table(文件配置表)的简称,主要包括DBR区.FAT区.DATA区三个区域.其中,FAT区各个表项记录存储设备中对应簇的信息,包括簇是否被使用.文件下一个簇的编号.是否文件结尾等.FAT文件系统有FAT12.FAT16.FAT32等多种格式,其中…
摘要:本文介绍了Kconfig的基础知识,和鸿蒙轻内核的图形化配置及进阶的使用方法. 本文分享自华为云社区<鸿蒙轻内核Kconfig使用笔记>,作者: zhushy. 1. Kconfig简介 Kconfig语言定义了一套完整的规则来表述配置项及配置项间的关系,详细内容可以参考Linux官方文档Kconfig Language,此处不赘述.鸿蒙轻内核使用的是Python的开源三方库kconfiglib(menuconfig只是其提供的命令之一,相关命令还有genconfig, savedefc…
Java锁-Synchronized深层剖析 前言 Java锁的问题,可以说是每个JavaCoder绕不开的一道坎.如果只是粗浅地了解Synchronized等锁的简单应用,那么就没什么谈的了,也不建议继续阅读下去.如果希望非常详细地了解非常底层的信息,如monitor源码剖析,SpinLock,TicketLock,CLHLock等自旋锁的实现,也不建议看下去,因为本文也没有说得那么深入.本文只是按照synchronized这条主线,探讨一下Java的锁实现,如对象头部,markdown,mo…
内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你这一切. 线性区 一个可执行程序,是经过编译器处理后的遵守一定规则的数据.符号表和指令序列的组合,当linux加载一个可执行程序的时候,会为其创建一个新的进程,其对应的进程描述符task_struct中会保存许多资源的描述符,其中的mm_struct就是这个进程的内存描述符,用来管理该进程拥有的所有…