text: (window.webpackJsonp=window.webpackJsonp||[]).push([[57],{1539:function(r,e,t){"use strict";t.r(e);var n=t(1),a=Object(n.a)({},(function(){var r=this,e=r.$createElement,t=r._self._c||e;return t("ContentSlotsDistributor",{attrs:{"slot-key":r.$parent.slotKey}},[t("p",[r._v("子曰：“吾与回言终日，不违如愚。退而省其私，亦足以发。回也，不愚。”《论语》：为政篇")]),r._v(" "),t("p",[t("a",{attrs:{href:"http://weharmonyos.com/",target:"_blank",rel:"noopener noreferrer"}},[t("img",{attrs:{src:"https://gitee.com/weharmonyos/resources/raw/master/common/io.png",alt:""}})])]),r._v(" "),t("p",[r._v("百篇博客分析.本篇为: (调度故事篇) | 用故事说内核调度")]),r._v(" "),t("p",[t("a",{attrs:{href:"/resource/%E9%B8%BF%E8%92%99%E5%86%85%E6%A0%B8%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90(%E7%99%BE%E7%AF%87%E5%8D%9A%E5%AE%A2%E5%88%86%E6%9E%90.%E6%8C%96%E9%80%8F%E9%B8%BF%E8%92%99%E5%86%85%E6%A0%B8).zip"}},[r._v("下载 >> 离线文档.鸿蒙内核源码分析(百篇博客分析.挖透鸿蒙内核).pdf")])]),r._v(" "),t("p",[r._v("前因后果相关篇为:")]),r._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/08.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v08.03 鸿蒙内核源码分析(总目录) | 百万汉字注解 百篇博客分析")])]),r._v(" "),t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/09.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v09.04 鸿蒙内核源码分析(调度故事) | 用故事说内核调度")])]),r._v(" "),t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/10.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v10.03 鸿蒙内核源码分析(内存主奴) | 皇上和奴才如何相处")])]),r._v(" "),t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/13.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v13.05 鸿蒙内核源码分析(源码注释) | 每天死磕一点点")])]),r._v(" "),t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/18.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v18.02 鸿蒙内核源码分析(源码结构) | 内核文件各自含义")])]),r._v(" "),t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/52.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v52.05 鸿蒙内核源码分析(静态站点) | 码农都不爱写注释和文档")])]),r._v(" "),t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/73.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v73.01 鸿蒙内核源码分析(参考文档) | 阅读内核源码必备工具")])])]),r._v(" "),t("p",[r._v("本篇用一个故事说清楚鸿蒙进程和线程的调度过程.")]),r._v(" "),t("h3",{attrs:{id:"有个场馆"}},[r._v("有个场馆")]),r._v(" "),t("p",[r._v("某地有一个演出场馆，分成室内馆(400平米)和室外馆(4万平米),管理处在室内馆,那是工作人员办公的地方，非工作人员不得进入!")]),r._v(" "),t("p",[r._v("场馆的定位是为本地用户提供舞台表演(统称舞台剧),规定同时只能一个剧上演,但因为生意太好，申请人太多了，所以用馆要先申请->排队->上演.场馆里面有一座永远很准时，不会停的大钟表，每十分钟就自动响一次,场馆里有很多的资源，有篮球，酒馆，小卖部，桌椅，还有演员(人也算资源)，反正就是应有尽有，但是数量有限.")]),r._v(" "),t("p",[r._v("资源由管理处统一管理,这些资源也得先申请才能使用.场地外有个大屏幕,屏幕实时对外公布场馆舞台剧情况,屏幕内容如下:")]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v(" 舞台剧名 优先级    状态        进行中节目       就绪节目\n ---------------------------------------------------------\n 管理处     0       正在工作    打扫场地卫生        无 \n 三国演义   19      已就绪      无              骂死王朗 \n 淘宝直播   20      已就绪      无              薇娅9点直播 \n")])]),r._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[r._v("1")]),t("br"),t("span",{staticClass:"line-number"},[r._v("2")]),t("br"),t("span",{staticClass:"line-number"},[r._v("3")]),t("br"),t("span",{staticClass:"line-number"},[r._v("4")]),t("br"),t("span",{staticClass:"line-number"},[r._v("5")]),t("br")])]),t("p",[r._v("场馆的内部工作也是个剧,只不过它的内部剧,优先级最高.而且注意这里只展示正在和就绪的剧情节目,就绪是指万事俱备,只欠登台表演的意思.")]),r._v(" "),t("p",[r._v("例如上表中有两个剧都准备好了,排成了一个就绪队列,都等着管理处打扫完卫生后表演,但同时只能演一个剧,而三国演义的优先级更高(场馆规定越小的优先级越高),所以不出意外,下一个表演的节目就是三国演义之骂死王朗.")]),r._v(" "),t("p",[r._v("这里请记住就绪队列,后续会反复的提它,很重要!")]),r._v(" "),t("h3",{attrs:{id:"表演走什么流程"}},[r._v("表演走什么流程？")]),r._v(" "),t("p",[r._v("用馆者需提交你舞台剧的剧本,剧本可以是玩游戏，拍电视剧,直播电商等等，反正精彩的世界任你书写，场馆内有专人(统称导演)负责跟进你的剧本上演。")]),r._v(" "),t("p",[r._v("剧本由各种各样的场景剧组成(统称节目),比如要拍个水浒传的剧本. 被分成武松打虎,西门和金莲那点破事等等节目剧.申请流程是去管理处先填一张电子节目表,节目表有固定的格式,填完点提交你的工作就完成了,接下来就是导演的事了.")]),r._v(" "),t("p",[r._v("节目表单格式如下.")]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("剧名    节目章回  内容          优先级  所需资源            状态 \n----------------------------------------------------------------\n水浒传  第18回   武松打虎          12   武松,老虎,          未开始 \n水浒传  第28回   西门金莲那点破事   2    西门庆,金莲,炕      未开始 \n水浒传  第36回   武松拳打蒋门神     14   武松,蒋门神,猪肉    未开始 \n")])]),r._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[r._v("1")]),t("br"),t("span",{staticClass:"line-number"},[r._v("2")]),t("br"),t("span",{staticClass:"line-number"},[r._v("3")]),t("br"),t("span",{staticClass:"line-number"},[r._v("4")]),t("br"),t("span",{staticClass:"line-number"},[r._v("5")]),t("br")])]),t("p",[r._v("故事写到这里，大家脑子里有个画面了吧，记住这两张表,继续走起。")]),r._v(" "),t("h3",{attrs:{id:"西门大官人什么时候表演"}},[r._v("西门大官人什么时候表演?")]),r._v(" "),t("p",[r._v("场馆都会给每个用馆单位发个标号代表你使用场馆的优先级，剧本中每个场景节目也有优先级,都是0级最高，31级最低，这里比如水浒传优先级为8，西门庆和金莲那点破事节目为2，节目资源是需要两位主角(西门,金莲)和王婆，一个炕等资源，这些资源要向场馆负责人申请好，节目资源申请到位了就可以进入就绪队列.")]),r._v(" "),t("p",[r._v("如果你的剧本里没有一个节目的资源申请到了那对不起您连排号的资格都没有。这里假如水浒传审核通过,并只有西门大官人节目资源申请成功,而管理处卫生打扫完了,以上两个表格的内容将做如下更新")]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("舞台剧名 优先级    状态        进行中节目       就绪节目\n---------------------------------------------------------\n水浒传     8       正在工作    西门金莲那点破事        无 \n三国演义  19       已就绪      无              骂死王朗 \n淘宝直播  20       已就绪      无              薇娅9点直播\n")])]),r._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[r._v("1")]),t("br"),t("span",{staticClass:"line-number"},[r._v("2")]),t("br"),t("span",{staticClass:"line-number"},[r._v("3")]),t("br"),t("span",{staticClass:"line-number"},[r._v("4")]),t("br"),t("span",{staticClass:"line-number"},[r._v("5")]),t("br")])]),t("p",[r._v("注意虽然三国演义先来,但此时水浒传排在三国的前面,是因为它的优先级高,优先级分32级,0最高,31最低.")]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("剧名  节目章回  内容        优先级  所需资源        状态        表演位置 \n---------------------------------------------------------------------------\n水浒传  第18回 武松打虎        12  武松,老虎,酒18碗 未开始         暂无 \n水浒传  第28回 西门金莲那点破事 2   西门庆,金莲,炕   正在进行       西门火急火燎的跑进金莲屋内 \n水浒传  第36回 武松拳打蒋门神   14  武松,蒋门神,猪肉 未开始         暂无 \n")])]),r._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[r._v("1")]),t("br"),t("span",{staticClass:"line-number"},[r._v("2")]),t("br"),t("span",{staticClass:"line-number"},[r._v("3")]),t("br"),t("span",{staticClass:"line-number"},[r._v("4")]),t("br"),t("span",{staticClass:"line-number"},[r._v("5")]),t("br")])]),t("p",[r._v("注意看表中状态的变化和优先级,一个是剧本的优先级,一个是同一个剧本中节目的优先级.而之前优先级最高的管理处,因为没有其他节目要运行,所以移出了就绪队列.")]),r._v(" "),t("h3",{attrs:{id:"西门好事被破坏了怎么办了"}},[r._v("西门好事被破坏了怎么办了?")]),r._v(" "),t("p",[r._v("场馆会根据节目上的内容把节目演完。每个节目十分钟，时间到了要回去重新排队，如果还是你就可以继续你的表演。但这里经常会有异常情况发生.")]),r._v(" "),t("p",[r._v("比如上级领导给场馆来个电话临时有个更高优先级节目要插进来，没办法西门你的好事要先停止，please stop! 场地要让给别人办事，西门灰溜溜得回就绪队列排队去，但请放心会在你西门退场前会记录下来表演到哪个位置了(比如:西门官人已脱完鞋),以便回来时继续接着表演。高优先级的事处理完后,如果西门的优先级还是最高的就可以继续用场地,会先还原现场演到哪了再继续办事就完了,绝不重复西门前面的准备工作,否则西门绝不答应!")]),r._v(" "),t("p",[r._v("节目表演完所有资源要回收，这个节目从此消亡，如果你剧本里所有节目都表演完了，那你的整个剧本也可以拜拜了,导演回到导演组,又可以去接下一部戏了.")]),r._v(" "),t("p",[r._v("这里还原下西门被场馆紧急电话打断后表的变化是怎样的,如下:")]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("剧本名称 优先级 状态        进行中节目      就绪节目 \n---------------------------------------------------------\n管理处      0   正在工作    接听上级电话 无 \n水浒传      8   已就绪      无          西门和金莲那点破事 \n三国演义    19  已就绪      无          骂死王朗 \n淘宝直播    20  已就绪      无          薇娅9点直播 \n")])]),r._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[r._v("1")]),t("br"),t("span",{staticClass:"line-number"},[r._v("2")]),t("br"),t("span",{staticClass:"line-number"},[r._v("3")]),t("br"),t("span",{staticClass:"line-number"},[r._v("4")]),t("br"),t("span",{staticClass:"line-number"},[r._v("5")]),t("br"),t("span",{staticClass:"line-number"},[r._v("6")]),t("br")])]),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("剧名    节目章回  内容          优先级  所需资源            状态    表演位置 \n-------------------------------------------------------------------------  \n水浒传  第18回  武松打虎        12      武松,老虎,酒18碗   未开始     暂无 \n水浒传  第28回  西门金莲那点破事 2      西门庆,金莲,一个炕  就绪     西门官人脱完鞋 \n水浒传  第36回  武松拳打蒋门神  14      武松,蒋门神,猪肉    未开始     暂无 \n")])]),r._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[r._v("1")]),t("br"),t("span",{staticClass:"line-number"},[r._v("2")]),t("br"),t("span",{staticClass:"line-number"},[r._v("3")]),t("br"),t("span",{staticClass:"line-number"},[r._v("4")]),t("br"),t("span",{staticClass:"line-number"},[r._v("5")]),t("br")])]),t("h3",{attrs:{id:"表演给谁看呢"}},[r._v("表演给谁看呢？")]),r._v(" "),t("p",[r._v("外面那些吃瓜观众啊，群众你我他,游戏公司设计了游戏的剧本，电商公司设计了电商剧本，西门大官人被翻拍了这么多次不就是都爱看嘛,场馆会按你的剧本来表演，当然也可以互动,表演的场景需要观众操作时，观众在外面可以操作，发送指令。想想你玩游戏输入名字登录的场景。场馆里面有三个团队,张大爷团队负责导演组演剧本,王场馆负责场地的使用规划的,李后勤负责搞搞后勤.")]),r._v(" "),t("h3",{attrs:{id:"张大爷团队做什么的"}},[r._v("张大爷团队做什么的？")]),r._v(" "),t("p",[r._v("上面这些工作都是张大爷团队的工作,接待剧本的导演组,管理剧本清单,指派导演跟进,申请节目资源,调整剧本优先级,控制时间,以使舞台能被公平公正的被调度使用等等")]),r._v(" "),t("h3",{attrs:{id:"王场馆是做什么的"}},[r._v("王场馆是做什么的？")]),r._v(" "),t("p",[r._v("看名字能知道负责场地用度的,你想想这么多节目,场地只有这么点,同时只能由一个节目上演,怎么合理的规划才能即公平又效率最大化呢,这就是王场馆的工作,但咱王总也有两把刷子,会给用馆公司感觉到整个场馆都是自己在用,具体不在这个故事里说明,后续有专门讲王场馆如何高效的管理内外场地的故事篇.")]),r._v(" "),t("h3",{attrs:{id:"李后勤是做什么的"}},[r._v("李后勤是做什么的？")]),r._v(" "),t("p",[r._v("场馆每天的开业,歇业,场地清理,管理处的对外业务,接听电话,有人闹事了怎么处理,收钱开发票 等等也有很多工作统称为后勤工作要有专门的团队来对接,具体不在这里说明,后续也有专门讲这块的故事.")]),r._v(" "),t("h3",{attrs:{id:"故事想说什么呢"}},[r._v("故事想说什么呢？")]),r._v(" "),t("p",[r._v("故事到底想说什么呢？这就是操作系统的调度机制，熟悉了这个故事就熟悉了鸿蒙系统内核任务调度的工作原理！操作系统就是管理场馆和确保工作人员有序工作的系统解决方案商，外面公司只要提供个剧本，就能按剧本把这台戏演好给广大观众观看。有了这个故事垫底，鸿蒙内核源码分析系列就有了一个非常好的开始基础。")]),r._v(" "),t("h3",{attrs:{id:"内核和故事的关系映射"}},[r._v("内核和故事的关系映射")]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("故事概念        内核概念            备注 \n--------------------------------------------------------- \n只能一个剧本演   单CPU           多CPU核指多个剧同时上演  \n剧本            程序            一个剧本一个负责人跟进,跑起来的程序叫进程  \n导演            进程            进程负责剧本整个运行过程,是资源管理单元,任务也是一种资源 \n节目            线程/任务       任务记录节目的整个运行过程,任务是调度的单元 \n西门被打断      保存现场        本质是保存寄存器(PC,LR,FP,SP)的状态  \n西门继续来      恢复现场        本质是还原寄存器(PC,LR,FP,SP)的状态  \n表演场地        用户空间        所有节目都在同一块场地表演  \n管理处          内核空间        管理处非工作人员不得入内 \n外部场地        磁盘空间        故事暂未涉及,留在内存故事中讲解  \n节目内容        代码段          任务涉及的具体代码段  \n管理处的服务    系统调用        软中断实现,切换至内核栈  \n场馆大钟        系统时钟        十分钟响一次代表一个节拍(tick)  \n节目20分钟      时间片          鸿蒙时间片默认 2个tick,20ms \n上级电话        中断            硬中断,直接跳到中断处理函数执行  \n表演顺序        优先级          进程和线程都是32个优先级,[0-31],从高到低  \n张大爷          进程/线程管理   抢占式调度,优先级高者运行  \n王场馆          内存管理        虚拟内存,内存分配,缺页置换 ==  \n李后勤          异常接管        中断,跟踪,异常接管 ==  \n")])]),r._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[r._v("1")]),t("br"),t("span",{staticClass:"line-number"},[r._v("2")]),t("br"),t("span",{staticClass:"line-number"},[r._v("3")]),t("br"),t("span",{staticClass:"line-number"},[r._v("4")]),t("br"),t("span",{staticClass:"line-number"},[r._v("5")]),t("br"),t("span",{staticClass:"line-number"},[r._v("6")]),t("br"),t("span",{staticClass:"line-number"},[r._v("7")]),t("br"),t("span",{staticClass:"line-number"},[r._v("8")]),t("br"),t("span",{staticClass:"line-number"},[r._v("9")]),t("br"),t("span",{staticClass:"line-number"},[r._v("10")]),t("br"),t("span",{staticClass:"line-number"},[r._v("11")]),t("br"),t("span",{staticClass:"line-number"},[r._v("12")]),t("br"),t("span",{staticClass:"line-number"},[r._v("13")]),t("br"),t("span",{staticClass:"line-number"},[r._v("14")]),t("br"),t("span",{staticClass:"line-number"},[r._v("15")]),t("br"),t("span",{staticClass:"line-number"},[r._v("16")]),t("br"),t("span",{staticClass:"line-number"},[r._v("17")]),t("br"),t("span",{staticClass:"line-number"},[r._v("18")]),t("br"),t("span",{staticClass:"line-number"},[r._v("19")]),t("br"),t("span",{staticClass:"line-number"},[r._v("20")]),t("br")])]),t("h3",{attrs:{id:"请牢记这个故事"}},[r._v("请牢记这个故事")]),r._v(" "),t("p",[r._v("当然还有很多的细节在故事里没有讲到，比如王场馆和李后勤的工作细节，还有后续故事一一拆解.太细不可能真的在一个故事里全面讲完，笔者想说的是框架，架构思维，要先有整体框架再顺藤摸瓜寻细节，层层深入，否则很容易钻进死胡同里出不来。读着读着就放弃了，其实真没那么难。当你摸清了整个底层的运作机制再看上层的应用，就会有了拨开云雾见阳光，神清气爽的感觉。具体的我们在后续的章节里一一展开，用这个故事去理解鸿蒙系统内核调度过程，没毛病，请务必牢记这个故事。")]),r._v(" "),t("h3",{attrs:{id:"百文说内核-脉络渐清晰"}},[r._v("百文说内核.脉络渐清晰")]),r._v(" "),t("p",[r._v("发布站点 (鸿蒙研究站 | 开源中国 | 博客园 | 51cto | csdn | 知乎 | 掘金)")]),r._v(" "),t("p",[r._v("按功能模块:")]),r._v(" "),t("ul",[t("li",[r._v("前因后果 >> "),t("a",{attrs:{href:"http://weharmonyos.com/blog/08.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("总目录")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/09.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("调度故事")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/10.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("内存主奴")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/13.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("源码注释")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/18.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("源码结构")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/52.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("静态站点")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/73.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("参考文档")]),r._v(" |")]),r._v(" "),t("li",[r._v("基础工具 >> "),t("a",{attrs:{href:"http://weharmonyos.com/blog/01.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("双向链表")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/19.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("位图管理")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/20.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("用栈方式")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/31.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("定时器")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/34.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("原子操作")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/35.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("时间管理")]),r._v(" |")]),r._v(" "),t("li",[r._v("加载运行 >> "),t("a",{attrs:{href:"http://weharmonyos.com/blog/51.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("ELF格式")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/53.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("ELF解析")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/54.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("静态链接")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/55.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("重定位")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/56.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("进程映像")]),r._v(" |")]),r._v(" "),t("li",[r._v("进程管理 >> "),t("a",{attrs:{href:"http://weharmonyos.com/blog/02.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("进程管理")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/24.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("进程概念")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/45.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("Fork")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/46.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("特殊进程")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/47.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("进程回收")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/48.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("信号生产")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/49.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("信号消费")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/71.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("Shell编辑")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/72.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("Shell解析")]),r._v(" |")]),r._v(" "),t("li",[r._v("编译构建 >> "),t("a",{attrs:{href:"http://weharmonyos.com/blog/50.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("编译环境")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/57.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("编译过程")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/58.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("环境脚本")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/59.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("构建工具")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/60.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("gn应用")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/61.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("忍者ninja")]),r._v(" |")]),r._v(" "),t("li",[r._v("进程通讯 >> "),t("a",{attrs:{href:"http://weharmonyos.com/blog/26.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("自旋锁")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/27.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("互斥锁")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/28.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("进程通讯")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/29.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("信号量")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/30.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("事件控制")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/33.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("消息队列")]),r._v(" |")]),r._v(" "),t("li",[r._v("内存管理 >> "),t("a",{attrs:{href:"http://weharmonyos.com/blog/11.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("内存分配")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/12.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("内存管理")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/14.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("内存汇编")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/15.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("内存映射")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/16.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("内存规则")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/17.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("物理内存")]),r._v(" |")]),r._v(" "),t("li",[r._v("任务管理 >> "),t("a",{attrs:{href:"http://weharmonyos.com/blog/03.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("时钟任务")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/04.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("任务调度")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/05.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("任务管理")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/06.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("调度队列")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/07.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("调度机制")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/21.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("线程概念")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/25.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("并发并行")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/32.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("CPU")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/37.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("系统调用")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/41.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("任务切换")]),r._v(" |")]),r._v(" "),t("li",[r._v("文件系统 >> "),t("a",{attrs:{href:"http://weharmonyos.com/blog/62.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("文件概念")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/63.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("文件系统")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/64.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("索引节点")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/65.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("挂载目录")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/66.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("根文件系统")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/68.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("VFS")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/69.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("文件句柄")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/70.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("管道文件")]),r._v(" |")]),r._v(" "),t("li",[r._v("硬件架构 >> "),t("a",{attrs:{href:"http://weharmonyos.com/blog/22.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("汇编基础")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/23.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("汇编传参")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/36.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("工作模式")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/38.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("寄存器")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/39.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("异常接管")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/40.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("汇编汇总")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/42.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("中断切换")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/43.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("中断概念")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/44.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("中断管理")]),r._v(" |")]),r._v(" "),t("li",[r._v("I/O设备 >> "),t("a",{attrs:{href:"http://weharmonyos.com/blog/67.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("字符设备")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/74.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("控制台")]),r._v(" | "),t("a",{attrs:{href:"http://weharmonyos.com/blog/75.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("远程登录")]),r._v(" |")])]),r._v(" "),t("h3",{attrs:{id:"百万注源码-处处扣细节"}},[r._v("百万注源码.处处扣细节")]),r._v(" "),t("p",[t("a",{attrs:{href:"https://gitee.com/weharmony/kernel_liteos_a_note",target:"_blank",rel:"noopener noreferrer"}},[r._v("< gitee")]),r._v(" | "),t("a",{attrs:{href:"https://github.com/kuangyufei/kernel_liteos_a_note",target:"_blank",rel:"noopener noreferrer"}},[r._v("github")]),r._v(" | "),t("a",{attrs:{href:"https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files",target:"_blank",rel:"noopener noreferrer"}},[r._v("coding")]),r._v(" | "),t("a",{attrs:{href:"https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note",target:"_blank",rel:"noopener noreferrer"}},[r._v("codechina >")]),r._v(" 四大码仓推送 | 同步官方源码")]),r._v(" "),t("p",[t("a",{attrs:{href:"https://gitee.com/weharmony/kernel_liteos_a_note",target:"_blank",rel:"noopener noreferrer"}},[t("img",{attrs:{src:"https://gitee.com/weharmony/kernel_liteos_a_note/widgets/widget_card.svg?colors=393222,ebdfc1,fffae5,d8ca9f,393222,a28b40",alt:""}})])]),r._v(" "),t("h3",{attrs:{id:"关注不迷路-代码即人生"}},[r._v("关注不迷路.代码即人生")]),r._v(" "),t("p",[t("img",{attrs:{src:"https://gitee.com/weharmonyos/resources/raw/master/common/so1so.png",alt:""}})]),r._v(" "),t("p",[r._v("鸿蒙研究站( weharmonyos ) | 每天死磕一点点，原创不易，欢迎转载，请注明出处。若能支持点赞则更佳，感谢每一份支持。")])])}),[],!1,null,null,null);e.default=a.exports}}]);