鸿蒙内核源码分析(源码注释篇) | 鸿蒙必须成功,也必然成功 | 百篇博客分析HarmonyOS源码
百万汉字注解 >> 精读鸿蒙源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新< gitee | github | coding [>]()
百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,主流站点定期更新中< osc | 51cto | harmony [>]()
百万汉字注解
kernel_liteos_a_note 是在鸿蒙官方开源项目 kernel_liteos_a 基础上给源码加上中文注解的版本.
同步官方源码历史
- 每月同步一次
- 2021/4/21 -- 官方优化了很多之前吐槽的地方,点赞鸿蒙的效率
- 2020/9/16 -- 中文注解版起点
为何要精读内核源码?
-
每位码农的学职生涯,都应精读一遍内核源码.以浇筑好计算机知识大厦的地基,地基纵深的坚固程度,很大程度能决定未来大厦能盖多高。那为何一定要精读细品呢?
- 因为内核代码本身并不太多,都是浓缩的精华,精读是让各个知识点高频出现,不孤立成点状记忆,让各点相连成线,线面成体,刻意练习,闪爆大脑,如此短时间内容易结成一张高浓度,高密度的底层网,内核画面越描越清晰,越雕越深刻,不断训练大脑肌肉记忆,将记忆从临时区转移到永久区。跟骑单车一样,一旦学会,即便多年不骑,照样跨上就走,游刃有余。
热爱是所有的理由和答案
-
因大学时阅读
linux 2.6
内核痛并快乐的经历,一直有个心愿,如何让更多对内核感兴趣的朋友减少阅读时间,加速对计算机系统级的理解,而不至于过早的放弃.但因过程种种,多年一直没有行动,基本要放弃这件事了.恰逢 2020/9/10 鸿蒙正式开源,重新激活了多年的心愿,就有那么点一发不可收拾了. - 到 2021/3/10 刚好半年, 对内核源码的注解已完成了 70% ,对内核源码的博客分析已完成了40篇, 每天都很充实,很兴奋,连做梦内核代码都在往脑海里鱼贯而入.如此疯狂地做一件事还是当年谈恋爱的时候, 只因热爱, 热爱是所有的理由和答案. :P
(〃・ิ‿・ิ)ゞ鸿蒙内核开发者
-
感谢开放原子开源基金会,致敬鸿蒙内核开发者提供了如此优秀的源码,一了多年的夙愿,津津乐道于此.精读内核源码加注并整理成档是件很有挑战的事,时间上要以月甚至年为单位,但正因为很难才值得去做! 干困难事,方有所得;专注聚焦,必有所获.
- 从内核一行行的代码中能深深感受到开发者各中艰辛与坚持,及鸿蒙生态对未来的价值,这些是张嘴就来的网络喷子们永远不能体会到的.可以毫不夸张的说鸿蒙内核源码可作为大学 C语言,数据结构,操作系统,汇编语言,计算机组成原理 五门课程的教学项目.如此宝库,不深入研究实在是暴殄天物,于心不忍,注者坚信鸿蒙大势所趋,未来可期,其必须成功,也必然成功,誓做其坚定的追随者和传播者.
加注方式是怎样的?
-
因鸿蒙内核6W+代码量,本身只有较少的注释, 中文注解以不对原有代码侵入为前提,源码中所有英文部分都是原有注释,所有中文部分都是中文版的注释,同时为方便同步官方版本的更新,尽量不去增加代码的行数,不破坏文件的结构,注释多类似以下的方式:
在重要模块的.c/.h文件开始位置先对模块功能做整体的介绍,例如异常接管模块注解如图所示:
注解过程中查阅了很多的资料和书籍,在具体代码处都附上了参考链接.
-
而函数级注解会详细到重点行,甚至每一行, 例如申请互斥锁的主体函数,不可谓不重要,而官方注释仅有一行,如图所示
-
另外画了一些字符图方便理解,直接嵌入到头文件中,比如虚拟内存的全景图,因没有这些图是很难理解虚拟内存是如何管理的.
理解内核的三个层级
注者认为理解内核可分三个层级:
-
普通概念映射级: 这一级不涉及专业知识,用大众所熟知的公共认知就能听明白是个什么概念,也就是说用一个普通人都懂的概念去诠释或者映射一个他们从没听过的概念.让陌生的知识点与大脑中烂熟于心的知识点建立多重链接,加深记忆.说别人能听得懂的话这很重要!!! 一个没学过计算机知识的卖菜大妈就不可能知道内核的基本运作了吗? 不一定!在系列篇中试图用 鸿蒙内核源码分析(总目录)之故事篇 去引导这一层级的认知,希望能卷入更多的人来关注基础软件,尤其是那些资本大鳄,加大对基础软件的投入.
-
专业概念抽象级: 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用开发者,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它具体实现的认知.试图用 鸿蒙内核源码分析(总目录)百篇博客 去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱.
- 具体微观代码级: 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计?有没有更好的方案? 鸿蒙内核源码注解分析 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹.但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望鸿蒙内核源码注解分析能让更多爱好者快速的理解内核,共同进步.
百篇博客分析
鸿蒙源码百篇博客 往期回顾
在给 鸿蒙内核源码加中文注释 过程中,整理出以下文章.内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感.百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思.更希望让内核变得栩栩如生,倍感亲切.确实有难度,自不量力,但已经出发,回头已是不可能的了.:P
写文章比写代码累多了,越深入研究,越觉得没写好,所以文章和注解会反复修正, .xx代表修改的次数, 将持续完善源码注解和文档内容,精雕细琢,言简意赅, 尽全力打磨精品内容.
-
v51.xx (ELF反汇编篇) | 程序的入口函数并不是main [<]() harmony | 51cto | osc [>]()
-
v50.xx (编译环境篇) | 编译鸿蒙看这篇或许真的够了 [<]() harmony | 51cto | osc [>]()
-
v49.xx (信号消费篇) | 谁让CPU连续四次换栈运行 [<]() harmony | 51cto | osc [>]()
-
v48.xx (信号生产篇) | 信号已经五十多岁了 [<]() harmony | 51cto | osc [>]()
-
v47.xx (进程回收篇) | 进程在临终前如何向老祖宗托孤 [<]() harmony | 51cto | osc [>]()
-
v46.xx (特殊进程篇) | 龙生龙,凤生凤,老鼠生儿会打洞 [<]() harmony | 51cto | osc [>]()
-
v45.xx (fork篇) | fork是如何做到调用一次,返回两次的 [<]() harmony | 51cto | osc [>]()
-
v44.xx (中断管理篇) | 硬中断的实现像观察者模式 [<]() harmony | 51cto | osc [>]()
-
v43.xx (中断概念篇) | 外人眼中权势滔天的当红海公公 [<]() harmony | 51cto | osc [>]()
-
v42.xx (中断切换篇) | 中断切换又在切换什么 [<]() harmony | 51cto | osc [>]()
-
v41.xx (任务切换篇) | 汇编告诉任务到底在切换什么 [<]() harmony | 51cto | osc [>]()
-
v40.xx (汇编汇总篇) | 所有的汇编代码都在呢 [<]() harmony | 51cto | osc [>]()
-
v39.xx (异常接管篇) | 社会很单纯,复杂的是人 [<]() harmony | 51cto | osc [>]()
-
v38.xx (寄存器篇) | 看完再也不对寄存器怕怕 [<]() harmony | 51cto | osc [>]()
-
v37.xx (系统调用篇) | 系统调用到底经历了什么 [<]() harmony | 51cto | osc [>]()
-
v36.xx (工作模式篇) | cpu是韦小宝,有哪七个老婆 [<]() harmony | 51cto | osc [>]()
-
v35.xx (时间管理篇) | tick是操作系统的基本时间单位 [<]() harmony | 51cto | osc [>]()
-
v34.xx (原子操作篇) | 是谁在为原子操作保驾护航 [<]() harmony | 51cto | osc [>]()
-
v33.xx (消息队列篇) | 进程间如何异步解耦传递大数据 [<]() harmony | 51cto | osc [>]()
-
v32.xx (cpu篇) | 整个内核就是一个死循环 [<]() harmony | 51cto | osc [>]()
-
v31.xx (定时器篇) | 内核最高优先级任务是谁 [<]() harmony | 51cto | osc [>]()
-
v30.xx (事件控制篇) | 任务间多对多的同步方案 [<]() harmony | 51cto | osc [>]()
-
v29.xx (信号量篇) | 信号量解决任务的什么问题 [<]() harmony | 51cto | osc [>]()
-
v28.xx (进程通讯篇) | 九种进程间通讯方式速揽 [<]() harmony | 51cto | osc [>]()
-
v27.xx (互斥锁篇) | 比自旋锁丰满的互斥锁 [<]() harmony | 51cto | osc [>]()
-
v26.xx (自旋锁篇) | 自旋锁当立贞节牌坊 [<]() harmony | 51cto | osc [>]()
-
v25.xx (并发并行篇) | 两个字永远记住二者区别 [<]() harmony | 51cto | osc [>]()
-
v24.xx (进程概念篇) | 进程在管理哪些资源 [<]() harmony | 51cto | osc [>]()
-
v23.xx (汇编传参篇) | 汇编如何传递复杂的参数 [<]() harmony | 51cto | osc [>]()
-
v22.xx (汇编基础篇) | cpu在哪里打卡上班 [<]() harmony | 51cto | osc [>]()
-
v21.xx (线程概念篇) | 是谁在不断的折腾cpu [<]() harmony | 51cto | osc [>]()
-
v20.xx (用栈方式篇) | 栈是构建底层运行的基础 [<]() harmony | 51cto | osc [>]()
-
v19.xx (位图管理篇) | 为何进程和线程优先级都是32个 [<]() harmony | 51cto | osc [>]()
-
v18.xx (源码结构篇) | 梳理内核源文件的作用和含义 [<]() harmony | 51cto | osc [>]()
-
v17.xx (物理内存篇) | 怎么管理物理内存 [<]() harmony | 51cto | osc [>]()
-
v16.xx (内存规则篇) | 内存管理到底在管什么 [<]() harmony | 51cto | osc [>]()
-
v15.xx (内存映射篇) | 虚拟内存虚在哪里 [<]() harmony | 51cto | osc [>]()
-
v14.xx (内存汇编篇) | 什么是虚拟内存的实现基础 [<]() harmony | 51cto | osc [>]()
-
v13.xx (源码注释篇) | 鸿蒙必须成功,也必然成功 [<]() harmony | 51cto | osc [>]()
-
v12.xx (内存管理篇) | 虚拟内存全景图是怎样的 [<]() harmony | 51cto | osc [>]()
-
v11.xx (内存分配篇) | 内存有哪些分配方式 [<]() harmony | 51cto | osc [>]()
-
v10.xx (内存主奴篇) | 紫禁城的主子和奴才如何相处 [<]() harmony | 51cto | osc [>]()
-
v09.xx (调度故事篇) | 用故事说内核调度过程 [<]() harmony | 51cto | osc [>]()
-
v08.xx (总目录) | 百万汉字注解 百篇博客分析 [<]() harmony | 51cto | osc [>]()
-
v07.xx (调度机制篇) | 任务是如何被调度执行的 [<]() harmony | 51cto | osc [>]()
-
v06.xx (调度队列篇) | 内核有多少个调度队列 [<]() harmony | 51cto | osc [>]()
-
v05.xx (任务管理篇) | 任务池是如何管理的 [<]() harmony | 51cto | osc [>]()
-
v04.xx (任务调度篇) | 任务是内核调度的单元 [<]() harmony | 51cto | osc [>]()
-
v03.xx (时钟任务篇) | 谁是触发调度的最大动力 [<]() harmony | 51cto | osc [>]()
-
v02.xx (进程管理篇) | 进程是内核资源管理单元 [<]() harmony | 51cto | osc [>]()
- v01.xx (双向链表篇) | 谁是内核最重要结构体 [<]() harmony | 51cto | osc [>]()
主流站点输出
进入 >> osc | csdn | 51cto | 掘金 | 公众号 | 头条号 | gitee | github
Fork Me
注解几乎占用了所有的空闲时间,每天都会更新,每天都有新感悟,一行行源码在不断的刷新和拓展对内核知识的认知边界. 对已经关注和fork的同学请及时同步最新的注解内容. 内核知识点体量实在太过巨大,跟软件一样,会存在bug,但会反复Debug.
有哪些特殊的记号
-
搜索
@note_pic
可查看绘制的全部字符图 -
搜索
@note_why
是尚未看明白的地方,有看明白的,请Pull Request完善 -
搜索
@note_thinking
是一些的思考和建议 -
搜索
@note_#if0
是由第三方项目提供不在内核源码中定义的极为重要结构体,为方便理解而添加的。 - 搜索
@note_good
是给源码点赞的地方
新增zzzz目录
- 中文加注版比官方版无新增文件,只多了一个zzz的目录,里面放了一些文件,它与内核代码无关,大家可以忽略它,取名zzz是为了排在最后,减少对原有代码目录级的侵入,zzz的想法源于微信中名称为AAA的那帮朋友,你的微信里应该也有他们熟悉的身影吧 :|P
两句话

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
han_spring
spring概述 什么是Spring Spring 是一个轻量级Java开发框架,最早有Rod Johnson 创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring 负责基础架构,因此Java开发者可以专注于应用程序的开发。 Spring 最根本的使命是解决企业级应用开发的复杂性,即简化Java开发 Spring 可以做很多事情,它为企业级开发提供了丰富的功能,但是这些功能的底层都依赖于它的两个核心特性,也就是依赖注入(dependency injection,DI)和面向切面编程(aspect-oriented programming,AOP)。 为了降低Java开发的复杂性,Spring 采取了一下4种关键策略: 基于POJO的轻量级和最小侵入型编程 通过依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模板减少样板式代码 Spring 框架的设计目标,设计理念,核心是什么 Spring设计目标: Sp...
- 下一篇
汇总字段介绍以及在汇率变化后货币数据类型的汇总字段怎么变的实践研究
我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复439或者20210425可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 关于汇总字段的官方文档请参考Define rollup columns that aggregate values,我就不翻译介绍了,融入到后面的实践演示与研究中。 首先我建立一个汇总字段,如下,主要是 Field Type 要选择 Rollup,保存。 保存后点击 Field Type旁边的Edit按钮进行编辑字段使用的公式,我这里设置如下,是一个常见的中规中矩的设置,汇总关联的有效的(Status = Active)的子实体(Demo Sub Entity)中一个货币字段的值,我这里用的是SUM,当然还支持COUNT, AVG, MIN, MAX操...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS关闭SELinux安全模块
- CentOS8安装Docker,最新的服务器搭配容器使用
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池