
HarmonyOS
文章平均质量分 93
普通网友
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
鸿蒙内核源码分析(特殊进程篇)
用户态的进程是平民阶层,屌丝矮矬穷,干着各行各业的活,权利有限,人数众多,活动范围有限(用户空间).有关单位肯定不能随便进出.这个阶层有个共同的老祖宗g_userInitProcess (1号进程).原创 2024-06-25 15:38:43 · 905 阅读 · 0 评论 -
鸿蒙内核源码分析(Fork篇) | 一次调用,两次返回
fork函数的特点概括起来就是“调用一次,返回两次”,在父进程中调用一次,在父进程和子进程中各返回一次。从上图可以看出,一开始是一个控制流程,调用fork之后发生了分叉,变成两个控制流程,这也就是“fork”(分叉)这个名字的由来了。原创 2024-06-25 14:36:41 · 773 阅读 · 0 评论 -
鸿蒙内核源码分析(中断管理篇) | 江湖从此不再怕中断
中断概念篇 中断概念很多,比如中断控制器,中断源,中断向量,中断共享,中断处理程序等等.本篇做一次整理.先了解透概念才好理解中断过程.用海公公打比方说明白中断各个概念.可前往查看.原创 2024-06-25 13:39:32 · 980 阅读 · 0 评论 -
鸿蒙内核源码分析(中断概念篇) | 海公公的日常工作
中断是指出现需要时,CPU暂停执行当前程序,转而执行新程序的过程。即在程序运行过程中,出现了一个必须由CPU立即处理的事务。此时,CPU暂时中止当前程序的执行转而处理这个事务,这个过程就叫做中断。如图:外设可以在没有CPU介入的情况下完成一定的工作,但某些情况下也需要CPU为其执行一定的工作。通过中断机制,在外设不需要CPU介入时,CPU可以执行其它任务,而当外设需要CPU时,将通过产生中断信号使CPU立即中断当前任务来响应中断请求。原创 2024-06-24 22:14:59 · 742 阅读 · 0 评论 -
鸿蒙内核源码分析(中断切换篇) | 系统因中断活力四射
在鸿蒙的内核线程就是任务,系列篇中说的任务和线程当一个东西去理解.原创 2024-06-24 21:42:21 · 850 阅读 · 0 评论 -
鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务
由硬件产生的中断,比如 鼠标,键盘外部设备每次点击和敲打,屏幕的触摸,USB的插拔等等这些都是硬中断.同样的需要切换栈运行,需要复用寄存器,但与软切换不一样的是,硬切换会切换工作模式(中断模式).所以会更复杂点,但道理还是一样要保存和恢复切换现场寄存器的值, 而保存寄存器顺序的结构体叫:任务中断上下文(TaskIrqContext).原创 2024-06-24 21:11:08 · 898 阅读 · 0 评论 -
鸿蒙内核源码分析(汇编汇总篇) | 汇编可爱如邻家女孩
鸿蒙所有汇编文件如下:直接点击可以查看注解源码,有些站点会把链接去除,没办法,可直接去各大站点搜"鸿蒙内核源码分析",找到源码注解.原创 2024-06-24 20:37:36 · 743 阅读 · 0 评论 -
鸿蒙内核源码分析(异常接管篇) | 社会很单纯,复杂的是人
这六个人处理问题都自带工具,有标准的解决方案,有自己独立的办公场所,办公场所就是栈空间(独立的),标准解决方案就是私有代码段,放在固定的位置.而自带的工具就是 SPSR_***,SP_***,LR_***寄存器组.详见 系列篇之工作模式篇 ,这里再简单回顾下有哪些工作模式,包括小孩自己(用户模式)一共是七种模式.原创 2024-06-24 17:56:45 · 1065 阅读 · 0 评论 -
鸿蒙内核源码分析(寄存器篇) | 宇宙最忙存储器
寄存器从大一的计算机组成原理就开始听到它,感觉很神秘,如梦如雾多年.揭开本质后才发现,寄存器就是一个32位的存储空间,一个int变量而已,但它的厉害之处在于极高频率的使用,让人不敢相信是怎么做到的,不管再复杂再牛牛的应用程序,电商也好,游戏,直播也罢,到了它这里都变成了有限的十几个寄存器在玩,简直太神奇了.原创 2024-06-24 17:19:31 · 877 阅读 · 0 评论 -
鸿蒙内核源码分析(系统调用篇) | 开发者永远的口头禅
本篇通过一张图和七段代码详细说明系统调用的整个过程,代码一捅到底,直到汇编层再也捅不下去.先看图,这里的模式可以理解为空间,因为模式不同运行的栈空间就不一样.原创 2024-06-24 16:03:09 · 1049 阅读 · 0 评论 -
鸿蒙内核源码分析(工作模式篇) | CPU的七种工作模式
工作模式(Working mode) 也叫操作模式(Operating mode)又叫处理器模式(Processor mode),是 CPU 运行的重要参数,决定着处理器的工作方式,比如如何裁决特权级别和报告异常等。系列篇为方便理解,统一叫工作模式,CPU的工作模式.原创 2024-06-24 14:34:59 · 784 阅读 · 0 评论 -
鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位
在鸿蒙g_sysClock表示时钟周期,是CPU的赫兹,也就是上面说的Cycle,这是固定不变的,由硬件晶振的频率决定的.OsMain是内核运行的第一个C函数,首个子函数就是 osRegister,完成对g_sysClock的赋值原创 2024-06-22 20:08:27 · 991 阅读 · 0 评论 -
鸿蒙内核源码分析(原子操作篇) | 谁在为原子操作保驾护航
在支持多任务的操作系统中,修改一块内存区域的数据需要“读取-修改-写入”三个步骤。然而同一内存区域的数据可能同时被多个任务访问,如果在修改数据的过程中被其他任务打断,就会造成该操作的执行结果无法预知。原创 2024-06-21 22:39:36 · 686 阅读 · 0 评论 -
鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据
队列又称消息队列,是一种常用于任务间通信的数据结构。队列接收来自任务或中断的不固定长度消息,并根据不同的接口确定传递的消息是否存放在队列空间中。原创 2024-06-21 20:52:08 · 1026 阅读 · 0 评论 -
鸿蒙内核源码分析(CPU篇) | 整个内核就是一个死循环
指令是稳定的,但指令序列是变化的,只有这样计算机才能够实现用计算来解决一切问题这个目标。计算是稳定的,但计算的数据是多变的,多态的,地址是数据,控制信号也是数据.指令集本身也是数据(固定的数据).只有这样才能够让计算机不必修改基础架构却可以适应不断发展变化的技术革命。原创 2024-06-21 17:25:49 · 1136 阅读 · 0 评论 -
鸿蒙内核源码分析(定时器篇) | 哪个任务的优先级最高
软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器。当经过设定的Tick数后,会触发用户自定义的回调函数。软件定时器是系统资源,在模块初始化的时候已经分配了一块连续内存。软件定时器使用了系统的一个队列和一个任务资源,软件定时器的触发遵循队列规则,先进先出。定时时间短的定时器总是比定时时间长的靠近队列头,满足优先触发的准则。软件定时器以Tick为基本计时单位,当创建并启动一个软件定时器时,鸿蒙会根据当前系统Tick时间及设置的定时时长确定该定时器的到期Tick时间,并将该定时器控制结构挂入计时原创 2024-06-21 16:44:29 · 734 阅读 · 0 评论 -
鸿蒙内核源码分析(事件控制篇) | 任务间多对多的同步方案
先看官方对事件的描述.事件(Event)是一种任务间通信的机制,可用于任务间的同步。多任务环境下,任务之间往往需要同步操作,一个等待即是一个同步。事件可以提供一对多、多对多的同步操作。原创 2024-06-21 15:23:39 · 1033 阅读 · 0 评论 -
鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步
信号量(Semaphore) 是一种实现任务间通信的机制,可以实现任务间同步或共享资源的互斥访问。一个信号量的数据结构中,通常有一个计数值,用于对有效资源数的计数,表示剩下的可被使用的共享资源数,其值的含义分两种情况:原创 2024-06-20 21:33:51 · 727 阅读 · 0 评论 -
鸿蒙内核源码分析(进程通讯篇) | 九种进程间通讯方式速揽
鸿蒙内核默认支持 64个进程和128个任务,由进程池和任务池统一管理.内核设计尽量不去打扰它们,让各自过好各自的日子, 但大家毕竟在一口锅里吃饭, 不可能不与外界联系, 联系就得有渠道,有规矩.原创 2024-06-20 20:57:01 · 895 阅读 · 0 评论 -
鸿蒙内核源码分析(互斥锁篇) | 互斥锁比自旋锁丰满多了
图中是内核有关模块对互斥锁初始化,有文件,有内存,用消息队列等等,使用面非常的广.其实在给内核源码加注的过程中,会看到大量的自旋锁和互斥锁,它们的存在有序的保证了内核和应用程序的正常运行.是非常基础和重要的功能.原创 2024-06-20 16:51:52 · 971 阅读 · 0 评论 -
鸿蒙内核源码分析——(自旋锁篇)
自旋锁顾名思义,是一把自动旋转的锁,这很像厕所里的锁,进入前标记是绿色可用的,进入格子间后,手一带,里面的锁转个圈,外面标记变成了红色表示在使用,外面的只能等待.这是形象的比喻,但实际也是如此.原创 2024-06-20 13:48:23 · 853 阅读 · 0 评论 -
鸿蒙内核源码分析(并发并行篇) | 听过无数遍的两个概念
并发(Concurrent):多个线程在单个核心运行,同一时间只能一个线程运行,内核不停切换线程,看起来像同时运行,实际上是线程被高速的切换.原创 2024-06-19 22:26:03 · 710 阅读 · 0 评论 -
鸿蒙内核源码分析(进程概念篇) | 进程在管理哪些资源
从系统的角度看,进程是资源管理单元。进程可以使用或等待CPU、使用内存空间等系统资源,并独立于其它进程运行。原创 2024-06-19 21:10:30 · 898 阅读 · 0 评论 -
鸿蒙内核源码分析(内存规则篇) | 内存管理到底在管什么
那就是个奴才们能把主子给活活踩死, 想想主奴不分,吃喝拉撒睡都在一起,称兄道弟的想干啥? 没规矩不成方圆嘛,这事业肯定搞不大,单片机时代就是这种情况. 裸机编程,指针可以随便乱飞,数据可以随意覆盖,没有划定边界,没有明确职责,没有特权指令,没有地址保护,你还想像java开发一样,只管new内存,不去释放,应用可以随便崩但系统跑的妥妥的?想的美! 直接系统死机,甚至开机都开不了,主板直接报废了. 所以不能运行很复杂的程序,尽量可控,而且更是不可能支持应用的动态加载运行. 队伍大了就不好带了,方法得换, 游击队原创 2024-06-19 17:14:57 · 1038 阅读 · 0 评论 -
鸿蒙内核源码分析(汇编传参篇) | 如何传递复杂的参数
因为寄存器数量有限,所以只能通过这种方式来传递大的参数,想想也只能在main函数栈中保存大部分参数,同时又必须确保数据的连续性,好像也只能用这种办法了,一部分通过寄存器传,一部分通过拷贝的方式倒是挺有意思的.搭建开发环境Windows 开发环境的搭建Ubuntu 开发环境搭建Linux 与 Windows 之间的文件共享……构建子系统启动流程子系统分布式任务调度子系统分布式通信子系统驱动子系统……原创 2024-06-19 15:09:44 · 925 阅读 · 0 评论 -
鸿蒙内核源码分析(汇编基础篇) | CPU在哪里打卡上班
本篇通过拆解一段很简单的汇编代码来快速认识汇编,为读懂鸿蒙汇编打基础.系列篇后续将逐个剖析鸿蒙的汇编文件.原创 2024-06-19 14:10:09 · 610 阅读 · 0 评论 -
鸿蒙内核源码分析(线程概念篇) | 是谁在不断的折腾CPU
在鸿蒙内核线程(thread)就是任务(task),也可以叫作业.线程是对外的说法,对内就叫任务.跟王二毛一样, 在公司叫你王董,回到家里还有领导,就叫二毛啊.这多亲切.在鸿蒙内核是大量的task,很少看到thread,只出现在posix层.当一个东西理解就行.原创 2024-06-18 22:36:32 · 619 阅读 · 0 评论 -
鸿蒙内核源码分析(用栈方式篇) | 程序运行场地谁提供的
精读内核源码就绕不过汇编语言,鸿蒙内核有6个汇编文件,读不懂它们就真的很难理解以下问题.原创 2024-06-18 21:25:03 · 893 阅读 · 0 评论 -
鸿蒙内核源码分析(物理内存篇) | 怎么管理物理内存
那就是个奴才们能把主子给活活踩死, 想想主奴不分,吃喝拉撒睡都在一起,称兄道弟的想干啥? 没规矩不成方圆嘛,这事业肯定搞不大,单片机时代就是这种情况. 裸机编程,指针可以随便乱飞,数据可以随意覆盖,没有划定边界,没有明确职责,没有特权指令,没有地址保护,你还想像java开发一样,只管new内存,不去释放,应用可以随便崩但系统跑的妥妥的?想的美! 直接系统死机,甚至开机都开不了,主板直接报废了. 所以不能运行很复杂的程序,尽量可控,而且更是不可能支持应用的动态加载运行. 队伍大了就不好带了,方法得换, 游击队原创 2024-06-18 20:42:29 · 985 阅读 · 0 评论 -
鸿蒙内核源码分析(内存规则篇) | 内存管理到底在管什么
这是整个紫荆城的全貌图,里面的内核虚拟空间是主人专用的,里面放的是主人的资料,数据,奴才永远进不去,kernel heap 也是给主人专用的动态内存空间,管理奴才和日常运作开销很多时候需要动态申请内存,这个是专门用来提供给主人使用的。奴才之间是不能随意勾连,登门问客的,防止一块搞政变. 他们都有属于自己的活动空间,而且活动空间还巨大巨大,大到奴才们觉得整个紫荆城都是他们家的,给你这么大空间你干活才有动力,奴才们是铆足了劲一个个尽情的表演各种剧本,有玩电子商务的,有玩游戏的,有搞直播的等等。原创 2024-06-18 18:02:34 · 571 阅读 · 0 评论 -
鸿蒙终于翻身!首次超越苹果!这势头太猛了!
最近,科技圈又被鸿蒙的“历史性突破”刷屏了。根据Counterpoint Research发布的最新数据,华为鸿蒙OS在中国市场的份额由2023年一季度的8%飙升至2024年一季度的17%,**首次超越苹果iOS,荣登中国第二大手机操作系统的宝座,**上演了一出“逆袭大战”!数据来源Counterpoint Research(如侵删)相比之下,苹果iOS和安卓的份额均出现了下滑。原创 2024-06-18 16:43:53 · 1085 阅读 · 0 评论 -
鸿蒙内核源码分析(内存映射篇) | 虚拟内存虚在哪里
虚拟地址(VA): 就是线性地址, 鸿蒙内存部分全是VA的身影, 是由编译器和链接器在定位程序时分配的,每个应用程序都使用相同的虚拟内存地址空间,而这些虚拟内存地址空间实际上分别映射到不同的实际物理内存空间上。CPU只知道虚拟地址,向虚拟地址要数据,但在其保护模式下很悲催地址信号在路上被MMU拦截了,MMU把虚拟地址换成了物理地址,从而拿到了真正的数据。原创 2024-06-18 15:42:25 · 1084 阅读 · 0 评论 -
鸿蒙内核源码分析(内存篇) | 内存管理
奴才之间是不能随意勾连,登门问客的,防止一块搞政变. 他们都有属于自己的活动空间,而且活动空间还巨大巨大,大到奴才们觉得整个紫荆城都是他们家的,给你这么大空间你干活才有动力,奴才们是铆足了劲一个个尽情的表演各种剧本,有玩电子商务的,有玩游戏的,有搞直播的等等。这是整个紫荆城的全貌图,里面的内核虚拟空间是主人专用的,里面放的是主人的资料,数据,奴才永远进不去,kernel heap 也是给主人专用的动态内存空间,管理奴才和日常运作开销很多时候需要动态申请内存,这个是专门用来提供给主人使用的。原创 2024-06-17 22:02:46 · 1013 阅读 · 0 评论 -
鸿蒙内核源码分析(调度机制篇) | 任务是如何被调度执行的
鸿蒙的内核中 Task 和 线程 在广义上可以理解为是一个东西,但狭义上肯定会有区别,区别在于管理体系的不同,Task是调度层面的概念,线程是进程层面概念。比如 main() 函数中首个函数 OsSetMainTask(); 就是设置启动任务,但此时啥都还没开始呢,Kprocess 进程都没创建,怎么会有大家一般意义上所理解的线程呢。狭义上的后续有 鸿蒙内核源码分析(启动过程篇) 来说明。不知道大家有没有这种体会,学一个东西的过程中要接触很多新概念,尤其像 Java/android 的生态,概念贼多,很多同原创 2024-06-17 21:19:44 · 709 阅读 · 0 评论 -
鸿蒙内核源码分析(调度队列篇) | 内核有多少个调度队列
IPC队列后续有专门的博文讲述,这两个队列的数据结构实现采用的都是双向循环链表,再说一遍LOS_DL_LIST实在是太重要了,是理解鸿蒙内核的关键,说是最重要的代码一点也不为过,源码出现在 sched_sq模块,说明是用于任务的调度的,sched_sq模块只有两个文件,另一个los_sched.c就是调度代码。原创 2024-06-17 21:02:57 · 719 阅读 · 0 评论 -
鸿蒙内核源码分析(任务管理篇) | 任务池是如何管理的?
当前进程内高优先级的线程可抢占当前进程内低优先级线程,当前进程内低优先级线程必须在当前进程内高优先级线程阻塞或结束后才能得到调度。原创 2024-06-17 17:03:40 · 857 阅读 · 0 评论 -
鸿蒙内核源码分析(任务调度篇) | 任务是内核调度的单元
当前进程内高优先级的线程可抢占当前进程内低优先级线程,当前进程内低优先级线程必须在当前进程内高优先级线程阻塞或结束后才能得到调度。原创 2024-06-17 15:29:56 · 1077 阅读 · 0 评论 -
鸿蒙内核源码分析(时钟任务篇)
时钟节拍由配置为中断触发模式的硬件定时器产生,当中断到来时,将调用一次:void OsTickHandler(void),通知操作系统已经过去一个系统时钟;不同硬件定时器中断实现都不同原创 2024-06-17 14:48:47 · 681 阅读 · 0 评论 -
鸿蒙内核源码分析(进程管理篇) | 谁在管理内核资源?
的情况下 系统最多是64个进程,但有两个进程先被占用,用户态和内核态各一个,他们是后续创建进程的根,所以最多留给外面的只有 62个进程可创建,代码的最后两个根进程的task阻塞链表被清空了,因为没有阻塞任务当然要清空.进程创建或fork时,拿到该进程控制块后进入Init状态,处于进程初始化阶段,当进程初始化完成将进程插入调度队列,此时进程进入就绪状态。阻塞进程内的任意线程恢复就绪态时,进程被加入到就绪队列,同步转为就绪态,若此时发生进程切换,则进程状态由就绪态转为运行态。原创 2024-06-15 23:03:58 · 586 阅读 · 0 评论 -
谁是鸿蒙内核最重要的结构体?
答案一定是:(双向链表),它长这样.结构体够简单了吧,只有前后两个指向自己的指针,但恰恰是因为太简单,所以才太不简单. 就像氢原子一样,宇宙中无处不在,占比最高,原因是因为它最简单,最稳定!内核的各个模块都能看到双向链表的身影,下图是各处初始化双向链表的操作,因为太多了,只截取了部分:很多人问图怎么来的,是阅读大型C/C++工程的必备工具,要用4.0否则中文有乱码. [下载 source insight 4.0 破解版]可以豪不夸张的说理解及相关函数是读懂鸿蒙内核的关键。原创 2024-06-15 22:48:51 · 607 阅读 · 0 评论