操作系统-操作系统内核架构

操作系统设计原则

操作系统的重要设计原则:策略与机制的分离

  • 策略(Policy):要做什么 —— 相对动态
  • 机制(Mechanism):怎么做 —— 相对静态

操作系统可仅通过调整策略来适应不同应用的需求

例子 策略 机制
登录 什么用户、以什么权限登录 输入处理、策略文件管理、桌面启动加载
调度 调度算法:Round-robin、 Earliest Deadline First ... 调度队列、调度实体(如线程) 的表示、调度中断处理 ...

操作系统架构与演进

操作系统-操作系统内核架构_第1张图片

宏内核

定义

宏内核(Monolithic Kernel):将管理进程的代码、管理内存的代码、管理各种 I/O 设备的代码、文件系统的代码、图形系统代码以及其它功能模块的代码,把这些所有的代码经过编译,最后链接在一起,形成一个大的可执行程序。这个大程序里有实现支持这些功能的所有代码,向用户应用软件提供一些接口,这些接口即系统 API 函数。

整个系统分为内核与应用两层

  • 内核:运行在特权级,集中控制所有计算资源
  • 应用:运行在非特权级,受内核管理,使用内核服务

结构如下图所示。

操作系统-操作系统内核架构_第2张图片

以内存分配为例:

  1. 应用程序调用内存分配的 API(应用程序接口)函数。
  2. 处理器切换到特权模式,开始运行内核代码。
  3. 内核里的内存管理代码按照特定的算法,分配一块内存。
  4. 把分配的内存块的首地址,返回给内存分配的 API 函数。
  5. 内存分配的 API 函数返回,处理器开始运行用户模式下的应用程序,应用程序就得到了一块内存的首地址,并且可以使用这块内存了。

优缺点

优点

  • 宏内核拥有丰富的沉淀和积累
    • 拥有巨大的统一的社区和生态
    • 针对不同场景优化了30年

缺点

  • 宏内核的结构性缺陷
    • 安全性与可靠性问题:模块之间没有很强的隔离机制
    • 实时性支持:系统太复杂导致无法做最坏情况时延分析
    • 系统庞大而阻碍了创新:Linux代码行数已经过2千万

宏内核难以满足的场景

  • 向上向下的扩展
    • 很难去剪裁/扩展一个宏内核系统支持从KB级别到TB级别的场景
  • 硬件异构性
    • 很难长期支持一些定制化的方式去解决一些特定问题
  • 功能安全
    • 一个广泛共识:Linux无法通过汽车安全完整性认证(ASIL-D)
  • 信息安全
    • 单点错误会导致整个系统出错,而现在有数百个安全问题(CVE)
  • 确定性时延
    • Linux花费10+年合并实时补丁,目前依然不确定是否能支持确定性时延

微内核

定义

微内核(MICRO-KERNEL):与宏内核架构相反,它提倡内核功能尽可能少:仅仅只有进程调度、处理中断、内存空间映射、进程间通信等功能。

服务:开发者们把实际的进程管理、内存管理、设备管理、文件管理等服务功能,做成一个个服务进程。和用户应用进程一样,只是它们很特殊,宏内核提供的功能,在微内核架构里由这些服务进程专门负责完成。

消息:一种进程间通信的机制,应用程序要请求相关服务,就向微内核发送一条与此服务对应的消息,微内核再把这条消息转发给相关的服务进程,接着服务进程会完成相关的服务。服务进程的编程模型就是循环处理来自其它进程的消息,完成相关的服务功能。

下图中以文件系统为例,左边为宏内核架构,文件系统以API形式提供;右边为微内核架构,文件系统为一个服务,通过消息这种进程间通信方式请求服务。

操作系统-操作系统内核架构_第3张图片

微内核架构的设计原则:最小化内核功能

  • 将操作系统功能移到用户态,称为"服务"(Server)
  • 在用户模块之间,使用消息传递机制通信
操作系统-操作系统内核架构_第4张图片

以内存分配为例:

  1. 应用程序发送内存分配的消息,这个发送消息的函数是微内核提供的,相当于系统 API,微内核的 API(应用程序接口)相当少,极端情况下仅需要两个,一个接收消息的 API 和一个发送消息的 API。
  2. 处理器切换到特权模式,开始运行内核代码。
  3. 微内核代码让当前进程停止运行,并根据消息包中的数据,确定消息发送给谁,分配内存的消息当然是发送给内存管理服务进程。
  4. 内存管理服务进程收到消息,分配一块内存。
  5. 内存管理服务进程,也会通过消息的形式返回分配内存块的地址给内核,然后继续等待下一条消息。
  6. 微内核把包含内存块地址的消息返回给发送内存分配消息的应用程序。
  7. 处理器开始运行用户模式下的应用程序,应用程序就得到了一块内存的首地址,并且可以使用这块内存了。

优缺点

优点

  • 易于扩展:直接添加一个用户进程即可为操作系统增加服务
  • 易于移植:大部分模块与底层硬件无关
  • 更加可靠:在内核模式运行的代码量大大减少
  • 更加安全:即使存在漏洞,服务与服务之间存在进程粒度隔离
  • 更加健壮:单个模块出现问题不会影响到系统整体

缺点

  • 性能较差:内核中的模块交互由函数调用变成了进程间通信,性能对比如下图
  • 生态欠缺:尚未形成像Linux一样具有广泛开发者的社区
  • 重用问题:重用宏内核操作系统提供兼容性,带来新问题

操作系统-操作系统内核架构_第5张图片

宏内核,微内核对比:黄色-OS;白色-App;蓝色-逻辑

操作系统-操作系统内核架构_第6张图片

混合内核架构

混合内核架构是宏内核与微内核的结合

  • 将需要性能的模块重新放回内核态
    • macOS / iOS:Mach微内核 + BSD 4.3 + 系统框架
    • Windows NT:微内核 + 内核态的系统服务 + 系统框架

Mac OS的架构如下图:

操作系统-操作系统内核架构_第7张图片
操作系统-操作系统内核架构_第8张图片

Mac OS有两个内核层——Mach 层与 BSD 层。

Mach 内核是卡耐基梅隆大学开发的经典微内核,意在提供最基本的操作系统服务,从而达到高性能、安全、可扩展的目的。

BSD 则是伯克利大学开发的类 UNIX 操作系统,提供一整套操作系统服务。

前沿的内核架构

可以了解:

  • 外核+库OS(EXOKERNEL + LIBOS)

  • 多内核/复内核(MULTI-KERNEL)

reference

[1]上海交通大学并行与分布式系统研究所-操作系统结构

[2] 极客时间 · 操作系统实战45讲

你可能感兴趣的:(内核,操作系统,linux,java,python)