简介

近期在阅读鸿蒙liteOS_a,由于是初次探索内核的奥秘。将一些阅读的心得进行分享。希望能在作为笔记的同时,也能帮助更多人学习。
感谢图灵大佬的注释项目,使我能够更加快速的理解。
https://weharmony.github.io/

核心模块

核心模块位于:kernel -> base -> core
其中包括:
los_bitmap.c 用于位操作,改变标志位。
los_process.c 用于控制并发、并行、单核多进程、多核多线程的管理
los_sortlik.c 用于排序
los_swtmr.c 用于定时器
los_sys.c 用于时间管理,转换秒与毫秒,了解当前系统运行时间
los_task.c 用于任务状态管理,一个任务代表一个线程,管理其运行状态。
los_tick.c 用于系统时钟、节拍器。

任务管理(los_task.c)

#include "los_task_pri.h" //定义任务信号类型。
#include "los_base_pri.h". //定义基础类型。
#include "los_event_pri.h" //定义事件类型。
#include "los_exc.h" //内核的异常处理文件。
#include "los_hw_pri.h" //文件是中断模块,但是我没有找到源码,不清楚原因。
#include "los_init.h" //初始化模块。
#include "los_memstat_pri.h" //内存统计模块。
#include "los_mp.h" //核间中断 CPU唤醒和调度和停止
#include "los_mux_pri.h" //进程配置和内存管理
#include "los_sched_pri.h" //调度周期
#include "los_sem_pri.h" //信号控制结构
#include "los_spinlock.h" //自旋锁结构
#include "los_strncpy_from_user.h" //看着像是宏拷贝,没找到源码
#include "los_percpu_pri.h" //对接CPU的结构#include "los_process_pri.h" // 进程的结构
#include "los_vm_map.h" //虚拟化映射管理
#include "los_vm_syscall.h" //定义虚拟化系统调用
#include "los_signal.h" //软中断信号
#include "los_hook.h" //钩子池,下HOOK在这里。#ifdef LOSCFG_KERNEL_CPUP
#include "los_cpup_pri.h" // CPU控制块结构体
#endif
#ifdef LOSCFG_BASE_CORE_SWTMR_ENABLE
#include "los_swtmr_pri.h" //定时器配置
#endif
#ifdef LOSCFG_KERNEL_LITEIPC
#include "hm_liteipc.h" // 控制内核空间输入输出
#endif
#ifdef LOSCFG_ENABLE_OOM_LOOP_TASK
#include "los_oom.h" //oom结构体
#endif#if (LOSCFG_BASE_CORE_TSK_LIMIT <= 0)
#error "task maxnum cannot be zero"
#endif  /* LOSCFG_BASE_CORE_TSK_LIMIT <= 0 */LITE_OS_SEC_BSS LosTaskCB    *g_taskCBArray;//任务池 128个
LITE_OS_SEC_BSS LOS_DL_LIST  g_losFreeTask;//空闲任务链表
LITE_OS_SEC_BSS LOS_DL_LIST  g_taskRecycleList;//回收任务链表
LITE_OS_SEC_BSS UINT32       g_taskMaxNum;//任务最大个数
LITE_OS_SEC_BSS UINT32       g_taskScheduled; /* one bit for each cores *///任务调度器,每个CPU都有对应位
LITE_OS_SEC_BSS EVENT_CB_S   g_resourceEvent;//资源的事件
/* spinlock for task module, only available on SMP mode */
LITE_OS_SEC_BSS SPIN_LOCK_INIT(g_taskSpin); //自旋锁初始化STATIC VOID OsConsoleIDSetHook(UINT32 param1,UINT32 param2) __attribute__((weakref("OsSetConsoleID")));//系统控制台ID设置HOOK#define OS_CHECK_TASK_BLOCK (OS_TASK_STATUS_DELAY |    \OS_TASK_STATUS_PENDING |  \OS_TASK_STATUS_SUSPENDED)/* temp task blocks for booting procedure */
LITE_OS_SEC_BSS STATIC LosTaskCB                g_mainTask[LOSCFG_KERNEL_CORE_NUM];//启动引导过程中使用的临时任务LosTaskCB *OsGetMainTask()//系统获取主任务
{return (LosTaskCB *)(g_mainTask + ArchCurrCpuid()); //ArchCurrCpuid当前CPUID
}VOID OsSetMainTask() //系统设置主任务
{UINT32 i;CHAR *name = "osMain";//任务名称//为每个CPU core 设置mainTaskfor (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {g_mainTask[i].taskStatus = OS_TASK_STATUS_UNUSED;g_mainTask[i].taskID = LOSCFG_BASE_CORE_TSK_LIMIT;//128g_mainTask[i].priority = OS_TASK_PRIORITY_LOWEST;//31
#ifdef LOSCFG_KERNEL_SMP_LOCKDEPg_mainTask[i].lockDep.lockDepth = 0;g_mainTask[i].lockDep.waitLock = NULL;
#endif(VOID)strncpy_s(g_mainTask[i].taskName, OS_TCB_NAME_LEN, name, OS_TCB_NAME_LEN - 1);LOS_ListInit(&g_mainTask[i].lockList);//初始化任务锁链表,上面挂的是任务已申请到的互斥锁}
}
//空闲任务,每个CPU都有自己的空闲任务
LITE_OS_SEC_TEXT WEAK VOID OsIdleTask(VOID)
{while (1) {//只有一个死循环WFI;}
}

未完待续。。。

鸿蒙内核阅读笔记-任务管理(los_task.c)相关推荐

  1. 鸿蒙内核阅读笔记-定时器

    鸿蒙内核阅读笔记-定时器 简介 核心模块 定时器(los_swtmr.c) 介绍 阅读代码 函数部分 简介 近期在阅读鸿蒙liteOS_a,由于是初次探索内核的奥秘.将一些阅读的心得进行分享.希望能在 ...

  2. LINUX0.11内核阅读笔记

    我是通过阅读赵炯老师编的厚厚的linux内核完全剖析看完LINUX0.11的代码,不得不发自内心的说Linus真的是个天才.虽然我觉得很多OS设计的思想他是从UNIX学来的,但是他自己很周全很漂亮很巧 ...

  3. v05.05 鸿蒙内核源码分析(任务管理) | 如何管理任务池 | 百篇博客分析HarmonyOS源码

    曾子曰:"吾日三省吾身:为人谋而不忠乎?与朋友交而不信乎?传不习乎?"<论语>:学而篇 百篇博客系列篇.本篇为: v05.xx 鸿蒙内核源码分析(任务管理篇) | 如何 ...

  4. v74.01 鸿蒙内核源码分析(编码方式篇) | 机器指令是如何编码的 | 百篇博客分析OpenHarmony源码

    Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https ...

  5. FreeRTOS官方指导文档阅读笔记

    FreeRTOS官方指导文档阅读笔记 基于 161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide.pdf,可 ...

  6. 鸿蒙内核源码分析:调度机制篇

    作者 | 深入研究鸿蒙,鸿蒙内核发烧友 出品 | CSDN(ID:CSDNnews) 头图 | CSDN 下载自东方 IC 阅读之前建议先读本系列其他文章,以便对本文任务调度机制的理解. 为什么要学这 ...

  7. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  8. linux 协议栈 位置,[置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  9. 鸿蒙系统深度解析,深度解析鸿蒙内核最重要的结构体

    谁是鸿蒙内核最重要的结构体? 答案一定是:LOS_DL_LIST(双向链表),它长这样. typedef struct LOS_DL_LIST {//双向链表,内核最重要结构体 struct LOS_ ...

最新文章

  1. 编程之美2.2 不要被阶乘吓倒
  2. 辨析Java与Javascript
  3. 找不到类型{0} 它在 ServiceHost 指令中提供为 Service 特性值
  4. 手把手教你启用Win10的Linux子系统 Ubuntu
  5. 互联网日报 | 6月4日 星期五 | 蚂蚁消费金融获批开业;腾讯云四个国际数据中心同步开服;滴滴App上线“老人打车”模式...
  6. android开发 存储权限,Android openFileOutput – 没有创建存储的权限
  7. niosii spi 外部_NIOS II SPI详解 如何使用SPI方式传输
  8. Ubuntu 安装Wireshark
  9. C++提高部分_C++类模板对象做函数参数---C++语言工作笔记090
  10. mycat 分布式mysql_MySQL 部署分布式架构 MyCAT (五)
  11. 计算机学习路线推荐(初稿)
  12. (java毕业设计)基于java学生宿舍管理系统
  13. QAOA如何在NISQ处理器中展示应用级量子优势?
  14. Ip地址基础--全篇无废话
  15. word保存html格式批注没有了,Word批注保存后再打开没了
  16. Jmeter,Linux下执行./jmeter报错【./jmeter:Permission denied】
  17. 3-2Virsh控制工具
  18. 汇编与接口技术期末复习笔记(1)—— 汇编部分
  19. python中父子进程
  20. laradock卡在raw.githubusercontent.com,怎么办

热门文章

  1. 免费顶级域名TK介绍
  2. 5G智慧合杆的城市商业区应用
  3. Python之pandas学习【5】:导入导出数据
  4. 小心肝队-冲刺日志(第八天)
  5. 0基础实现微信推送天气,生日等(女朋友快乐眼)
  6. 姓张信息mysql_MySQL_数据查询
  7. [USACO20JAN]Loan Repayment S
  8. Unity 5.5.0f3发行说明
  9. linux单片机用什么数据库,基于ARM-Linux的SQLite嵌入式数据库的研究 -单片机-电子工程世界网...
  10. 简单做一段自己CSGO游戏的视频