现代操作系统
上交IPADS 陈海波老师等著
一、操作系统概述
介绍了操作系统相关的基本知识。
操作系统主要两个作用:
- 对硬件进行管理和抽象
- 为应用提供服务并管理
介绍了操作系统的历史,以及POSIX接口的作用和起源。
书中主要以AArch64架构进行介绍。
二、硬件结构
介绍处理器的硬件结构,包括指令级、内存和I/O设备三部分。
指令级
AArch64架构,即ARMv8的64位版本。
ARM的特权等级
EL0:最低的特权等级,用户态
EL1:操作系统的特权级,内核态
EL2:虚拟化用到,虚拟机监控器
EL3:与安全特性TrustZone有关,负责normal world和secure world之间切换
特权级切换通过syscall调用svc指令、异常触发和外部中断三种情况。
中断切换流程略。
AArch64寄存器有31个64位通用寄存器,X29是FP,X30是LP。
EL1级下有页表基地址寄存器TTBR0_EL1和EEBR1_EL1(Translation Table Base Register),负责翻译虚拟地址空间中不同的地址段,负责的地址范围由另一种常见的控制寄存器TCR_EL1(Translattion Control Register)决定
内存
讲的cache和内存结构,略。
外设
MMIO设备使得CPU可以主动地访问设备,中断使得设备能够主动地通知CPU。
三、操作系统结构
机制和策略,机制表示“如何做”,策略表示“做什么”,两者分离是重要设计原则。
管理复杂系统的方法是M.A.L.H
模块化 modularity
将复杂系统分解为一系列明确定义的接口进行交互的模块,并严格保证界限。
高内聚,低耦合。高内聚低耦合,是软件工程中的概念,是判断软件设计好坏的标准,主要用于程序的面向对象的设计,主要看类的内聚性是否高,耦合度是否低。目的是使程序模块的可重用性、移植性大大增强。通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事,它描述的是模块内的功能联系;耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。
抽象 abstraction
抽象是在模块化的基础上,将接口与内部实现分离,模块之间只需要通过抽线的接口进行调用,而无需关心模块内部实现。
模块需要保证宽进严出
- 分层 layering
模块按照一定原则划分,约束每层内部模块间的交互方式与跨层次模块间的交互方式,从而有效减少模块之间的交互。
模块只能和相邻层的模块交互。 - 层级 hierarchy
另一种模块组织方式,将一些功能相似的模块组织在一起形成一个具有清晰接口的子系统。
操作系统内核架构包括:
简要结构
FreeRTOS、DOS等
应用和系统在一个地址空间,不需要内存管理和特权隔离。宏内核
Linux
操作系统相关的所有模块(进程调度、内存管理、文件系统、驱动模块等)都处于内核态,只有用户程序和shell执行在用户态。
模块化:可加载模块,例:驱动。
抽象:Everything is a file.
分层:Linux文件系统分层,设备驱动、块设备、虚拟文件系统和数据缓存做了明确区分。
层级:资源管理器中的控制组。微内核
宏内核中的系统功能或模块从内核拆分出来,作为独立服务五部署到独立环境。
异构性宏内核支持不好。
确定性时延宏内核更高,因为资源隔离困难调用复杂,打补丁依然效果不够好。微内核效率比宏内核慢,但在安全性、可靠性方面要比宏内核好,在扩展性方面微内核也有优势。
https://zhuanlan.zhihu.com/p/53612117外核
资源抽象和多路复用。多内核
系统框架:Android和ROS
系统内核+系统框架构成操作系统。
Android使用Linux内核加入系统框架,框架包含硬件抽象(封装硬件技术细节)、Android库(提供了一些方便应用开发的自定义库和重新实现的glibc)、Android应用框架、运行环境(ART,将Android的Java字节码转换成可执行代码用)
ROS略。
参考链接
- 本文作者: Zheng Yuchen
- 本文链接: https://zycccccc.top/2022/01/02/读书笔记/现代操作系统/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!