当前位置: 首页 > news >正文

笔记:现代操作系统:原理与实现(2)

第三章 操作系统结构

操作系统的机制与策略

操作系统乃至计算机系统中控制复杂度的—个重要设计原则是:将策略与机制相分离,其中策略(policy)表示要‘‘做什么”,机制(mechanjsm)表示该“如何做”。

操作系统复杂度管理方法

管理复杂系统的重要方法是 M.A.L.H 方法,即模块化(modularity)、抽象(abstraction)、分层(layering)和层级(hierarchy)。

  • 模块化:模块化就是通过“分而治之”(divide and conquer)原则,将一个复杂系统分解为一系列通过明确定义的接口进行交互的模块,并严格保障模块之间的界限。
  • 抽象:抽象是在模块化的基础上,将接口与内部实现分离,从而使模块之间只需通过抽象的接口进行相互调用,而无须关心各个模块的内部实现。

小知识:宽进严出原则:

一个模块的接口应该容忍各种可能的输入,抑制错误甚至恶意的输入,避免错误或恶意输入的效果在模块内传播,并且尽可能严格地控制模块对外的输出,从而减少错误在模块间的传播。

  • 分层:分层是通过将模块按照一定的原则进行层次的划分,约束每层内部模块间的交互方式与跨层次模块间的交互方式,从而有效地减少模块之间的交互。
  • 层级:层级是另外一种模块的组织方式。首先将一些功能相近的模块组成一个具有清晰接口的自包含子系统,然后再将这些子系统递归地组成一个具有清晰接口的更大子系统。

比如在操作系统中,既有分层的模块结构(如内核层、用户层),也有层级的进程管理结构(父进程与子进程)

操作系统内核架构

随着操作系统功能的不断增多和代码规模的不断扩大,提供合理的层级结构,对于降低操作系统复杂度、提升操作系统安全与可靠性来说变得尤为重要。下图列举了一些常见的操作系统内核架构。

在这里插入图片描述

简要结构

  • 特点:应用程序与操作系统放置在同一个地址空间(address space)中,无须底层硬件提供复杂的内存管理、特权级隔离等功能。
  • 优势:任何程序对操作系统服务的调用可直接通过函数调用高效完成。
  • 劣势:任何一个应用程序或操作系统模块出现了问题,均有可能使整个系统崩溃。
  • 典型例子:MS-DOS(MicroSoft Disk Operating System)、FreeRTOG、uCOS。

MS-DOS的系统结构:

在这里插入图片描述

宏内核结构

  • 特点:操作系统内核的所有模块(包括进程调度、内存管理、文件系统、设备驱动等)均运行在内核态,具备直接操作硬件的能力。
  • 优势:性能高、模块间通信高效、资源管理集中、广泛支持与优化。
  • 劣势:一个通用的、适用于大部分场景的设计,常常意味着很难满足特定场景下对安全性、可靠性、实时性等方面的需求;同时,在一个庞大的系统中进行创新也变得越来越困难。
  • 典型例子:UNIX/Linux、FreeBSD。

宏内核的基本结构:

在这里插入图片描述

微内核结构

  • 特点:对宏内核架构的操作系统进行解耦,将单个功能或模块(如文件系统、设备驱动等)从内核中拆分出来,作为一个独立的服务部署到独立的运行环境中;内核仅保留极少的功能,为这些服务提供通信等基础能力,使其能够互相协作以完成操作系统所必需的功能。
  • 优势:服务与服务完全隔离,能有效提供操作系统的可靠性与安全性;方便为不同场景定制不同服务。
  • 劣势:开发难度高,通信开销大

外核结构

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

外核结构架构图:

在这里插入图片描述

外核结构与微内核的区别

  • 外核架构将多个硬件资源划分为一个“切片”,每个切片中保护的多个硬件资源由 LibOS 管理并直接服务于一个应用;而微内核架构则是通过让一个操作系统模块独立运行在一个地址空间上来管理一个具体的硬件资源,为操作系统中所有的应用服务。
  • 外核架构中,运行在特权级的内核主要为 LibOS 提供硬件的多路复用能力并管理 LibOS;而微内核架构中,内核主要提供进程间通信(IPC)功能。
  • 外核架构在面向一个功能与生态受限的场景时可通过定制化 LibOS 获得非常高的性能;而微内核架构则需要更复杂的优化才能获得与之类似的性能。

多内核结构

  • 特点:将—个众核系统看成一个由多个独立处理器核通过网络互联而成的分布式系统;它提供了—层基于进程间通信的抽象,从而避免了处理器核之间通过共享内存进行隐式的共享。
  • 优势:可以避免传统操作系统架构中的复杂的隐式共享所带来的性能可 扩展性瓶颈;非常容易支持异构处理器架构。
  • 劣势:不同节点之间存在的状态冗余对资源开 销会造成一定压力;需要移植现有应用才能适应多内核架构。

多内核架构图:

在这里插入图片描述

混合内核架构

由于设计需求的多样化,现实中的操作系统往往融合了多种架构的设计思想。

  • 虽然Linux内核是公认的宏内核架构,但其近期也开始融合了微内核架构中的用户态驱
    动模型(如UIO与VFIO等)。
  • 苹果操作系统内核XNU是一个Mach微内核与BSD UNIX的混合体,被使用于MacOSX中。
  • WmdowsNT的操作系统内核也采用了微内核设计思想,但是将一些系统服务运行在内核态。

操作系统架构组合及演进:

在这里插入图片描述

操作系统框架结构

Android系统框架

在这里插入图片描述

在Linux内核之上运行的Android系统框架包括如下几个主要组件:

  • 硬件抽象层(hardwareabstractlayer):Android在Linux内核上提供—层硬件抽象层的主要原因有两个:
    • linux宏内核架构使得设备驱动运行在linux内核态,因此设备驱动的接口依赖于linux内核设备驱动接口的演进,这会阻碍 Android 系统框架的独立演进与升级。
    • Linux 内核采用了 GPL v2 开源协议,协议要求运行在同一个地址空间的设备驱动必须开源代码,这会导致一些硬件的实现细节也被公开,因此一些设备厂商担心其硬件竞争力受到影响。
  • Android 库(Android library):Android 库一方面提供了一些方便 Android 应用开发的自定义库,另外一方面也重新实现了一些标准库(如 glibc 等),从而规避了 LGPL 开源协议。
  • Android 运行环境(Android Runtime, ART)。由于 Android 应用的主要开发语言是 Java,因此需要一个运行时环境将应用从字节码转化为可执行代码。早期的 Android 采用 Dalvik 虚拟机的形式,通过解释执行与 JIT(Just-in-Time)编译的方式运行,因而带来一些性能与功耗的损失。Android 自 5.0 后引入了 Android 运行环境(ART),通过 Ahead-of-Time (AOT) 预先编译的方式,将 Java 代码预编译为二进制可执行代码,从而避免了运行时的编译开销。
  • Android 应用框架(Android application framework)。Android 应用框架提供了应用运行所需要的基础服务,包括服务管理(service manager)、活动管理(activity manager)、包管理(package manager)、窗口管理(window manager)等。这些服务化的组件利用操作系统内核提供的资源抽象,为应用构建了一系列方便调用的应用服务。

服务化架构与 Binder IPC

Android 系统框架的设计整体应用了类似微内核架构的思想,将系统框架组件化与服务化,各个组件依赖于 Android 提供的 Binder IPC 进行通信。

在这里插入图片描述

ROS系统框架

ROS 是 Robot Operating System 的缩写,即机器人操作系统。虽然名字中包含操作系统,但 ROS 实际上是一个面向机器人硬件场景的系统框架,可运行在 Linux 内核以及其他兼容 POSIX 接口的操作系统内核之上。作为一个操作系统的系统框架,ROS 提供了

ROS层次架构图:

在这里插入图片描述

简要而言,ROS 可以分为基础设施层、通信层和应用层。其中,基础设施层包括 ROS 中的 Python、C++ 等运行环境、ROS 文件系统与 ROS 包管理机制等。在基础设施层之上运行了 ROS 的通信层,提供基础的 ROS IPC 机制以及 ROS 的数据分发服务(Data Distribution Service, DDS)等。ROS 的应用层是由一个个节点所构成的计算,这些节点之间可以使用 ROS 的通信层直接进行互相调用,或者通过对一些话题(topic)发布消息或者订阅消息来进行间接通信。

http://www.xdnf.cn/news/1472239.html

相关文章:

  • CLIP学习
  • 【C++】Vector完全指南:动态数组高效使用
  • Transformer核心—自注意力机制
  • 大批项目经理被迫上前线,酸爽
  • 图片在vue2中引用的方式和优缺点
  • 【数字孪生核心技术】什么是倾斜摄影?
  • 遇到 Git 提示大文件无法上传确实让人头疼
  • SVT-AV1编码器中实现WPP依赖管理核心调度
  • 门控MLP(Qwen3MLP)与稀疏混合专家(Qwen3MoeSparseMoeBlock)模块解析
  • 【开题答辩全过程】以 基于JSP的宠物医院管理系统设计为例,包含答辩的问题和答案
  • LTV-1008-TP1-G 电子元器件 LiteOn光宝 发光二极管 核心解析
  • 字符串(2)
  • 一文读懂 RAG 与 KAG:原理、工程落地与开源实战
  • scrypt 密钥派生算法(RFC7914)技术解析及源码示例
  • 流固耦合|08-1外部数据导入
  • 基于Django+Vue3+YOLO的智能气象检测系统
  • 【Python - 类库 - requests】(02)使用“requests“发起GET请求的详细教程
  • Markdown Editor开发文档(附下载地址)
  • AmbiSSL
  • 深度学习模型在边缘计算设备上的部署
  • python库 Py2exe 的详细使用(将 Python 脚本变为Windows独立软件包)
  • 孙宇晨被质疑“砸盘”川普家族项目WLFI,惨遭拉黑锁仓?自称无辜展开“维权”!
  • Process Explorer 学习笔记(第三章3.3.1):DLL和句柄
  • C++中的Reactor和Proactor模型进行系统性解析
  • 2025经管领域十大高含金量证书推荐
  • Redis 集群:连锁银行的 “多网点智能协作系统”
  • 2025 IT行业含金量超高的8大证书推荐
  • PAT 1096 Consecutive Factors
  • 十大常用算法(待更新)
  • 【QT 5.12.12 打包-Windows 平台下】