前言:因笔者在大学有痛苦阅读linux内核的经历,所以一直有个心结,在很多同学眼中操作系统内核运作是神秘莫测的,一直想让更多人能明白其内在机制,甚至让一个没有学过计算机的人起码能听懂大概是个神马东东,但因为种种一直没有成行,本来都已经打算放弃这件事了。可恰逢9月11鸿蒙正式发布,第一时间下载了源码分析,却一发不可收拾,彻夜难眠了,于是就有了鸿蒙系统源码分析系列文章。后续笔者想用讲故事的方式结合源码将鸿蒙的全貌栩栩如生的展现给大家看,鸿蒙是面向未来而设计的全场景系统,非常优秀,不深入的研究它真是可惜了,虽会有瑕疵之处,但瑕不掩瑜,想说的是多给点时间吧,毕竟太年轻了,笔者坚信它一定能成功,是坚定的追随者和传播者,如果你也对它有兴趣那就一起行动起来吧。
目录
张大爷的故事情节介绍
场馆是怎么运营的?
表演的过程是怎样的?
表演给谁看呢?
张大爷的工作流程怎样的?
甄勤快的工作流程呢?
王场馆的工作流程呢?
鸿蒙内核和这个故事的映射关系是什么?
请牢记这个故事
本篇是必读篇,太重要了!
本篇只讲一个故事,听完希望大家能把故事的场景过程记在脑子里,系列文章会反复的提这个故事,在后续具体每篇的源码解读过程中都会去用故事里的细节导读源码。如果您看了也喜欢也请分享给更多的人知道这个故事。故事就得有个名字,就叫 张大爷的故事吧,故事开始。
张大爷的故事情节介绍 某地有一个10*40的400平米运动场馆,只供本地公司/组织/团体安排举办各种活动使用的,但因为生意太好,申请人太多了,每次都要排队,所以在场馆外面整了32条通道用来排队,通道编号从0到31号,场馆里面有一座永远很准时,不会停的大钟表,每十分钟就自动响一次,场馆正中央有一个大屏幕,里面会展示以后活动的策划脚本方案。场馆里有很多的资源,有篮球,排球,小卖部,桌椅,还有小朋友(人也算资源),反正就是应有尽有,但是数量有限。组织者参加活动不用带任何东西,只要提供一张表演清单,当然清单是需要申请的,有基本的格式,清单内容栏上就是由你发挥了,可以写个游戏脚本,可以写电商的脚本,精彩的世界令你书写,有人会帮按脚本表演的。场馆里有个管理处那是工作人员专属的,非工作人员不得进入。 故事写到这里,大家脑子里有个画面了吧,继续走起。
场馆是怎么运营的? 场馆是怎么运营的呢?现场场馆都会给每家公司发个标号代表你使用场馆的优先级,0级是最高,31级最低,每家公司需要提前准备好你的表演节目单,节目里要使用到的资源也要提前准备好,比如你的节目单里有个少儿舞蹈叫祖国的花朵,需要3名小朋友,一把吉他,那这些资源要向场馆负责人申请好,所有节目里只要有一个节目资源申请到位了就可以去排队啦,假如你是8号标那就去8号窗口排队,等着被叫号提交节目清单。如果你的节目单里没有一个节目的资源申请到了那对不起您连排号的资格都没有。请保持住脑海中的画面啊,故事有点长,因为系列篇咱们就用这一个故事去解释鸿蒙内核的工作原理。
表演的过程是怎样的? 如果您的节目被叫到号的,只需要提交你的表演清单给场馆负责人就行了,场馆会根据你清单上的步骤把节目演完。每个节目十分钟,时间到了要回去重新排队,如果还是你就可以继续你的表演。但这里还会些异常情况发生,比如上级领导给场馆来个电话临时有个更高优先级的公司节目要插进来,没办法你的节目要先停止,场馆要让给别人,你得继续排队去,但请放心会在你退场之前给你记录下来祖国的花朵表演到哪个位置了以便回来了继续接着表演。还有种情况就是表演过程中需要额外申请其他资源,比如需要一把二胡,但二胡被别人拿走了,那也对不起您嘞,您又得回去排队,场地得让给别人用。更悲催的是如果你清单上所有的节目都在申请资源,那只能出队,连排队资格都被取消了,资源等别人用完了被你申请到了才能继续回来排队。你再次被叫上号回去表演祖国的花朵的时候节目不用重新表演,还记得吗?不是已经给你记录下位置存起来了,直接恢复到那个位置就行了。节目表演完所有资源要回收,这个节目从此消亡,如果你清单里所有节目都表演完了,那你的整个节目清单也可以拜拜了,当然你也可以自己取消表演,这个权利在你自己。
表演给谁看呢? 我们就是一个个的观众呀,游戏公司设计了游戏的脚本,电商公司设计了电商脚本,交给场馆会按你的些脚本来演,表演的场景需要观众操作时,观众在外面可以操作,发送指令。想想你玩游戏输入名字登录的场景。
好,继续,场馆里面有三名员工,张大爷,甄勤快,王场馆,张大爷负责叫号和叫停的,或者异常情况出现时如着火了,地震了也会让停的,甄勤快是很厉害了,什么活都能整,地球上就没有它执行不了的清单,他是负责按你的节目步骤执行的,最苦最累的就是它,所以叫甄勤快嘛,王场馆就是负责管资源,清理垃圾,搞搞后勤的。
张大爷的工作流程怎样的? 每十分钟准时响一次大钟,大爷会查下正在表演的节目时间有没有用完,没用完就继续演,用完了的不好意思先停止继续出去排队,然后大爷会去看下外面排队的人,从0号队列开始看有没有人在,因为它优先级最高嘛,从高往低了看,一直往下看直到有人的队列,例如是张全蛋了,再让张全蛋拿他优先级最高的节目去排,因为全蛋节目单里可能也有很多个节目,全蛋的节目也有优先级的,而且也是32个优先级。
甄勤快的工作流程呢? 节目单的步骤会打到中间显示屏上显示,一步一步很清楚,甄勤快就是去执行这些步骤的。除了组织大家在场地表演,还有一个管理处记得吗,有的节目单的步骤会用到管理处,比如去缴费,去打印等等吧,涉及管理处的就在管理处里面完成,不会跑到外面的场地来完成。管理处和表演场地是分的很清楚的。
王场馆的工作流程呢? 王场馆看也看的出来,就是管后勤的,接电话的,场地的各种现场清扫,每天开门做生意前的准备工作。
故事到这里讲完了,脑海里有画面了吗?没有的再读一遍,消化下,把他印在脑子里。笔者到底想说什么呢?这就是操作系统的工作机制,熟悉了这个故事就熟悉了至少80%的鸿蒙系统内核的工作原理!操作系统就是管理场馆和确保工作人员有序工作的系统解决方案商,外面公司只要提供个节目单,就能按节目单把这台戏演好给广大观众观看。有了这个故事垫底,鸿蒙内核源码分析系列就有了一个非常好的开始基础。
真的是这样的吗?必须滴。
鸿蒙内核和这个故事的映射关系是什么?排队的人手里的节目单就是一个进程,32个排队通道就是 32个进程优先级的就绪队列,他们手里的节目清单节目就是一个个的线程,也叫任务,清单上的步骤就是代码段的指令,只能读不能改的。节目被中断要要保存现场,下次继续表演要恢复现场,这个过程就叫任务上下文,表演的场地叫用户地址空间,用管理处的资源叫系统调用,系统调用需要在内核态完成,就是在管理处里面玩,管理处就是内核空间。张大爷干的就是调度的工作,十分钟响一次的大钟就是tick,只不过在鸿蒙内核是10ms一次,节目只有十分钟表演时间就是时间片,在鸿蒙默认是20ms。甄勤快干的就是CPU干的事,程序指令寄存器就是它的眼睛,盯着大屏幕一条条的执行,王场馆就是资源管理机制。电话,地震,火灾就是各种软硬件中断,触发后就要重新调度任务,等等等等....
请牢记这个故事当然还有很多的细节在故事里没有讲到,比如内存的具体分配机制,IPC,互斥,信号量等等,太细不可能真的在一个故事里全面讲完,笔者想说的是框架,架构思维,要先有整体框架再顺藤摸瓜寻细节,层层深入,否则很容易钻进死胡同里出不来。读着读着就放弃了,其实真没那么难。当你摸清了整个底层的运作机制再看上层的应用,就会有了拨开云雾见阳光,神清气爽的感觉。具体的我们在后续的章节里一一展开,用这个故事去理解鸿蒙系统内核,没毛病,请务必牢记这个故事。