text: (window.webpackJsonp=window.webpackJsonp||[]).push([[59],{1537:function(r,e,t){"use strict";t.r(e);var a=t(1),n=Object(a.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/11.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v11.03 鸿蒙内核源码分析(内存分配) | 内存有哪些分配方式")])]),r._v(" "),t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/12.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v12.04 鸿蒙内核源码分析(内存管理) | 虚拟内存全景图是怎样的")])]),r._v(" "),t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/14.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v14.02 鸿蒙内核源码分析(内存汇编) | 谁是虚拟内存实现的基础")])]),r._v(" "),t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/15.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v15.03 鸿蒙内核源码分析(内存映射) | 映射真是个好东西")])]),r._v(" "),t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/16.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v16.02 鸿蒙内核源码分析(内存规则) | 内存管理到底在管什么")])]),r._v(" "),t("li",[t("a",{attrs:{href:"http://weharmonyos.com/blog/17.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("v17.04 鸿蒙内核源码分析(物理内存) | 怎么管理物理内存")])])]),r._v(" "),t("h3",{attrs:{id:"主子和奴才"}},[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("那就是个奴才们能把主子给活活踩死， 想想主奴不分，吃喝拉撒睡都在一起，称兄道弟的想干啥? 没规矩不成方圆嘛，这事业肯定搞不大，单片机时代就是这种情况. 裸机编程，指针可以随便乱飞，数据可以随意覆盖，没有划定边界，没有明确职责，没有特权指令，没有地址保护，你还想像java开发一样，只管new内存，不去释放，应用可以随便崩但系统跑的妥妥的？想的美! 直接系统死机，甚至开机都开不了，主板直接报废了. 所以不能运行很复杂的程序，尽量可控，而且更是不可能支持应用的动态加载运行. 队伍大了就不好带了，方法得换， 游击队的做法不适合规模作战，内存就需要管理了，而且是 5A级的严格管理。")]),r._v(" "),t("h3",{attrs:{id:"内存管理在管什么"}},[r._v("内存管理在管什么?")]),r._v(" "),t("p",[r._v("简单说就是给主子赋能，拥有超级权利，为什么就他有? 因为他先来，掌握了先机.它定好了游戏规则，你们来玩.有哪些游戏规则?")]),r._v(" "),t("ul",[t("li",[t("p",[r._v("第一: 主奴有别，主子即是裁判又是运动员，主子有主子地方，奴才们有奴才们待的地方，主子可以在你的空间走来走去，但你只能在主人划定的区域活动.奴才把自己玩崩了也只是奴才狗屁了， 但主人和其他人还会是好好的. 主子有所有特权，比如某个奴才太嚣张了，就直接拖到午门问斩。")])]),r._v(" "),t("li",[t("p",[r._v("第二: 奴奴有分，奴才们基本都是平等的，虽有高级和低级奴才区分，但本质都是奴才。奴才之间是不能随意勾连，登门问客的，防止一块搞政变. 他们都有属于自己的活动空间，而且活动空间还巨大巨大，大到奴才们觉得整个紫荆城都是他们家的，给你这么大空间你干活才有动力，奴才们是铆足了劲一个个尽情的表演各种剧本，有玩电子商务的，有玩游戏的，有搞直播的等等。。。不愧是紫荆城的主人很有一套，明明只有一个紫禁城，硬被他整出了N个紫荆城的感觉。而且这套驾奴本领还取了个很好听的名字叫："),t("code",[r._v("虚拟内存")]),r._v("。")])])]),r._v(" "),t("p",[r._v("看图：")]),r._v(" "),t("p",[r._v("这是整个紫荆城的全貌图，里面的内核虚拟空间是主人专用的，里面放的是主人的资料，数据，奴才永远进不去，kernel heap 也是给主人专用的动态内存空间，管理奴才和日常运作开销很多时候需要动态申请内存，这个是专门用来提供给主人使用的。而所有奴才的空间都在叫用户空间的那一块。你没看错，是所有奴才的都在那。当然实际情况是用户空间比图中的大的多，因为主人其实用不了多少空间，大部分是留给奴才们干活用了，因为篇幅的限制笔者把用户空间压缩了下。 再来看看奴才空间是啥样的。看图")]),r._v(" "),t("p",[r._v("这张图是第一张图的局部用户空间放大图。里面放的是奴才的私人用品，数据，task运行栈区，动态分配内存的堆区，堆区自下而上，栈区自上而下中间由映射区(L1，L2表)隔开。这么多奴才在里面不挤吗？答案是：真不挤 。主人手眼通天，因为用了一个好帮手解决了这个问题，这个帮手名叫 MMU（李大总管）")]),r._v(" "),t("h3",{attrs:{id:"mmu是干什么事的"}},[r._v("MMU是干什么事的？")]),r._v(" "),t("p",[r._v("看下某度对MMU定义：它是一种负责处理"),t("a",{attrs:{href:"https://baike.baidu.com/item/%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8",target:"_blank",rel:"noopener noreferrer"}},[r._v("中央处理器")]),r._v("（CPU）的"),t("a",{attrs:{href:"https://baike.baidu.com/item/%E5%86%85%E5%AD%98",target:"_blank",rel:"noopener noreferrer"}},[r._v("内存")]),r._v("访问请求的"),t("a",{attrs:{href:"https://baike.baidu.com/item/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A1%AC%E4%BB%B6",target:"_blank",rel:"noopener noreferrer"}},[r._v("计算机硬件")]),r._v("。它的功能包括"),t("a",{attrs:{href:"https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E5%9C%B0%E5%9D%80",target:"_blank",rel:"noopener noreferrer"}},[r._v("虚拟地址")]),r._v("到"),t("a",{attrs:{href:"https://baike.baidu.com/item/%E7%89%A9%E7%90%86%E5%9C%B0%E5%9D%80",target:"_blank",rel:"noopener noreferrer"}},[r._v("物理地址")]),r._v("的转换（即"),t("a",{attrs:{href:"https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98",target:"_blank",rel:"noopener noreferrer"}},[r._v("虚拟内存")]),r._v("管理）、内存保护、中央处理器"),t("a",{attrs:{href:"https://baike.baidu.com/item/%E9%AB%98%E9%80%9F%E7%BC%93%E5%AD%98",target:"_blank",rel:"noopener noreferrer"}},[r._v("高速缓存")]),r._v("的控制。通过它的一番操作，把物理空间成倍成倍的放大，他们之间的映射关系存放在页面中。")]),r._v(" "),t("p",[r._v("好像看懂又好像没看懂是吧，到底是干啥的？其实就是个地址映射登记中心。记住这两个字：映射 看下图")]),r._v(" "),t("p",[r._v("物理内存可以理解为真实世界的紫禁城，虚拟内存就是被MMU虚拟出来的比物理页面大的多的空间。举例说明大概说明下过程：")]),r._v(" "),t("p",[r._v("有A(厨师)，B(文艺青年) 两个奴才来到紫禁城，每个人都很有抱负，主子规定要先跑去登记处登记活动范围，领回来一张表 叫 L1页表，上面说了大半个紫禁城你可以跑动，都是你的，L1页表记录你每个房间的编号。其实奴才们的表都一样，能跑的范围也都一样。 李大总管也有一张私人表叫TLB表，具体玩的呢，看个例子就明白了.")]),r._v(" "),t("h3",{attrs:{id:"举例说明"}},[r._v("举例说明")]),r._v(" "),t("p",[t("strong",[r._v("TLB表(李总管的私人表)")])]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("|真实房间|当前谁在用|\n-------------------\n|7      |   A     |\n|8      |   C     |\n|9      |   B     |\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("李大总管的私人表叫 TLB（translation lookaside buffer）可翻译为“地址转换后援缓冲器”，也可简称为“快表”。从TLB表可以看出，有三个真实的房间， 7，8，9，目前是分配给了A，B，C使用.")]),r._v(" "),t("p",[t("strong",[r._v("奴才们的L1页表(当然可以有无数的奴才表，每个奴才人手一张)")])]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("|奴才 |虚拟房间|真实房间|作用|\n--------------------------\n|A奴才| 1   |7      |厨房拿菜|\n|A奴才| 2   |8      |洗手间|\n|A奴才| 3   |9      |卧室|\n\n|   |虚拟房间|真实房间|作用|\n---------------------------\n|B奴才| 3 |8        |音乐室|\n|B奴才| 1 |9        |美术室|\n|B奴才| 2 |7        |武术室|\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("p",[r._v("再模拟一个他们的活动场景:")]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("|奴才|动作1|动作2|动作3|动作4|\n--------------------------------\n|A  |厨房拿菜|卧室睡觉|上洗手间|无|\n|B  |武术室|美术室|无|音乐室|\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("p",[r._v("第一: A要去1号间厨房拿菜，提交表给李总管，李总管拿表和自己的表对照，发现1号虚拟房间对应的是7号真实房间，7号刚好分配给了A用，盖章同意.A拿到了自己菜.")]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("|真实房间|当前谁在用|\n-----------------------\n|7      |A          |\n|8      |C          |\n|9      |B          |\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("此时李总管的表没变化.\n第二: B要去2号间练武术，提交表给李总管，李总管拿表和自己的表对照，发现1号虚拟房间对应的是7号真实房间，7号是A在用，不属于B，里面放的都还是菜呢，咋办?简单，把菜挪出去，把B奴才的武术设备装进来，更改自己的表变成了")]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("|真实房间|当前谁在用|\n-----------------------\n|7      |B      |\n|8      |C      |\n|9      |B      |\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("此时李总管的表变了，三个真实房间B用了两个了.\n第三: A要去3号间睡觉了，又提交表给李总管，李总管拿表和自己的表对照，发现3号虚拟房间对应的是9号真实房间，9号刚好分配给了B用了，此时里面放的还是美术用品呢.咋办?简单，挪出去，把A奴才的睡觉设备装进来，再更改自己的表变成了")]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("|真实房间|当前谁在用|\n-----------------------\n|7      |B      |\n|8      |C      |\n|9      |A      |\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("此时李总管的表变了，9号给了A了，而8号一直在C手里，因为过程中没人用到了8号房.但继续跑下去肯定会易主.")]),r._v(" "),t("p",[r._v("明白了吗? 这就是 "),t("strong",[r._v("映射的核心思想!")]),r._v("\n对A，B来说，它们只认 1，2，3房间，记得自己的房间是干什么用的就行，完全不必知道背后的7，8，9是谁在用， 用房间之前提交表单就行了，后面的不用管.\n而且各自1，2，3可以重新映射到不一样的房间， A，B映射是完全独立的，看清没有它们的123对应的可不都是789的顺序.")]),r._v(" "),t("p",[r._v("上面的1，2，3就叫虚拟地址，也叫线性地址. 而789就是物理地址.  如此只有三个房间都可以给很多很多的奴才使用，让他们觉得这三个房间都是自己的. 完美!!!\n当然AB也可以有自己虚拟地址789，例如:")]),r._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[r._v("|奴才|虚拟房间|真实房间|作用|\n-----------------------\n|A奴才| 1 |7|厨房拿菜|\n|A奴才| 2 |8|洗手间|\n|A奴才| 3 |9|卧室|\n|A奴才| 7 |19|洗澡|\n|A奴才| 8 |88|去皇上寝宫偷看|\n|A奴才| 9 |45|御膳房|\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("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=n.exports}}]);