天天看点

v18.02 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 百篇博客分析OpenHarmony源码

子曰:“富而可求也,虽执鞭之士,吾亦为之。如不可求,从吾所好。” 《论语》:述而篇

v18.02 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 百篇博客分析OpenHarmony源码

百篇博客系列篇.本篇为:

v18.xx 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义

前因后果相关篇为:

  • v08.03 鸿蒙内核源码分析(总目录) | 百万汉字注解 百篇博客分析
  • v09.04 鸿蒙内核源码分析(调度故事) | 用故事说内核调度过程
  • v10.03 鸿蒙内核源码分析(内存主奴) | 皇上和奴才如何相处
  • v13.05 鸿蒙内核源码分析(源码注释) | 每天死磕一点点
  • v18.02 鸿蒙内核源码分析(源码结构) | 内核每个文件的含义
  • v52.05 鸿蒙内核源码分析(静态站点) | 五一哪也没去就干了这事

鸿蒙内核源码注解分析

点击文件查看源码

  • kernel_liteos_a_note
    • kernel
      • base
      • core -> -> 这个core指的是与CPU core相关的文件
      • los_bitmap.c -> -> 位图管理器有什么作用 ? 在内核常应用于哪些场景 ?
      • los_process.c -> 鸿蒙内核源码分析(进程管理篇) -> 进程是内核的资源管理单元,它是如何管理 任务, 内存,文件的 ? 进程间是如何协作的 ?
      • los_sortlink.c -> -> 排序链表的实现,它的应用场景是怎样的 ?
      • los_swtmr.c -> -> 内核的定时器是如何实现和管理的 ?
      • los_sys.c -> -> 几个跟tick相关的转化函数
      • los_task.c -> 鸿蒙内核源码分析(Task管理篇) -> Task是内核调度的单元,它解决了什么问题 ? 如何调度 ?
      • los_tick.c -> 鸿蒙内核源码分析(时钟管理篇) -> 是谁在一直触发调度 ? 硬时钟中断都干了些什么事?
      • los_timeslice.c -> -> 进程和任务能一直占有CPU吗 ? 怎么合理的分配时间 ?
      • ipc -> -> 进程间通讯有哪些方式 ? 请说出三种 ? 是如何实现的 ?
      • los_event.c -> -> 事件解决了什么问题 ? 怎么管理的 ?
      • los_futex.c -> -> futex 是Fast Userspace muTexes的缩写(快速用户空间互斥体),它有什么作用 ?
      • los_ipcdebug.c -> -> 进程间通讯如何调试 ?
      • los_mux.c -> -> 互斥量,有你没我的零和博弈, 为什么需要互斥量 ? 是如何实现的 ?
      • los_queue.c -> -> 内核消息队列是如何实现的 ? 对长度和大小有限制吗 ?
      • los_queue_debug.c -> -> 如何调试消息队列 ?
      • los_sem.c -> -> 信号量解决了什么问题 ? 它的本质是什么 ?
      • los_sem_debug.c -> -> 如何调试信号量 ?
      • los_signal.c -> -> 信号解决了什么问题? 你知道哪些信号 ?
      • mem -> -> 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一
        • bestfit -> -> 动态内存管理的优点是按需分配,那缺点又是什么?
          • los_memory.c -> -> 鸿蒙内核中动态内存池由哪三个部分组成 ?
          • los_multipledlinkhead.c -> -> 什么是最佳适应算法? 是如何实现 ?
        • bestfit_little -> -> bestfit_little算法是在最佳适配算法的基础上加入slab机制形成的算法。
          • los_heap.c -> -> slab算法机制是怎样的? 又是如何实现的 ?
        • common -> ->
        • membox -> -> 静态内存池的优点是分配和释放效率高,无碎片, 那缺点呢 ?
          • los_membox.c -> -> 静态内存有什么用? 是如何实现的?
      • misc -> ->
      • kill_shellcmd.c -> -> shell命令kill的实现,熟悉的 kill 9 18 的背后发生了什么?
        • los_misc.c -> ->
        • los_stackinfo.c -> -> 栈有哪些信息 ? 如何检测栈是否异常 ?
        • mempt_shellcmd.c -> -> 和内存相关的shell命令有哪些 ?
        • swtmr_shellcmd.c -> -> 和软时钟相关的shell命令有哪些 ?
        • sysinfo_shellcmd.c -> -> 和系统信息相关的shell命令有哪些 ?
        • task_shellcmd.c -> -> 和任务相关的shell命令有哪些 ?
        • vm_shellcmd.c -> -> 和虚拟内存相关的shell命令有哪些 ?
      • mp -> -> MP指支持多处理器的模块
        • los_lockdep.c -> -> 死锁是怎么发生的 ? 如何检测死锁 ?
        • los_mp.c -> -> 鸿蒙最大支持多少个CPU ? 它们是如何工作的? CPU之间是如何通讯的 ?
        • los_percpu.c -> -> CPU有哪些信息 ?
        • los_stat.c -> -> CPU的运行信息如何统计 ?
      • om -> ->
        • los_err.c -> ->
      • sched/sched_sq -> ->
        • los_priqueue.c -> 鸿蒙内核源码分析(调度队列篇) -> 为什么只有就绪状态才会有队列 ?
        • los_sched.c -> 鸿蒙内核源码分析(调度机制篇) -> 哪些情况下会触发调度 ? 调度算法是怎样的 ?
      • vm -> 鸿蒙内核源码分析(内存规则篇) -> 什么是虚拟内存 ? 虚拟内存全景图是怎样的 ?
        • los_vm_boot.c -> -> 开机阶段内存是如何初始化的 ?
        • los_vm_dump.c -> -> 如何 dump 内存数据 ?
        • los_vm_fault.c -> -> 为什么会缺页 ? 缺页怎么处理 ?
        • los_vm_filemap.c -> -> 文件和内存是如何映射? 什么是 写时拷贝技术(cow) ?
        • los_vm_iomap.c -> -> 设备和内存是如何映射 ?
        • los_vm_map.c -> 鸿蒙内核源码分析(内存映射篇) -> 内核空间,用户空间,线性区是如何分配的,虚拟内存<-->物理内存是如何映射的 ?
        • los_vm_page.c -> -> 什么是物理页框,哪些地方会用到它 ?
        • los_vm_phys.c -> 鸿蒙内核源码分析(物理内存篇) -> 段页式管理,物理内存是如何分配和回收的 ?
        • los_vm_scan.c -> -> LRU算法是如何运作的 ?
        • los_vm_syscall.c -> -> 系统调用之内存, 用户进程如何申请内存 ? 底层发生了什么 ?
        • oom.c -> -> 内存溢出是如何检测的 ?
        • shm.c -> -> 共享内存是如何实现的 ?
        • console.c -> -> 熟悉的控制台是如何实现的 ?
        • hwi_shell.c -> -> 如何查询硬件中断 ?
        • los_cir_buf.c -> -> 环形缓冲区的读写是如何实现的 ? 常用于什么场景下 ?
        • los_config.c -> -> 内核有哪些配置信息 ?
        • los_exc_interaction.c -> -> 任务出现异常如何检测 ?
        • los_excinfo.c -> -> 异常有哪些信息 ? 如何记录异常信息 ?
        • los_hilog.c -> -> 内核是如何封装日志的 ?
        • los_magickey.c -> -> 魔法键有什么作用 ?
        • los_printf.c -> -> 内核对 printf 做了哪些封装 ?
        • los_rootfs.c -> -> 什么是根文件系统 ? 为什么需要它 ?
        • los_seq_buf.c -> ->
        • virtual_serial.c -> -> 如何实现访问串口如同访问文件一样方便 ?
      • extended -> ->
        • cppsupport -> ->
          • los_cppsupport.c -> -> 对C++是如何支持的 ?
        • cpup -> ->
          • cpup_shellcmd.c -> -> 如何实时查询系统CPU的占用率 ?
          • los_cpup.c -> -> 内核如何做到实时统计CPU性能的 ?
        • dynload/src ->
          • los_exec_elf.c -> -> 鸿蒙如何运行ELF ? 什么是腾笼换鸟技术 ?
          • los_load_elf.c -> -> 鸿蒙如何动态加载 ELF ?
        • liteipc -> ->
          • hm_liteipc.c -> -> 如何用文件的方式读取消息队列 ? liteipc和普通消息队列区别有哪些 ?
        • tickless -> ->
          • los_tickless.c -> -> 新定时机制新在哪里 ? 它解决了哪些问题 ?
        • trace -> ->
          • los_trace.c -> -> 如何实现跟踪 ? 内核在跟踪什么 ?
        • vdso -> -> 用户空间访问内核空间有哪些途径 ?
          • src -> ->
            • los_vdso.c -> -> VDSO(Virtual Dynamically-linked Shared Object) 是如何实现的 ?
            • los_vdso_text.S -> ->
          • usr -> ->
            • los_vdso_sys.c -> ->
      • user/src -> ->
      • los_user_init.c -> ->

百篇博客分析.深挖内核地基

  • 给鸿蒙内核源码加注释过程中,整理出以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切.确实有难度,自不量力,但已经出发,回头已是不可能的了。 😛
  • 与代码有bug需不断debug一样,文章和注解内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,v**.xx 代表文章序号和修改的次数,精雕细琢,言简意赅,力求打造精品内容。

按功能模块:

基础工具 加载运行 进程管理 编译构建

双向链表

位图管理

用栈方式

定时器

原子操作

时间管理

ELF格式

ELF解析

静态链接

重定位

进程映像

进程概念

Fork

特殊进程

进程回收

信号生产

信号消费

Shell编辑

Shell解析

编译环境

编译过程

环境脚本

构建工具

gn应用

忍者ninja

进程通讯 内存管理 前因后果 任务管理

自旋锁

互斥锁

信号量

事件控制

消息队列

内存分配

内存汇编

内存映射

内存规则

物理内存

总目录

调度故事

内存主奴

源码注释

源码结构

静态站点

时钟任务

任务调度

调度队列

调度机制

线程概念

并发并行

CPU

系统调用

任务切换

文件系统 硬件架构

文件概念

索引节点

挂载目录

根文件系统

字符设备

VFS

文件句柄

管道文件

汇编基础

汇编传参

工作模式

寄存器

异常接管

汇编汇总

中断切换

中断概念

中断管理

百万汉字注解.精读内核源码

四大码仓中文注解 . 定期同步官方代码

v18.02 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 百篇博客分析OpenHarmony源码

鸿蒙研究站( weharmonyos ) | 每天死磕一点点,原创不易,欢迎转载,请注明出处。若能支持点赞更好,感谢每一份支持。

继续阅读