现代操作系统-原理与实现【读书笔记】

看看多久才会读完---买于20年双十一

目录

第1章-操作系统概述

第2章-硬件结构

第3章-操作系统结构

第4章-内存管理


第1章-操作系统概述

从硬件角度

对硬件进行管理,处理各种错误

对硬件进行抽象,形成不依赖硬件的资源

从应用角度

提供不同的接口,满足不同类型的访问控制,应用间交互等服务

进行资源分配与管理

 

操作系统提供不同层次的接口

  1. 系统调用接口,例如printf【printf 从应用程序-》libc-》下陷处理-》系统调用处理】[从应用程序-》libc-》是在用户态] [从下陷处理-》系统调用处理 是在内核态]
  2. POSIX接口【可移植操作系统接口】,例如glibc
  3. 领域应用接口,例如AUTOSAR,这种算框架了

第2章-硬件结构

冯诺依曼-机,包含

  1. 中央处理器
  2. 存储器
  3. 输入输出

现代操作系统-原理与实现【读书笔记】

指令集是ISA【指令集架构】的重要组成部分,AArch64属于RISC【精简指令集计算机】

特权级在AArch64中叫做异常级别,包括

  1. EL0   应用层跑在这【用户态】
  2. EL1   操作系统跑在这【内核态】
  3. EL2   虚拟化在这里【虚拟机场景用】
  4. EL3   TrustZone相关【负责切换安全世界和普通世界】

 

何时从EL0切换到EL1

  1. 应用层程序用系统调用
  2. CPU收到中断
  3. 应用层触发了异常

其中1和2为同步的CPU特权级切换

3为异步的CPU特权级切换

 

从EL0切换到EL1

  1. 触发异常的指令地址【PC】保存到ELR_EL1
  2. 异常原因保存到ESR_EL1
  3. CPU将栈指针从SP_EL0切换到SP_EL1,在异常向量表中选择对应的异常处理函数
  4. CPU还要保存一些状态

 

寄存器是ISA的重要组成,包括

  1. 通用寄存器
  2. 栈指针寄存器
  3. 链接指针

EL1下有两个页表基地址寄存器,这个和虚拟内存有关系

 

Cache

这个是为了加快CPU访问数据的速度,包括:

若干个缓冲行,每一个行包括

一个有效位

一个标记地址

 

为了通过物理地址找到对应的缓存,物理地址在逻辑上分为Tag,Set以及Offset三段

物理地址中Set段能够表示的最大数目叫做

支持的最大Tag数叫做

缓存结构和缓存寻址的图请看书

 

第3章-操作系统结构

设计操作系统的原则【机制与策略分离】

策略:做什么【输入处理,启动加载....】

机制:如何做【调度方法...】

管理复杂系统的方法

  1. 模块化
  2. 抽象
  3. 分层
  4. 层级

模块化:分而治之,将复杂系统分解成一系列的模块,保证模块之间的界限,高耦合低内聚,使之有独立性

抽象:接口与实现分离,无需关心各个模块之间的内部实现

分层:将模块按一定的层次划分,约束内部模块之间的交互方式

层级:将功能相近的模块划分在一个子系统

操作系统的内核架构

  1. 简要结构
  2. 宏内核
  3. 微内核
  4. 外核
  5. 多内核

简要结构:应用程序和操作系统在同一个地址空间,没有虚拟内存管理,特权级隔离等功能,任何一个模块出问题,系统就崩溃了

宏内核:所有的操作系统模块运行在内核态

微内核:将单个的内核功能拆分,作为服务部署在用户态,仅有很小部分的内核运行在内核态,服务提供进程间通信的功能使之互相协作

外核:操作系统与应用程序挂钩,应用程序要啥就装对应的功能,内核只负责对操作系统在多个操作系统之间的多路复用

多内核:通过多内核管理异构多核设备

第4章-内存管理

应用程序是面向虚拟内存编写的,CPU会翻译地址到物理地址,操作系统来管理虚拟地址和物理地址的映射

设计时的三个目标

  1. 高效性【不应占用过多的物理内存资源】
  2. 安全性【使不同应用程序互相隔离】
  3. 透明性【应用层编程时感觉不到内存的抽象】

CPU通过MMU进行地址翻译,为了加速翻译,现代CPU都有TLB【转址旁路缓存】

有两种机制

  1. 分段机制
  2. 分页机制

分段机制不多写了,目前用的多的是分页机制的