0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙系统内核中CPU空闲时间都在干嘛

鸿蒙系统HarmonyOS 来源:计算机java编程 作者:计算机java编程 2021-03-15 14:37 次阅读

本篇说清楚CPU

cpu是负责执行指令的,谁能给它指令?是线程(也叫任务), 任务是内核的调度单元,调度到哪个任务CPU就去执行哪个任务的指令. 要执行指令就要有个取指令的开始地址. 开始地址就是大家所熟知的main函数.一个程序被加载解析后内核会在ELF中找到main函数的位置,并自动创建一个线程,指定线程的入口地址为main函数的地址,由此开始了取指,译指,执指之路.

多线程内核是怎么处理的? 一样的, 以JAVA举例,对内核来说 new thread中的run() 函数 和 main() 并没有区别. 都是一个线程(任务)的执行入口. 注意在系列篇中反复的说任务就是线程,线程就是任务,它们是一个东西在不同层面上的描述.对应用层说线程,对内核层说任务. 有多少个线程就会有多少个入口,它们统一接受调度算法的调度, 调度算法只认优先级的高低,不会管你是main() 还是 run() 而区别对待.

定时器的实现也是通过任务实现的,只不过是个系统任务OsSwtmrTaskCreate,优先级最高,和入口地址OsSwtmrTask由系统指定.

所以理解CPU就要先理解任务,任务是理解内核的主线,把它搞明白了分析内核就轻轻松松,事半功倍了.看似高深的CPU只不过是搂草打兔子.

不相信?那就看看内核对CPU是怎么描述的吧.本篇就围绕这个结构体展开说.

#内核如何描述CPU?

结构体不复杂,但很重要,一个一个掰开了说.

taskSortLink是干什么用的? 一个任务在运行过程中,会经常会主动或被动中断,而进入等待状态.主动中断情况, 例如:主动delay300毫秒,这是应用层很常见的操作.被动中断情况, 例如:申请互斥锁失败,等待某个事件发生 等等. 发生这些情况时任务将被挂到taskSortLink上.

`OsAdd2SortLink`,将任务挂到排序链表上,因等待时间不一样,所以内核会对这些任务按时间长短排序.

定时器相关三个变量,在系列篇定时器机制篇中已有对定时器的详细描述,可前往查看.

搞明白定时器的机制只需搞明白: 定时器(SWTMR_CTRL_S),定时任务(swtmrTaskID),定时器响应函数(SwtmrHandlerItem),定时器处理队列swtmrHandlerQueue 四者的关系就可以了. 一句话概括:定时任务swtmrTaskID是个系统任务,优先级最高,它循环读取队列swtmrHandlerQueue中的已到时间的定时器(SWTMR_CTRL_S),并执行定时器对应的响应函数SwtmrHandlerItem.

idleTaskID空闲任务,注意这又是个任务,每个cpu核都有属于自己的空闲任务,cpu没事干的时候就待在里面.空闲任务长什么样?Look!

taskLockCnt 这个很简单,记录等锁的任务数量.任务在运行过程中优先级是会不断地变化的, 例如 高优先级的A任务在等某锁,但持有锁的一方B任务优先级低,这时就会调高B的优先级至少到A的等级,提高B被调度算法命中的概率,如此就能快速的释放锁交给A运行.taskLockCnt记录被CPU运行过的正在等锁的任务数量.schedFlag 调度的标签.

调度并不是每次都能成功的,在某些情况下内核会阻止调度进行.例如:OS_INT_ACTIVE硬中断发生的时候.

excFlag标识CPU的运行状态,只在多核CPU下可见.

以上为内核对CPU描述的全貌,不是很复杂.

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10692

    浏览量

    209112
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2625

    浏览量

    65757
收藏 人收藏

    评论

    相关推荐

    鸿蒙内核源码Task/线程技术分析

    前言 在鸿蒙内核,广义上可理解为一个Task就是一个线程 一、怎么理解Task 1. 官方文档是怎么描述线程 基本概念 从系统的角度看,线程是竞争
    的头像 发表于 10-18 10:42 2093次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>内核</b>源码Task/线程技术分析

    你的计算机CPU使用率是多少?CPU空闲时干嘛

    假设你正在用计算机浏览网页,当网页加载完成后你开始阅读,此时你没有移动鼠标,没有敲击键盘,也没有网络通信,那么你的计算机此时在干嘛
    的头像 发表于 12-05 09:27 819次阅读
    你的计算机<b class='flag-5'>CPU</b>使用率是多少?<b class='flag-5'>CPU</b><b class='flag-5'>空闲时</b>在<b class='flag-5'>干嘛</b>?

    如何在Aurix TC399控制器测量空闲时间

    我想测量一下微控制器的空闲时间(Aurix TC399)。 你能帮我解决这个问题吗? 我们需要监控任何寄存器吗?或者该怎么做? 期待你的回复。
    发表于 01-25 07:31

    有没空闲时间承包项目的高手。我司研发项目转包

    有没空闲时间承包项目的高手。我司研发项目转包,有愿意的联系{ QQ:1725408475
    发表于 02-23 09:10

    鸿蒙内核开发的相关资料分享

    第一章 鸿蒙内核开发概述1.1鸿蒙系统有哪些内容?鸿蒙系统,就相当于一套完整的PC软件
    发表于 11-08 06:16

    CPU 空闲时都在做什么?

    人在空闲的时候免不了昏昏欲睡那cpu空闲时在做什么呢?
    的头像 发表于 03-06 15:43 4807次阅读
    当 <b class='flag-5'>CPU</b> <b class='flag-5'>空闲时</b>它<b class='flag-5'>都在</b>做什么?

    鸿蒙内核源码分析:鸿蒙内核的每段汇编代码解析

    本篇说清楚CPU的工作模式 读本篇之前建议先读鸿蒙内核源码分析(总目录)其他篇. 正如一个互联网项目的后台管理系统有权限管理一样,CPU工作
    的头像 发表于 03-02 09:56 4090次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>内核</b>源码分析:<b class='flag-5'>鸿蒙</b><b class='flag-5'>内核</b>的每段汇编代码解析

    鸿蒙内核源码分析:task是内核调度的单元

    系统的角度看,线程是竞争系统资源的最小运行单元。线程可以使用或等待CPU、使用内存空间等系统资源,并独立于其它线程运行。 鸿蒙
    发表于 11-23 15:51 22次下载
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>内核</b>源码分析:task是<b class='flag-5'>内核</b>调度的单元

    鸿蒙内核源码分析:时钟是触发调度最大的源动力

    时钟管理模块很简单,但却有内核最重要的代码段 OsTickHandler(),这是干嘛的,可以理解为 JAVA的定时任务,但这是系统内核的定时器。因
    发表于 11-24 17:50 32次下载
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>内核</b>源码分析:时钟是触发调度最大的源动力

    华为系统openharmony 鸿蒙内核的理解

    鸿蒙OS分布式操作系统是一款基于微内核的全场景分布式OS,是华为自主研发的操作系统
    的头像 发表于 06-23 10:48 3831次阅读

    鸿蒙推送时间 华为鸿蒙推送时间

    自从华为6月正式发布推送鸿蒙系统2.0,许多用户都对鸿蒙系统感兴趣也想下载,然而不怎么清楚鸿蒙系统
    的头像 发表于 07-08 11:23 8076次阅读
    <b class='flag-5'>鸿蒙</b>推送<b class='flag-5'>时间</b> 华为<b class='flag-5'>鸿蒙</b>推送<b class='flag-5'>时间</b>

    鸿蒙内核开发概述

    第一章 鸿蒙内核开发概述1.1 鸿蒙系统有哪些内容?鸿蒙系统,就相当于一套完整的PC软件
    发表于 11-03 11:21 20次下载
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>内核</b>开发概述

    恒讯科技分析:是什么导致云计算CPU窃取时间

    由于云计算CPU窃取时间比传统的专用物理环境要复杂一些。由于操作系统的报告工具尚未针对在
    的头像 发表于 08-05 16:55 613次阅读

    FreeRTOS空闲任务是什么

    空闲任务是 FreeRTOS 必不可少的一个任务,其他 RTOS 类系统也有空闲任务,比如 uC/OS。看名字就知道,空闲任务是处理器空闲
    的头像 发表于 07-30 10:55 1114次阅读

    如何在内核启动secondary cpu

    给调度器之前,并没有实际的业务进程,而我们知道内核cpu空闲时会执行idle进程。因此,在其启动之前需要为每个cpu初始化一个idle进
    的头像 发表于 12-05 15:46 416次阅读
    如何在<b class='flag-5'>内核</b><b class='flag-5'>中</b>启动secondary <b class='flag-5'>cpu</b>