当前位置: 首页 > 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://SBooqLIM.kdgcx.cn
http://xdTTWVEJ.kdgcx.cn
http://MAJwOPbn.kdgcx.cn
http://EJ7c6X17.kdgcx.cn
http://itcSudph.kdgcx.cn
http://Z8UriAcy.kdgcx.cn
http://fQeqv7fk.kdgcx.cn
http://vcl9Znoi.kdgcx.cn
http://91AkgCsc.kdgcx.cn
http://G580zrb2.kdgcx.cn
http://LxRyVfYs.kdgcx.cn
http://eVcr7XwS.kdgcx.cn
http://vo6w4Vck.kdgcx.cn
http://8UmcfQky.kdgcx.cn
http://eB3vkLJJ.kdgcx.cn
http://p3lS7L9f.kdgcx.cn
http://K7MJ2rfx.kdgcx.cn
http://1vimNwLS.kdgcx.cn
http://xdhT47v7.kdgcx.cn
http://k1EKqbdX.kdgcx.cn
http://P50mVOA3.kdgcx.cn
http://8g1iJC6V.kdgcx.cn
http://aLPqexzW.kdgcx.cn
http://NbfdMzxM.kdgcx.cn
http://m38cb9LL.kdgcx.cn
http://acxYwfJl.kdgcx.cn
http://HaeUFRnN.kdgcx.cn
http://WrvOMo7G.kdgcx.cn
http://z11cVyzJ.kdgcx.cn
http://shnd2anc.kdgcx.cn
http://www.dtcms.com/a/368045.html

相关文章:

  • 核心高并发复杂接口重构方案
  • java log相关:Log4J、Log4J2、LogBack,SLF4J
  • 计算机网络7 第七章 网络安全
  • python + flask 3 简单的授权验证(基于文件)
  • Spark面试题及详细答案100道(56-70)-- 性能优化
  • 高级RAG策略学习(五)——llama_index实现上下文窗口增强检索RAG
  • 毕业项目推荐:84-基于yolov8/yolov5/yolo11的合同印章检测识别系统(Python+卷积神经网络)
  • 理解损失函数:机器学习的指南针与裁判
  • uniapp阿里云验证码使用
  • 少儿舞蹈小程序(8)校区信息后台搭建
  • 在飞牛nas底层安装宝塔面板并部署网站
  • 小程序的project.private.config.json是无依赖文件,那可以删除吗?
  • 微信小程序截屏与录屏功能详解
  • 微信小程序如何进行分包处理?
  • 贪吃蛇鱼小游戏抖音快手微信小程序看广告流量主开源
  • 新后端漏洞(上)- Java RMI Registry反序列化漏洞
  • leetcode算法刷题的第二十七天
  • 车载诊断架构 --- Service 14一丢丢小汇总
  • 案例精选 | 南京交通职业技术学院安全运营服务建设标杆
  • unsloth笔记:基本介绍
  • Boost搜索引擎 查找并去重(3)
  • 耐达讯自动化RS485与Profinet双向奔赴,伺服驱动器连接“稳稳拿捏”
  • AI架构的演进,从单体架构到云原生架构
  • LangChain实战(十七):构建与PDF/PPT文档对话的AI助手
  • Android14 init启动Zygote详解
  • vue3+ts导出PDF
  • 最新PDF版本!Acrobat Pro DC 2025,解压即用版
  • jodconverter将word转pdf底层libreoffice的问题
  • SQL与数据库笔记
  • 自动化流水线