精华内容
下载资源
问答
  • HarmonyOS 内核的进程模块可以给用户提供多个进程,实现了进程之间的切换和通信,帮助用户管理业务程序流程。这样用户可以将更多的精力投入到业务功能的实现中。 HarmonyOS 内核中的进程采用抢占式调度机制,支持...

    1.1 进程

    1.1.1 基本概念

    从系统的角度看,进程是资源管理单元。进程可以使用或等待 CPU、使用内存空间等系统资源,并独立于其它进程运行。

    HarmonyOS 内核的进程模块可以给用户提供多个进程,实现了进程之间的切换和通信,帮助用户管理业务程序流程。这样用户可以将更多的精力投入到业务功能的实现中。

    HarmonyOS 内核中的进程采用抢占式调度机制,支持时间片轮转调度方式和FIFO 调度机制。

    HarmonyOS 内核的进程一共有 32 个优先级(0-31),用户进程可配置的优先级有 22 个(10-31),最高优先级为 10,最低优先级为 31。

    高优先级的进程可抢占低优先级进程,低优先级进程必须在高优先级进程阻塞或结束后才能得到调度。

    每一个用户态进程均拥有自己独立的进程空间,相互之间不可见,实现进程间隔离。

    用户态根进程 Init 由内核态创建,其它用户态进程均由 Init 进程 fork 而来。进程状态说明

    • 初始化(Init):该进程正在被创建。

    • 就绪(Ready):该进程在就绪列表中,等待 CPU 调度。

    • 运行(Running):该进程正在运行。

    • 阻塞(Pend):该进程被阻塞挂起。本进程内所有的线程均被阻塞时,进程被

    阻塞挂起。

    • 僵尸态(Zombies):该进程运行结束,等待父进程回收其控制块资源

     

    图 1 进程状态迁移示意图

     

     

    进程状态迁移说明:

    • Init→Ready:

    进程创建或 fork 时,拿到该进程控制块后进入 Init 状态,处于进程初始化阶段,当进程初始化完成将进程插入调度队列,此时进程进入就绪状态。

    • Ready→Running

    进程创建后进入就绪态,发生进程切换时,就绪列表中最高优先级的进程被执行,从而进入运行态。若此时该进程中已无其它线程处于就绪态,则该进程从就绪列表删除,只处于运行态;若此时该进程中还有其它线程处于就绪态,则该进程依旧在就绪队列,此时进程的就绪态和运行态共存。

    • Running→Pend:

    进程内所有的线程均处于阻塞态时,进程在最后一个线程转为阻塞态时,同步进入阻塞态,然后发生进程切换。

    • Pend→Ready / Pend→Running:

    阻塞进程内的任意线程恢复就绪态时,进程被加入到就绪队列,同步转为就绪态,若此时发生进程切换,则进程状态由就绪态转为运行态。

    • Ready→Pend:

    进程内的最后一个就绪态线程处于阻塞态时,进程从就绪列表中删除,进程由就绪态转为阻塞态。

    • Running→Ready:

    进程由运行态转为就绪态的情况有以下两种:

    1. 有更高优先级的进程创建或者恢复后,会发生进程调度,此刻就绪列表中最高优先级进程变为运行态,那么原先运行的进程由运行态变为就绪态。

    2. 若进程的调度策略为 SCHED_RR,且存在同一优先级的另一个进程处于就绪态,则该进程的时间片消耗光之后,该进程由运行态转为就绪态,另一个同优先级的进程由就绪态转为

    运行态。

    • Running→Zombies:

    当进程的主线程或所有线程运行结束后,进程由运行态转为僵尸态,等待父进

    程回收资源。

    1.1.2 使用场景

    进程创建后,用户只能操作自己进程空间的资源,无法操作其它进程的资源(共享资源除外)。 用户态允许进程挂起,恢复,延时等操作,同时也可以设置用户态进程调度优先级和调度策略,获取进程调度优先级和调度策略。进程结束的时候,进程会主动释放持有的进程资源,但持有的进程 pid 资源需要父进程通过 wait/waitpid 或父进程退出时回收。

    1.2 线程

    1.2.1基本概念

    从系统的角度看,线程是竞争系统资源的最小运行单元。线程可以使用或等待CPU、使用内存空间等系统资源,并独立于其它线程运行。

    HarmonyOS 内核每个进程内的线程独立运行、独立调度,当前进程内线程的调度不受其它进程内线程的影响。

    HarmonyOS 内核中的线程采用抢占式调度机制,同时支持时间片轮转调度和FIFO 调度方式。

    HarmonyOS 内核的线程一共有 32 个优先级(0-31),最高优先级为 0,最低优先级为 31。

    当前进程内高优先级的线程可抢占当前进程内低优先级线程,当前进程内低优先级线程必须在当前进程内高优先级线程阻塞或结束后才能得到调度。

    线程状态说明:

    • 初始化(Init):该线程正在被创建。

    • 就绪(Ready):该线程在就绪列表中,等待 CPU 调度。

    • 运行(Running):该线程正在运行。

    • 阻塞(Blocked):该线程被阻塞挂起。Blocked 状态包括:pend(因为锁、事件、信号量等阻塞)、suspend(主动 pend)、delay(延时阻塞)、pendtime(因为锁、事件、信号量时间等超时等待)。

    • 退出(Exit):该线程运行结束,等待父线程回收其控制块资源

     

    图 2 线程状态迁移示意图

     

     

    线程状态迁移说明:

    • Init→Ready:

    线程创建拿到控制块后为 Init 状态,处于线程初始化阶段,当线程初始化完成将线程插入调度队列,此时线程进入就绪状态。

    • Ready→Running:

    线程创建后进入就绪态,发生线程切换时,就绪列表中最高优先级的线程被执行,从而进入运行态,但此刻该线程会从就绪列表中删除。

    • Running→Blocked:

    正在运行的线程发生阻塞(挂起、延时、读信号量等)时,该线程会从就绪列表中删除,线程状态由运行态变成阻塞态,然后发生线程切换,运行就绪列表中剩余最高优先级线程。

    • Blocked→Ready / Blocked→Running:

    阻塞的线程被恢复后(线程恢复、延时时间超时、读信号量超时或读到信号量等),此时被恢复的线程会被加入就绪列表,从而由阻塞态变成就绪态;此时如果被恢复线程的优先级高于正在运行线程的优先级,则会发生线程切换,将该线程由就绪态变成运行态。

    • Ready→Blocked:

    线程也有可能在就绪态时被阻塞(挂起),此时线程状态会由就绪态转变为阻塞态,该线程从就绪列表中删除,不会参与线程调度,直到该线程被恢复。

    • Running→Ready:

    有更高优先级线程创建或者恢复后,会发生线程调度,此刻就绪列表中最高优先级线程变为运行态,那么原先运行的线程由运行态变为就绪态,并加入就绪列表中。

    • Running→Exit:

    运行中的线程运行结束,线程状态由运行态变为退出态。若未设置分离属性(PTHREAD_CREATE_DETACHED)的线程,运行结束后对外呈现的是 Exit状态,即退出态。

    • Blocked→Exit:

    阻塞的线程调用删除接口,线程状态由阻塞态变为退出态。

    1.2.2 使用场景

    线程创建后,用户态可以执行线程调度、挂起、恢复、延时等操作,同时也可以设置线程优先级和调度策略,获取线程优先级和调度策略。

    1.3 内存

    1.3.1 基本概念

    内存管理是开发过程中必须要关注的重要过程,它包括内存的分配、使用和回收。良好的内存管理对于提高软件性能和可靠性有着十分重要的意义。

    1.3.2 使用场景

    针对用户态开发,HarmonyOS 内存提供了一套内存系统调用接口,支持内存的申请释放、重映射、内存属性的设置等,还有 C 库的标准内存操作函数。

    1.4 网络

    1.4.1 基本概念

    网络模块实现了 TCP/IP 协议栈基本功能,提供标准的 POSIX socket 接口。

    说明

    当前系统使用 lwIP 提供网络能力。

    1.4.2 使用场景

    针对用户态开发,HarmonyOS 内核提供了一套网络功能系统调用接口,支持socket 的创建关闭、数据收发、网络属性的设置等,通过 C 库提供标准的POSIX socket 函数供开发者使用。

     

    展开全文
  • 华为鸿蒙系统HarmonyOS学习之十:鸿蒙HarmonyOS发展史与未来

    华为鸿蒙系统HarmonyOS学习之十:鸿蒙HarmonyOS微内核技术

     

    一、前言

           把操作系统中更多的成分和功能放到更高的层次(即用户模式)中去运行,而留下一个尽量小的内核,用它来完成操作系统最基本的核心功能,称这种技术为微内核技术。

    在微内核中通常提供了以下的功能:

    1. 进程/线程管理
    2. 低级存储器管理
    3. 中断和陷入处理

    微内核具有以下的特点:

    1. 足够小的内核
    2. 基于客户/服务器模式
    3. 应用机制与策略分离原理
    4. 采用面向对象技术

    机制与策略的概念

    1. 机制:实现某一功能的具体执行机构(what)
    2. 策略:在机制的基础上借助于某些参数和算法实现该功能的优化(how)

    微内核的优缺点

    优点:

    1. 系统服务模块化,可移植性高;

    2. 内核安全性提高(模块内部的 Bug 不影响内核稳定,将黑客利用软件漏洞造成的破坏限制在单个模块内部);

    3. 可以多套系统服务共存,相当于同时运行多种操作系统;

    4. 稳定统一的接口(可以独立维护私有驱动以及服务,不需要跟内核源码绑定);

    5. 在商业上,微内核可以避免代码受到一些开源协议的影响,比如 GPL 协议;

    6. 内核精简,可以进行形式化验证,利用数学证明内核的安全性;

    7. 数学可证明的实时性;

    8. 非常适合多处理器系统设计,在多处理器核心计算机上,互相依赖的系统服务可以同时运行;

    缺点

    1. 通过进程通信的方式交换数据或者调用系统服务,而不是使用系统调用,造成额外的操作系统开销;

    2. 使用一些频繁使用的系统服务时,比如网络收发数据,造成的进程上下文切换对操作系统来说也是一个负担;

    3. 由于系统服务高度模块化,系统服务之间存在大量的内存复制;

    4. 对互相之间存在复杂调用关系的系统服务,难以设计通信接口;

    5. 系统服务与内核在地址空间上分离,造成代码局部性差,降低了 cache 命中率。

    二、微内核的发展历史

    微内核这个概念从提出开始到现在就在一直处于不断地发展、完善进步之中,到目前为止可以分为三个历史时期,也可以称为三代。

    第一代微内核:从无到有

         第一代微内核的主要代表是 Mach,由美国卡耐基梅隆大学的 Avie Tevanian 和 Richard Rashid 主导开发的。当时正是UNIX 发展正如日中天时期,因此Mach不可避免的受到UNIX的影响,最起码兼容unix是最起码的考量,但是与 UNIX 不同的是 Mach 使用微内核架构。Mach 以 IPC 是作为所有系统服务与内核交换数据的基础机制,充分运用 IPC、虚拟内存、多进程等特性将冗余的系统服务移出内核作为进程运行。

         1986年,Mach 发布了第2版,但此时 Mach 内核并不提供完全的系统服务,该本的内核包含了大量 4.3 版本的 BSD 系统(UNIX的一个分支)代码提供系统服务,并且 BSD 系统服务运行在内核状态,这导致 Mach 内核的代码体积甚至大于常规 UNIX 内核。这两个版本达成了如下的目标:

    • 验证了微内核的可行性;
    • 在多处理器计算机上进行移植验证了微内核在多处理器计算机上的运行;
    • 最后为了提高 IPC 的效率,Mach 使用共享内存机制来完成 IPC。

             Mach 的共享内存机制是在虚拟内存技术的支持下实现的,只有需要对内存进行写入时才进行复制。这么一处理比每次都复制一遍内存节省了内存使用同时又加快了 IPC 机制的处理时间,这个改进称为写时复制,并且在如今的通用操作系统如 Linux 中常常用到。经过测试,Mach 2.5的效率最多比 UNIX 少 25%,但是考虑到 Mach 带来的可靠性、可拓展性、安全性,这个效率损失尚可以接受。此时 Mach 内核还不算完全的微内核。而考虑到微内核可以更高效地利用多处理器计算机的处理器核心资源,寄希望Mach 把系统服务都搬到内核之外后可以把运行效率损失降下来。开放软件基金会(Open Software Foundation,OSF)宣布下一代系统 OSF/1 将基于 Mach 的内核, 众多公司开始采用这个内核:如NeXTSTEP 使用 Mach2.5(未与苹果合并之前);IBM 利用 Mach 构建 Workplace OS;苹果公司基于 Mach2.5 打造其操作系统内核 XNU。

          Mach 3.0 于 1990 年发布,由于在系统服务之间完全使用 IPC 通信,而不是向宏内核那样直接进行函数调用,即便是多处理器机器上运行也性能损失惨重,Mach 3.0 最多比 UNIX 损失 67% 运行效率,这导致 Mach 3.0 以及其所代表的第一代微内核设计被看衰。此后断断续续有在 Mach 的基础上对性能进行提升的尝试,但是均不太理想,至此 Mach 成为了微内核第一代先驱者。

    第二代微内核:解决性能问题

          第二代微内核的主要代表是 L3 和 L4,以及 QNX 系统使用的 Neutrino 内核。前面第一代的微内核 Mach 由于效率问题原因失败了,但是微内核的理念并没有被放弃,Jochen Liedtke 认为 Mach 的 IPC 效率低下的原因就是因为 IPC 部分不够精简,于是有了L3 和 L4 微内核,对 IPC 部分进行了很彻底的精简优化:

    • 内核的 IPC 机制只是单纯地传递信息,诸如安全权限检查这类的代码都省略掉,省略掉的功能全部由用户进程自己处理。如此一来 IP C功能部分的代码执行时间大大缩短;
    •  IPC 不使用内存传递消息,而使用寄存器传递消息,同时限制 IPC 每次传递的信息长度,这样省去了对内存的访问时间。L4 微内核的 IPC 速度经过测试要比 Mach 快 20 倍,这个令人惊讶的优化效果吸引了众多的目光,使微内核的研究重新火热起来。后面 L4 内核又发展出了很多相关系统,比如 Pistachio、L4/MIPS 与 Fiasco 等等,这些内核组成了 L4 的大家族。

     

             第二代微内核的代表除了有 L4 内核,也还有其他微内核比如 Exokernel、Rambler 等,但做的比较成功的是:黑莓公司旗下的 QNX 系统所使用的 Neutrino 内核(QNX,1980年诞生,最初以 QUICK UNIX 为名,后改为 QNX;2004 年 QNX 被 Harman 国际收购;2010 年 Harman 国际下被黑莓收购,QNX 成为黑莓旗下的资产),QNX 主要为高可靠领域提供解决方案,比如交通、能源、医疗、航天航空等。

     

    第三代微内核:主要重视安全问题等

            在前面两代的微内核的基础上,第三代微内核蓬勃发展,许许多多微内核都被开发出来,主要代表有:seL4、Fiasco.OC、NOVA 等。

            本来第一代微内核的设计隔离了使内核安全性降低的系统服务,让系统服务漏洞不会影响内核,进而提高了内核安全性,可以说是关上了破坏系统的门, 但是第二代系统却又给攻击者开了个窗户。

           由于第二代微内核在内核中省去了关于安全性检查等步骤,把所有关于安全检查功能的实现都交给系统服务自己去实现,这导致系统服务的通信接口直接暴露给用户态,任何进程都可能无限制地请求系统服务,系统服务不得不花费额外的代价来区分请求是否合法,容易造成拒绝服务攻击。

            比如正常的文件服务应该是从虚拟文件系统服务->文件系统服务->磁盘驱动服务这个流程来完成的,但是如果攻击者如果绕过虚拟文件系统服务,直接无限制地请求攻击者本身没有权限访问的文件系统服务,使文件系统服务长期处于满载状态,让其他进程无法通过正常的虚拟文件系统得到文件系统服务。为了增强安全性,且不过分影响性能,人们开始研发第三代微内核。

              seL4 是在第二代内核 L4 的基础上发展而来的。seL4 不仅仅继承了 L4 内核家族的高性能特性,还具备基于端点(enndpoint)的 IPC 机制。

              这种 IPC 机制最大的特点是使用了能力空间的概念,进程在使用 IPC 请求系统服务时必须具备相对应的能力,进程持有不可伪造的令牌来表示拥有请求某种服务的能力。令牌可以被复制,可以被转移,还可以通过 IPC 进行传输。令牌其实是一个指向存在于内核空间内核对象的指针,所以普通进程并不能修改自身以及其他进程的权限分配,但是内核可以对令牌指定的权限进行控制,从而保证了用户态不能绕过能力空间这个机制对系统服务造成滥用。

         seL4 还是第一个完全通过形式化验证的内核,通俗说形式化验证就是在数学软件的帮助下使用数学语言自动化地推导检查系统的每一个运行状态。seL4 形式化验证相关论文。

    三、微内核与宏内核的对比

    宏内核的架构图

    微内核架构图

                形象一点说宏内核就是操作系统是个大管家,几乎包办一切,用户应用程序的需求直接向内核提出就行;微内核更像一个代理人,几乎所有的驱动、文件系统全部运行在与用户应用程序平级的用户模式下。

            如果把操作系统看成一家公司,而宏内核的特点是用户请求直达内核,内核统一安排执行,这代表此公司使用扁平化的管理架构,而微内核的操作系统中则需要设立很多如驱动,文件系统等部门,这显示公司使用制度化、等级化的管理架构。也就是说,如果宏内核代表的是层次简单的扁平化管理风格,微内核则代表多部门的制度化管理风格。

           运行效率宏内核更优:形象一点,就类似去政府部门跑公章的经历,很多时间、精力都浪费在了部门(进程)之间的上下文切换(上文已经释义)中了,微内核在效率方面肯定是处于劣势的,所以目前的主流操作系统如Linux和Windows本质上使用的都是宏内核,当然有人会说Windows使用的是混合内核,不过这种混合内核也是以效率优先的扁平化架构,本质上还是宏内核。

    宏内核vs微内核,谁更安全?:宏内核采用扁平化管理,扁平化虽然能有比较高的效率,但是难免会在身份鉴别、数据传递的过程中出现纰漏,从而给入侵者可乘之机。微内核将其内核抽象成一个有限状态机,进而证明在状态迁移与跃迁的过程中都不会发生会被恶意利用的漏洞,从而保证整个体系的安全。当然这个安全也有前提:

    • 不能有内鬼:即生成内核的编译器、链接器与操作运行的硬件环境如DMA等设备不能被提前恶意植入后门。
    • 不能有密码泄露:形式化验证只能保证制度体系本身不出问题,如果用户将自身密码泄露那系统是无法防范的。

    我们知道宏内核的操作系统尤其是Windows,经常会暴出安全漏洞,用户在没有泄露密码且没使用问题硬件的情况下,还是会遭到被黑客入侵。所以在安全性对比上微内核可谓优势明显。

    宏内核vs微内核,谁实时性强?:效率更优的宏内核在实时性方面的表现其实不如微内核。那些对于实时性要求极高的军用操作系统(如vxWorks等)使用的都是微内核架构。

    宏内核vs微内核 谁更适合多核处理器?:宏内核会在CPU核心间不断进行上下文切换,而微内核则不断在进程间进行上下文切换。微内核的回归验证了微内核与多处理器的硬件平台配合会更好

    640?wx_fmt=png

    四、鸿蒙的微内核的微内核技术

     

    •   微内核架构包含两类组件:核心系统和插件系统。核心系统的功能稳定,很少变更,其只拥有能使应用运行的最小功能逻辑,这些通用逻辑(例如插件模块的注册、加载、卸载,以及插件模块之间的相互通信等)不涉及任何特定业务;插件系统则具备良好的扩展性,其负责实现特定的业务逻辑,可根据特定业务需求而变更。
          显而易见,微内核架构本质上其实是将一个软件系统中的变化部分封装在插件中,从而实现不同业务之间的隔离性,达到系统快速灵活扩展的目的,同时所有特定业务相关逻辑的变更不会影响整体系统的稳定性。

    • 设计要点
      微内核架构设计有以下三个关键点:插件管理、插件链接和插件通信。

       

    1. 插件管理
          核心系统需要知道当前系统中共有多少个插件,哪些插件处于可用状态,什么时候加载一个插件,如何加载一个插件等。
          实现上述功能的一个常用机制是插件注册表:核心系统提供一个服务来响应插件的注册请求,最终将当前系统的所有插件信息(插件标识,类别,启动方式等)保存起来。存储方式可以选择配置文件存储或者数据表存储等。

       

    2. 插件链接
          插件链接制定了一个插件与核心系统的通信方式,也就是链接规范,故任何一个可用插件都务必遵从核心系统中该类别插件所制定的链接规范。
          常见的链接规范有OSGI(Eclipse),消息队列,依赖注入(Spring),RPC等。
    3. 插件通信
          插件模块的设计是为了达到低耦合目的,也符合这一原则。但一个业务请求往往需要几个插件模块共同协作来实现,这就需要插件之间可以实现相互通信。插件之间的通信则需要通过中央处理器(核心系统)来作为桥梁,故核心系统除去提供上文提及的注册表机制之外,还需要提供类似操作系统总线之类的通信机制。

    五、业界其他的微内核系统:Fuchsia、Minix

           Fuchsia 是 Google 开发的一款全新操作系统,试图覆盖手机、平板甚至笔记本等一系列领域。Google 为该系统配备了 Vulkan 图形接口、3D 桌面渲染 Scenic、Flutter 应用开发框架,还有一个称为 zircon 的微内核。

           zircon 内核是从高通平台的一个 Bootloader 项目:Little Kernel发展而来。zircon内核属于微内核设计,只提供 IPC、进程管理、地址空间管理功能。zircon 区别于以进程或者以文件为核心的设计,zircon 是以内存为核心来设计的,内存在 zircon 中是以对象的方式存在,可以通过 channel 通信机制传递虚拟内存对象(Virtual memory object)的句柄,进程拿到句柄后可以把这块内存映射到自己的空间。

          Minix 系统则由荷兰阿姆斯特丹的 Vrije 大学的 Andrew S.Tanenbaum 教授所开发。该系统最大的特点是可以故障隔离,自动重启失败的服务。Minix 使用分层设计,最底层的微内核提供中断处理、进程管理、进程通信等服务,这一层运行在内核态;中间层提供轮回服务(Reincarnation Server)、文件服务、进程管理、X 图形服务以及驱动等,这一层运行在用户态,最上层为用户进程。其中轮回服务负责在中间层的服务出现崩溃时重启这些服务,从而保证服务的自我修复。Minix 由于其自我修复特性被英特尔管理引擎(ME)所选用,该管理引擎主要负责管理英特尔芯片的内部模块。

     

    展开全文
  • 华为鸿蒙系统HarmonyOS学习之二:系统架构

    华为鸿蒙系统HarmonyOS学习之二:鸿蒙HarmonyOS系统架构


         鸿蒙HarmonyOS整体遵从分层的层次化设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 功能/模块”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或功能/模块。

    下面分别对各个层次的功能做简要介绍:

    一、内核层:主要有内核子系统和驱动子系统组成

    • 内核子系统:HarmonyOS采用多内核设计,支持针对不同资源受限设备选用适合的OS内核。内核抽象层(KAL,KernelAbstract Layer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。
    • 驱动子系统:HarmonyOS驱动框架(HDF)是HarmonyOS硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架。

    二、系统服务层:系统服务层是HarmonyOS的核心能力集合,通过框架层对应用程序提供服务。该层包含以下几个部分:

    • 系统基本能力子系统集:为分布式应用在HarmonyOS多设备上的运行、调度、迁移等操作提供了基础能力,由分布式软总线、分布式数据管理、分布式任务调度、方舟多语言运行时、公共基础库、多模输入、图形、安全、AI等子系统组成。其中,方舟运行时提供了C/C++/JS多语言运行时和基础的系统类库,也为使用方舟编译器静态化的Java程序(即应用程序或框架层中使用Java语言开发的部分)提供运行时。
    • 基础软件服务子系统集:为HarmonyOS提供公共的、通用的软件服务,由事件通知、电话、多媒体、DFX、MSDP&DV等子系统组成。
    • 增强软件服务子系统集:为HarmonyOS提供针对不同设备的、差异化的能力增强型软件服务,由智慧屏专有业务、穿戴专有业务、IoT专有业务等子系统组成。
    • 硬件服务子系统集:为HarmonyOS提供硬件服务,由位置服务、生物特征识别、穿戴专有硬件服务、IoT专有硬件服务等子系统组成。

          根据不同设备形态的部署环境,基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集内部可以按子系统粒度裁剪,每个子系统内部又可以按功能粒度裁剪。

    三:框架层:框架层为HarmonyOS的应用程序提供了Java/C/C++/JS等多语言的用户程序框架和Ability框架,以及各种软硬件服务对外开放的多语言框架API;同时为采用HarmonyOS的设备提供了C/C++/JS等多语言的框架API,不同设备支持的API与系统的组件化裁剪程度相关。

    四、应用层

    应用层包括系统应用和第三方非系统应用。HarmonyOS的应用由一个或多个FA(Feature Ability)或PA(Particle Ability)组成。其中,FA有UI界面,提供与用户交互的能力;而PA无UI界面,提供后台运行任务的能力以及统一的数据访问抽象。基于FA/PA开发的应用,能够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用体验。

     

    展开全文
  • 鸿蒙系统的微内核是什么

    万次阅读 多人点赞 2019-08-27 23:15:50
    ​最近华为高调发布了鸿蒙操作系统(Harmony OS),基于微内核的全场景分布式系统,可以按需扩展,低延时,实现更广泛的系统安全。按照发布会的PPT来看,鸿蒙OS有三层架构,第一层是微内核,第二层是基础服务,第三层...

    ​最近华为高调发布了鸿蒙操作系统(Harmony OS),基于微内核的全场景分布式系统,可以按需扩展,低延时,实现更广泛的系统安全。按照发布会的PPT来看,鸿蒙OS有三层架构,第一层是微内核,第二层是基础服务,第三层是程序框架。所谓的第二层基础服务应该就是那些从内核态空间移到用户态空间的基础服务程序。当然,也可能部分还是运行的内核态,更像是混合内核。

     

    当下的鸿蒙OS依然是基于开源框架,只是关键模块自我研发,也就是说,和各大手机厂商使用Android开源系统实现各自的定制系统大概是一个意思。鸿蒙OS的愿景是2020年实现内核和应用框架自研,2021年实现软硬件协同优化。这里的软硬件协同优化,应该是要解决进程间通信(Inter-process communication, IPC)的性能问题,这个后面会详细说一下。

     

    关于鸿蒙OS不过多评价,时间是检验真理的唯一标准。接下来主要聊一聊微内核的概念。

     

    微内核(Microkernel or μ-kernel),这个概念其实是相对于宏内核(Monolithic kernel)而言的。

     

    宏内核与微内核对比图

     

     

    我们常说的Linux/UNIX就是基于宏内核的,内核提供了相当多的功能,包括驱动,调度器,地址空间管理,进程间通信,文件系统,虚拟文件系统,系统调用等,以Linux为例,其宏内核的代码量高达2700万行。

     

    宏内核系统架构

     

    而微内核仅提供调度器,地址空间管理以及进程间通信等最基础的功能,MINIX 3的微内核仅1.2万行代码。

    微内核架构

     

    宏内核与微内核代码量为什么会有这么大的区别呢?德国计算机科学家Jochen Liedtke提出的微内核最小化原则,简单的讲就是,宏内核所提供的所有功能,可以扔到用户态实现的,就一律扔到用户态,内核仅保留绝对必要的功能。这有点像奥卡姆剃刀原理,如非必须,勿增实体。也就是说,宏内核提供了大量的冗余功能,兼容了太多的硬件,代码量自然就大。而微内核甚至把硬件的驱动程序从内核剥离出去,使其运行在用户态。

     

    早期的宏内核,其实很像我们今天所说的微内核。早期设备本身的内存空间有限,外设也极少,内核需要支持的特性也很有限。但是随着硬件的飞速发展,内核需要支持更多的特性和更多的外设,宏内核架构的复杂性和代码规模也就飞速增加起来了,内核程序间的耦合度也越来越大。当然,CPU速度的提升以及内存空间的增加,让我们基本上可以无视内核对性能的消耗。但是5G时代,一个万物互联(Internet of Things, IoT)的时代,将有更多的小型智能设备接入互联网,低功耗、低内存、安全性成为了新的要求,在这些设备上跑宏内核的系统绝对不是好的选择,由此,微内核的热度又起来了。

     

    早在上个世纪八九十年代,微内核一度被炒的热火朝天。但是一直因为性能问题而没有得到广泛应用。直到今天,微内核在学界的热度也远超工业界。每一次发展微内核,都大致经历这样的过程:把内核的某些功能剥离出内核,然后爆发性能问题,然后再把一部分功能移回到内核。这样就出现了很多介于宏内核和微内核之间的内核形态,一般统称为混合内核。我们常见的Mac OS、Windows NT等用的就是这种混合内核的架构。

    混合内核

     

    近几年谷歌一直在研发Fuchsia系统,使用的Zircon内核,才算是真正意义上的微内核。

     

    那么,微内核到底有什么优点呢?

     

    • 分布式支持:微内核各模块采用IPC传递信息,对于IPC而言,无论是在本机,还是局域网或者广域网,只要赋予进程和设备唯一的标识符,微内核的设计几乎是天然支持分布式系统的。

       

    • 模块化、低耦合:由于大部分服务程序被转移到用户态空间,系统就可以按需启动这些服务,按需接入外设。用户态的进程各自独立,系统耦合度大大降低。

       

      组件故障不会导致系统重启,内核只需要重启故障组件就可以恢复正常,系统稳定性可以大大提高。熟悉Linux内核编程的人都知道,内核代码出问题,往往会导致整个系统崩溃。而用户态程序不仅不会导致系统崩溃,而且易于调试。

       

      微内核系统功能升级也更容易,由于宏内核的很多功能都是运行在内核,跟随系统一起启动。虽然可以使用补丁实现故障修复和功能升级,但是依然有很多问题无法通过补丁解决,还是要依赖版本更换和重启整个系统。而微内核只需要替换相关组件,然后重启组件即可。

       

    • 内核代码零缺陷:由于微内核代码量极少,可以从数学角度进行形式化验证,从而保证内核代码完全没有缺陷,也就是所谓的Bug free。但是这并不是说整个系统没有缺陷,系统本身还包括用户态的服务程序,说白了,只是把缺陷转移到相对安全的用户态罢了。

     

    那为什么微内核直到今天也没广泛应用呢?

     

    原因前面已经说了,微内核的低效率是硬伤。微内核依赖IPC实现通信,宏内核的IPC效率就很不尽人意,微内核则把IPC的低效率进一步放大了。相对而言,宏内核的文件系统,驱动等以线程的方式工作在内核空间,它们之间的通信可以都在内核完成,不需要上下文切换,可以直接访问共享资源,甚至可以直接相互调用接口达到通信的目的。而微内核则需要通过IPC通信,触发系统调用,内存拷贝(异步通信需要拷贝两次),运行上下文切换,阻塞进程,这些操作开销都很大。

     

    Jochen Liedtke创造的L4 microkernel把IPC的系统开销降低了一个数量级。如何实现呢?

    • 首先,直接弃用异步IPC,所有通信均使用同步的方式。

       

    • 然后把通信数据尽可能直接使用寄存器传递(这个涉及CPU指令集,有机会再细说),这样可以减少数据拷贝、内存寻址、调度器切换运行上下文的开销。

       

    • 最后为了解决同步通信造成进程阻塞的问题,引入了进程直接切换的概念,即当有数据发送时,当发送端发完数据时,直接将上下文切换到接收进程,迅速完成数据传递和接收。

       

    • 除此之外,微内核效率差的另一个原因则是每指令的存储器周期比宏内核要长很多,这个就需要减少微内核的缓存工作集来解决问题了。

       

    微内核效率差的原因除了IPC、指令存储周期长外,还有一个观念上的问题。华为鸿蒙OS的愿景是支持多终端,统一开发流程,也就是让一个微内核支持所有的应用场景。而提高微内核效率的一个解决方案却是,设计单一目的(Single-purpose)、专用的微内核。不知道华为鸿蒙OS是怎么解决这个问题的,还有点小期待呢。

     

    推荐阅读:我是一个程序员  、  没有人怕做他熟练掌握的事情

    微信扫码或者搜索『icolakele』吧!

    展开全文
  • 鸿蒙对标的是Windows、安卓、IOS这类完整系统,Linux只是鸿蒙支持的内核之一。鸿蒙支持多种内核,有Linux,也有Liteos-a。Liteos-a为物联网而生,支持MMU,支持内核/APP空间隔离、支持各个APP空间隔离,系统更健壮;...
  • 鸿蒙系统HarmonyOS),是第一款基于微内核的全场景分布式OS,是华为自主研发的操作系统。2019年8月9日,鸿蒙系统在华为开发者大会上正式发布,华为会率先部署在智慧屏、车载终端、穿戴等智能终端上,未来会有...
  • 鸿蒙和安卓鸿蒙操作系统 | 一、什么是鸿蒙? HormonyOS是第一个基于微内核的全场景分布式操作系统。 是华为自主研发的操作系统。 2019年8月9日, HormonyOS系统在华为开发者大会()上正式发布。 华为将率先布局智慧...
  • 鸿蒙Liteos-a内核移植手册,很多人会混淆鸿蒙跟Linux的关系。 先举个例子,大家很熟悉的Windows里面含有内核,也含有UI系统,含有桌面程序,普通人可以直接使用Windows。 但是Linux仅仅是一个内核(它提供进程管理、...
  • 此前由于媒体传得沸沸扬扬,说华为的鸿蒙操作系统是基于Linux内核开发的,兼容安卓等,但是现实的情况是:鸿蒙操作系统(HarmonyOS)是基于微内核的,参考华为鸿蒙操作系统(HarmonyOS)主要特性介绍,附讲解图示一文。...
  • 主要对鸿蒙系统架构,系统安全,微内核的介绍
  • HarmonyOS整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 功能/模块”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或功能/模块 ...
  • 全方位了解HarmonyOS 操作系统内核

    千次阅读 多人点赞 2020-12-22 15:20:02
    鸿蒙OS是一款基于微内核的全场景分布式操作系统,那么微内核是什么?本文将从微内核的发展历史说起,带你全方位了解微内核并快速入门OpenHarmony的LiteOS微内核 ,帮助你理解鸿蒙系统...鸿蒙HarmonyOS内核技术 ...
  • 最新款国产微内核物联网os, 华为荣耀强力出品, 推荐所有操作系统爱好者学习、交流、分享,提升自我、助力国产os
  • 本系列从HarmonyOS架构层视角整理成文, 并用生活场景及讲故事的方式试图去解构内核,一窥究竟。帮助你读懂并快速理解鸿蒙操作系统源码。 1.鸿蒙内核源码分析(调度机制篇) 2.鸿蒙内核源码分析(进程管理篇) 3.鸿蒙...
  • 内核子系统:鸿蒙采用多内核设计,可以为不同资源限制的设备选择合适的操作系统内核。 内核抽象层(KAL)屏蔽了内核实现的差异,为上层提供了基本的内核功能,包括进程和线程管理、内存管理、文件系统、网络管理和...
  • HarmonyOS 系统安全性 在搭载HarmonyOS的分布式终端上,可以保证“正确的人,通过正确的设备,正确地使用数据”。 通过“分布式多端协同身份认证”来保证“正确的人”。 通过“在分布式终端上构筑可信运行环境...
  • 华为鸿蒙系统HarmonyOS学习之九:鸿蒙HarmonyOS发展史与未来
  • HarmonyOS 系统简介 HarmonyOS是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种...
  • 提示:本文基于开源鸿蒙内核分析,...前言:因笔者在大学有痛苦阅读linux0.11内核的经历,所以一直有个心结,在很多同学眼中操作系统内核运作是神秘莫测的,一直想让更多人能明白其内在机制,甚至让一个没有学过计算
  • 最新款国产微内核物联网os, 华为荣耀强力出品, 推荐所有操作系统爱好者学习、交流、分享,提升自我、助力国产os
  • 鸿蒙操作系统用的微内核到底是什么?

    万次阅读 多人点赞 2019-06-27 14:06:54
    作者 |RT-Thread责编 | 伍杏玲【CSDN 编者按】安卓系统是宏内核,而最近热议的华为鸿蒙操作系统是微内核。什么是微内核?微内核是如何发展?其优缺点是什么呢?...
  • 华为鸿蒙系统:基于微内核的全场景分布式OS1、分布式架构首次用于终端OS,实现跨终端无缝协同体验。2、 确定时延引擎和高性能IPC技术实现系统天生流畅。3、基于微内核架构重塑终端设备可信安全。4、通过统一IDE支撑...
  • OpenHarmony技术架构如下所示: 内核层 内核子系统:采用多内核(Linux内核或者LiteOS)设计,支持针对不同资源受限设备选用适合的OS内核内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽多内核差异,对上层提供...
  • 鸿蒙内核源码分析:调度机制篇

    千次阅读 2020-10-07 09:48:35
    作者 | 深入研究鸿蒙鸿蒙内核发烧友出品 | CSDN(ID:CSDNnews)头图 | CSDN 下载自东方 IC阅读之前建议先读本系列其他文章,以便对本文任务调度机制的理解。为什么...
  • linux微内核鸿蒙分析)

    千次阅读 2020-11-11 11:37:10
    1、最近鸿蒙炒的火热,19年就说ipc是谷歌fu的5倍,但他当时没有对比宏内核,正常宏内核的ipc效率肯定很高,我自己觉得微内核确实是体积小了但是外面的那些驱动什么的又需要开发者去开发,鸿蒙独立了跑到国外谷歌全家...
  • 鸿蒙内核开发概述

    千次阅读 2020-09-18 15:00:51
    第一章 鸿蒙内核开发概述 1.1 鸿蒙系统有哪些内容? 鸿蒙系统,就相当于一套完整的PC软件系统。 Windows里含有: 简单地说,鸿蒙系统里含有 ① 电脑一开机,那些界面是谁显示的?是BIOS,它做什么?一些...
  • 华为鸿蒙系统HarmonyOS学习之十四:方舟编译器
  • 3、Harmony鸿蒙OS采用全新的微内核的射击,保证系统流畅和信息安全这两块巨头。 4、是全世界第一个基于微内核的全场景OS,有分布式架构支撑,能带来天生流畅、内核级的安全和生态共享。 华为鸿蒙系统正式版PC下载...
  • 鸿蒙系统HarmonyOS)是基于微内核的全场景分布式OS,鸿蒙OS实现模块化耦合,对应不同设备可弹性部署,鸿蒙OS有三层架构,第一层是内核,第二层是基础服务,第三层是程序框架,鸿蒙OS底层由鸿蒙内核、Linux内核、...
  • HarmonyOS系统在华为开发者大会()上正式发布。 华为将率先布局智慧屏、车载终端、可穿戴终端等智能终端。 未来,越来越多的智能设备将使用开源HarmonyOS 。 HarmonyOS实现了模块化耦合,对应不同设备的灵活部署。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,652
精华内容 1,060
关键字:

鸿蒙系统内核