现代操作系统-原理与实现【读书笔记】
看看多久才会读完---买于20年双十一
目录
第1章-操作系统概述
从硬件角度
对硬件进行管理,处理各种错误
对硬件进行抽象,形成不依赖硬件的资源
从应用角度
提供不同的接口,满足不同类型的访问控制,应用间交互等服务
进行资源分配与管理
操作系统提供不同层次的接口
- 系统调用接口,例如printf【printf 从应用程序-》libc-》下陷处理-》系统调用处理】[从应用程序-》libc-》是在用户态] [从下陷处理-》系统调用处理 是在内核态]
- POSIX接口【可移植操作系统接口】,例如glibc
- 领域应用接口,例如AUTOSAR,这种算框架了
第2章-硬件结构
冯诺依曼-机,包含
- 中央处理器
- 存储器
- 输入输出
指令集是ISA【指令集架构】的重要组成部分,AArch64属于RISC【精简指令集计算机】
特权级在AArch64中叫做异常级别,包括
- EL0 应用层跑在这【用户态】
- EL1 操作系统跑在这【内核态】
- EL2 虚拟化在这里【虚拟机场景用】
- EL3 TrustZone相关【负责切换安全世界和普通世界】
何时从EL0切换到EL1
- 应用层程序用系统调用
- CPU收到中断
- 应用层触发了异常
其中1和2为同步的CPU特权级切换
3为异步的CPU特权级切换
从EL0切换到EL1
- 触发异常的指令地址【PC】保存到ELR_EL1
- 异常原因保存到ESR_EL1
- CPU将栈指针从SP_EL0切换到SP_EL1,在异常向量表中选择对应的异常处理函数
- CPU还要保存一些状态
寄存器是ISA的重要组成,包括
- 通用寄存器
- 栈指针寄存器
- 链接指针
EL1下有两个页表基地址寄存器,这个和虚拟内存有关系
Cache
这个是为了加快CPU访问数据的速度,包括:
若干个缓冲行,每一个行包括
一个有效位
一个标记地址
为了通过物理地址找到对应的缓存,物理地址在逻辑上分为Tag,Set以及Offset三段
物理地址中Set段能够表示的最大数目叫做组
支持的最大Tag数叫做路
缓存结构和缓存寻址的图请看书
第3章-操作系统结构
设计操作系统的原则【机制与策略分离】
策略:做什么【输入处理,启动加载....】
机制:如何做【调度方法...】
管理复杂系统的方法
- 模块化
- 抽象
- 分层
- 层级
模块化:分而治之,将复杂系统分解成一系列的模块,保证模块之间的界限,高耦合低内聚,使之有独立性
抽象:接口与实现分离,无需关心各个模块之间的内部实现
分层:将模块按一定的层次划分,约束内部模块之间的交互方式
层级:将功能相近的模块划分在一个子系统
操作系统的内核架构
- 简要结构
- 宏内核
- 微内核
- 外核
- 多内核
简要结构:应用程序和操作系统在同一个地址空间,没有虚拟内存管理,特权级隔离等功能,任何一个模块出问题,系统就崩溃了
宏内核:所有的操作系统模块运行在内核态
微内核:将单个的内核功能拆分,作为服务部署在用户态,仅有很小部分的内核运行在内核态,服务提供进程间通信的功能使之互相协作
外核:操作系统与应用程序挂钩,应用程序要啥就装对应的功能,内核只负责对操作系统在多个操作系统之间的多路复用
多内核:通过多内核管理异构多核设备
第4章-内存管理
应用程序是面向虚拟内存编写的,CPU会翻译地址到物理地址,操作系统来管理虚拟地址和物理地址的映射
设计时的三个目标
- 高效性【不应占用过多的物理内存资源】
- 安全性【使不同应用程序互相隔离】
- 透明性【应用层编程时感觉不到内存的抽象】
CPU通过MMU进行地址翻译,为了加速翻译,现代CPU都有TLB【转址旁路缓存】
有两种机制
- 分段机制
- 分页机制
分段机制不多写了,目前用的多的是分页机制的