在构建复杂系统时,必须合理考虑其内部结构,在不同的需求之间进行权衡。 因此,如何合理地对操作系统的功能和架构进行设计,是—个操作系统成功的关键。操作系统需要满足—定的设计目标,这些目标可以分为以下两种。
操作系统乃至计算机系统中控制复杂度的—个重要设计原则是:将策略与机制相分离。
- 策略(policy)表示要‘‘做什么”
- 机制(mechanjsm)表示该“如何做”。
通过机制与策略的分离,操作系统—方面可以通过多种不同的策略来适应不同的应用需求,而不需要重新来实现对应的具体机制,另一方面也可以通过持续优化具体的机制以不断完善一个策略的实现.

简要结构
一些功能较为简单的操作系统,会选择将应用程序与操作系统放置在同一个地址空间中,无须底层硬件提供复杂的内存管理,特权级隔离等功能.
该结构的优点:应用程序对操作系统服务的调用可直接通过函数高效完成.
缺点:应用程序或操作系统模块出现了问题,均有可能使整个系统崩溃.
宏内核架构
又称:单内核. 特征是操作系统内核的所有模块均在内核态运行,直接具备操作硬件的能力.

由于操作系统内核的功能日趋复杂,宏内核架构的操作系统也逐步采用M.L.A.H方法.
M.A.L.H 方法:
- 模块化(modularity)
- 将一个复杂系统分解为一系列通过明确定义的接口进行交互的模块,并严格保障模块之间的界限。要充分考虑"高内聚和低耦合"使模块具有独立性.
- 抽象(abstraction)
- 抽象是在模块化的基础上,将接口与内部实现分离,从而使模块之间只需通过抽象的接口进行相互调用,而无须关心各个模块的内部实现.
- 宽进严出原则:一个模块的接口应该容忍各种可能的输入,押制错误甚至恶意的输入,避免错误或恶意输入的效果在模块内传播,并且尽可能严格地控制模块对外的输出,从而减少错误在模块间的传播.
- 分层(layering)
- 通过将模块按照一定的原则进行层次的划分,约束每层内部模块间的交互方式与跨层次模块间的交互方式,从而有效地减少模块之间的交互。
- 层级(hierarchy)
- 层级是另外一种模块的组织方式.首先将一些功能相近的模块组成一个具有清晰接口的自包含子系统,然后再将这些子系统递归地组成一个具有清晰接口的更大子系统
微内核架构
所有内核模块均运行在特权空间,一个单点的错误就可能会导致整个系统崩溃或者被攻破.因此将单个功能或模块从内核中拆分出来,作为一个独立的服务部署到独立的运行环境中;内核仅仅保留极少的功能,为这些服务提供通信等基础能力,使其能够互相协作以完成操作系统所必须的功能.
外核架构
操作系统内核在硬件管理方面的两个主要功能是资源抽象与多路复用().其中对资源的抽象存在两个方面的问题
在许多场景中,应用比操作系统更了解该如何去抽象和使用硬件资源, 因此,应当由应用来尽可能地控制对硬件资源的抽象.
同时提出了库操作系统(LibOS)的概念,与应用直接链接,降低应用开发的复杂度,而操作系统内核则只负责对硬件资源在多个库系统之间的多路复用的支持,并管理这些LibOS的生命周期

外核架构可为不同的应用提供定制化的高效资源管理:
- 按照不同应用领域的要求’将对硬件资源的抽象模块化为一系列的库(即LibOS)。
带来两个主要的好处.
- 可按照应用领域的特点与需求,动态组装成最适合该应用领域的LibOS,最小化非必要的代码,从而获得更高的性能;
- 处于硬件特权级的操作系统内核可以做到非常小,并且由于多个LibOS之间的强隔离性,从而可以提升整个计算机系统的安全性与可靠性.
外核架构的劣势在于: LjbOS通常是为某种应用定制的,缺乏跨场景的通用性,应用生态差.