目录
一、硬件结构
输入输出 ←→中央处理单元←→存储器
1. CPU与指令集架构
1.1 指令集
一系列不同功能的指令,用于数据搬移、计算、内存访问、过程调用等。AArch64中每条指令的长度固定为4字节。
1.2 特权级
AArch64中有四种特权级,也提供了特权级之间切换的方式(异常或中断)
EL0:最低特权级,应用程序通常运行在该特权级,也称为用户态
EL1:操作系统通常运行在该特权级,也称内核态
EL2:在虚拟化场景下需要,虚拟机监控器通常运行在该特权级
EL3:和安全性TrustZone相关,负责普通世界和安全世界之间的切换
1.3 寄存器
数据寄存器:用来存储操作数或运算结果等数据信息
指令寄存器:用于存放正在执行的指令
地址寄存器:用于存放内存地址
状态寄存器:用于记录CPU执行指令后的状态信息
2. 物理内存与CPU缓存
物理内存用于存放一些数据,但是物理内存的访问速度相较于CPU的处理速度来说很慢,故CPU中引入了缓存,用于存放一部分物理内存中的数据。
3. 设备与中断
3.1 内存映射输入输出(MMIO)
MMIO原理:被输入输出设备和物理内存放到同一个地址空间,CPU通过这些地址去访问和操作设备。
3.2 轮询与中断
轮询:CPU主动去查看是否有事件发生
中断:事件发生后主动通知CPU
二、操作系统结构
1. 操作系统的机制与策略
策略:做什么
机制:如何做
2. 操作系统复杂度管理方法
通过模块化、抽象、分层、层级这四个大的维度来对系统复杂度进行一个管理
2.1 模块化、抽象
将一个复杂系统分解为一系列通过明确接口进行交互的模块,并严格保障模块之间的界限。抽象是将模块中的功能抽象成接口
2.2 分层、层级
将系统进行分层,通常每个模块只能和同层级的模块进行交互。层级和分层有点类似,但是层级更像隶属关系,一众更低层级组成了更高的层级。
3. 操作系统内核架构
3.1 简要结构
应用程序与操作系统放置在同一个地址空间。
优点:应用程序对系统服务的调用无需切换地址空间,非常简便。
缺点:任何一个地方出了问题,整个操作系统都会崩溃。
3.2 宏内核架构
又称单内核,操作系统内核的所有模块(进程调度、内存管理、文件系统、设备驱动等)均运行在内核态,具备直接操作硬件的能力,例如linux系统就是宏内核架构。
缺点:操作系统所有模块均运行在特权空间,仍然存在一个单点错误就可能导致整个系统崩溃或者攻破的可能。
3.3 微内核架构
在宏内核基础上,将单个功能或模块(如文件系统、设备驱动等)从内核中拆分出来,作为一个独立的服务部署到独立的运行环境中,内核仅保留极少功能(不放在内核态会影响整个系统的功能时)。到目前为止经历了三代(Mach->L4->seL4)
Mach:对进程间通信设计过于通用,且Mach微内核自身资源(包括内存与CPU缓存等)占用过大的问题,使其性能低于同时期的宏内核。
L4:微内核最小化原则,一个操作系统内核的功能只有在将其放在内核态以外会影响整个系统的功能时,才能被放置在内核态。
seL4:EROS首次将能力(Capability)机制引入微内核操作系统中,Capability机制允许更精确、更细粒度地给不同应用程序授予对内核对象的调用权,从而能更好地提升系统安全性。
3.4 外核架构
不再由操作系统内核来抽象硬件,提出了库操作系统(LibOS)的概念,将对硬件的抽象封装到LibOS中,与应用直接链接,操作系统内核只负责对硬件资源在多个LibOS之间的多路复用的支持,并管理这些LibOS的生命周期。
好处:
1、按应用的需求动态组装成最适合该应用领域的LibOS,最小化非必要的代码,从而获得更高的性能。
2、各LibOS的强隔离性,提升了整个系统的安全性和可靠性。
坏处:
1、难以实现较复杂的功能,否则相当于一个完整的宏内核。
2、各LibOS通常会实现相同或类似的功能,容易造成代码冗余。
3.5 其他内核架构(多内核架构、混合内核架构)
多内核架构:将一个众核系统看成由多个独立处理器核通过网络互联而成的分布式系统,不同的处理器核之间通过进程间通信来交互
混合内核架构:例如Linux内核是公认的宏内核架构,但也融合了微内核架构中的用户态驱动模型;苹果操作系统内核XNU是一个Mach微内核与BSD UNIX的混合体。
4. 操作系统架构
4.1 Android系统架构
Android系统框架的设计整体上是类似微内核架构的思想,将系统框架组件化和服务化,各个组件依赖Android提供的Binder IPC进行通信。
硬件抽象层:
1、宏内核架构下,设备驱动通常运行在Linux内核态,这里做一次抽象,可以将Android系统框架的演进与升级与Linux内核隔离开,实现Android系统框架的独立演进与升级。
2、硬件抽象层不需要开源一些对硬件的具体细节操作,厂商不用担心技术细节被泄露。
Android库:方便Android应用开发的库文件的集合
Android运行环境:Android应用的主要开发语言是java,需要一个环境将字节码转化为可执行代码。
Android应用框架:包括了应用运行所需要的基础服务,包括服务管理(service manager)、活动管理(activity manager)、包管理(package manager)、窗口管理(window manager)等。
4.2 ROS系统架构
机器人操作系统,是一个面向机器人硬件场景的系统框架,可以运行在Linux内核或其他兼容POSIX接口的操作系统内核之上。
ROS分为基础设施层、通信层和应用层。
节点:每个服务构成一个节点,每个节点执行一个具体的计算处理,包括机器人中所需的感知、融合、规划与控制等。不同的节点代表不同的应用,他们既可以是信息的接收者也可以是信息的发布者。
话题:单向的异步通信机制。发布者节点向主节点注册一个话题,并以消息的形式发布关于该话题的新内容;订阅者则通过主节点获得对应话题的发布者发布的信息,并直接连接到发布者节点。