图1 鸿蒙OS技术架构
如图1所示,我们可以看到鸿蒙OS的整体架构,而本文我们需要聚焦内核层的架构体系。内核层由内核子系统和驱动子系统组成。
内核子系统:鸿蒙OS采用多内核设计,支持针对不同资源受限设备选用适合的OS内核。内核抽象层(Kernel AbstractLayer,KAL)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。
驱动子系统:硬件驱动框架(HDF)是鸿蒙OS硬件生态开放的基础,提供统一的外设访问能力、驱动开发及管理框架。
而在内核子系统中包含了LiteOS的内核就是今天的主角,也就是我们要提到的微内核,为什么鸿蒙OS在具备Linux Kernel的情况下还要引入LiteOS的微内核技术作为补充呢?接下来就让我们一起走进微内核的世界。
2.宏内核与微内核在描述微内核之前,要了解什么是内核。大家都知道计算机是由诸多硬件组成的,包括:CPU、内存、磁盘、网卡、显示器、键盘、鼠标等等。为了能够管理和组织这些硬件资源,我们创造操作系统,而内核就是操作系统中的核心部分。
就好像我们常用的Windows操作系统,Unix以及Linux操作系统,它们都存在内核。
而目前市面上、绝大多数操作系统都是宏内核,其典型代表就是Linux。
宏内核中的“宏”字表现为,将内核服务作为整体,所有服务都“伸手即得”。也就是将控制计算机的各个模块,都聚合在内核中方便管理。如下图2所示,CPU调度、文件系统、内存管理、应用管理调度、中断处理、设备驱动都放在内核中。如果应用程序需要申请内存,内核直接使用“内存管理”给应用分配内存,使用“应用管理进程调度”给应用分配进程,没有额外的消耗。
图 5 信号量运作示意图
上面提到了信号量的使用方式,由于它是对资源使用量的计数器,因此以下两个场景经常会出现信号量的身影。
任务互斥:当多个任务同时对一个临界资源进行访问时,会对这个资源维护一个信号量,初始值为1,当有任务线程访问时就将这个值减1,此时如果其他任务线程也访问该资源会先检查信号量,如果小于等于0就等待。当之前的任务线程访问完毕,释放资源时会将信号量加1,此时其他任务线程就可以访问该资源了。资源计数:用于生产者与消费者的场景可以通过信号量的递增或者递减来表示资源的状态。5.总结本文从鸿蒙OS的架构特性入手,发现在内核子系统中使用了LiteOS的微内核架构,从而引出了微内核在鸿蒙架构中扮演的特殊角色。为了解释什么是微内核,先从操作系统内核说起,接着介绍了常见的宏内核将所有服务都集于一身,微内核为了提升灵活性、可扩展性,可靠性和可移植性,将一些非核心的服务从内核中剥离,只留一些核心服务在内核中减少了内核的容量,降低了出错的风险。最后,又回到开始时介绍的LiteOS ,并介绍了它的四大核心模块,包括:任务管理、内存管理、中断管理以及信号管理。
作者介绍崔皓,51CTO社区编辑,资深架构师,拥有18年的软件开发和架构经验,10年分布式架构经验。曾任惠普技术专家。乐于分享,撰写了很多热门技术文章,阅读量超过60万。《分布式架构原理与实践》作者。
来源: 51CTO技术栈
花粉社群VIP加油站
猜你喜欢