【看书笔记】操作系统-简述

298 阅读5分钟

操作系统OS01.png 操作系统OS02.png

一、操作系统

  • 作用:服务应用、管理应用
  • 服务应用
    • 为应用提供计算资源的抽象(CPU、内存、IO设备)
    • 为应用提供线程间的同步
    • 为应用提供进程间的同步
  • 管理应用
    • 生命周期的管理
    • 计算资源的分配(CPU、内存、IO设备)
    • 安全与隔离(应用程序内部以及应用程序之间)
    • 避免单个应用独占所有资源(每10ms发生一个时钟中断-时间片/通过信号打断当前任务的执行)
  • 目标差异
    • 服务应用:单个应用的运行效率最大化
    • 管理应用:系统资源的利用率最大化
    • 两者的目标可能存在冲突。公平的调度策略,往往资源利用率低。
  • 操作系统的启动过程
    • 硬件初始化工作并开启页表
    • 主CPU启动且其他次CPU等待
    • 层级切换:其他ELX 切换到 EL1(内核)
    • 准备函数栈(设置SP寄存器)和异常向量(为了debug)
    • 内存空间初始化(映射到IO的内存空间)
    • 初始化页表并开启MMU(将内核kernel代码映射到低地址段和高地址段两份;低地址段与物理地址相同,方便启动 方便同时访问,启动完毕之后会把低地址段去掉)。
    • 进入内核

二、中断与异常

  • 中断:外部硬件设备所产生的信号。
    • 异步:产生的原因 与 当前执行指令 无关。
  • 异常:软件程序的执行所产生的信号,包括系统调用-即用户程序请求操作系统提供服务。
    • 同步:产生的原因 与 当前执行指令或试图执行的指令 有关。
  • 中断与异常的处理
    • ① 正常执行过程中CPU发现中断或异常(User)
    • ② 进入中断和异常处理(kernel)
      • 保存处理器状态、错误信息、部分上下文信息存储在寄存器中,方便之后恢复执行
      • (该寄存器不可在用户态中访问,从而保证安全性)
      • 准备好在高特权级下执行工作的环境
    • ③ 查询异常向量表,选择合适的异常处理器Handler执行代码(kernel)
      • 保证用户态和内核态之前的隔离
      • 处理中断或异常过程中,获得关于异常的信息,比如系统调用的参数、错误的原因等
    • ④ 处理完毕,从Handler中返回到断点位置(User用户空间)
      • 恢复处理器状态
      • 返回低特权级
      • 继续正常执行流
  • 处理中断和处理异常的差异:使用同一套机制,差异仅在选择Handler中体现。

三、系统调用

  • 系统调用,指的是运行在用户空间的程序,向操作系统的内核 请求需要更多高权限运行的服务。提供了用户程序与操作系统之间的接口。
  • 系统调用(或者需要从用户态往内核态处理时)会造成大量性能开销。
    • 当操作所需要的数据状态保存可以用户态的栈上时,需要复制到内核态的栈上,从而增加了上下文保存的开销。
    • 硬件优化:新增新的系统调用指令,减少上下文保存的开销。

四、操作系统内核架构

操作系统内核架构.png

| 简要结构 |

  • 将应用程序与操作系放置在同一个地址空间。
  • 优点:应用程序对于操作系统服务的调用,可以直接通过函数调用来高效完成。
  • 缺点:任何一个应用或者操作系统模块出现问题,都会导致整个系统崩溃。
  • 举个栗子:MS-DOS(MicroSoft Disk Operating System)。
  • 使用场景:主要运行在微控制单元等相对比较简单的硬件上,这些硬件通常没有提供现代意义上的内存管理单元MMU,隔离能力相对较弱或者缺失隔离能力,因此难以运行复杂的操作系统。

| 宏内核 |

  • 又称单内核
  • 操作系统内核的所有模块均运行在内核态,具有直接操作硬件的能力,包括进程调度模块、内存管理模块、文件系统模块、设备驱动模块等。
  • 缺点:所有内核模块均运行在特权空间,一个单点的错误会导致整个系统崩溃或者被攻破。
  • 举个栗子:UNIX/Linux 。

| 微内核 |

  • 对操作系统进行了解耦,将单个功能或者单个模块从内核中拆分出来,作为一个独立的服务部署到独立的运行环境中;内核仅保留极少的功能,为这些服务提供通信等基础功能,使其能够互相协作以完成操作系统所必需的功能。
  • 优点:服务之间是完全隔离的,有效提高操作系统的可靠性和安全性。
  • 举个栗子:经历了从 Mach -- L4 --- Capability机制 的变化。
    • Mach 将很多内核功能以单独服务的形式运行在用户态。然而其对 IPC 的设计过于通用,加上 Mach 微内核自身资源占用过大(包括内存占用和CPU缓存占用)等问题,使得其性能表现较差。
    • L4:通过高性能的 IPC 实现以及极小化的微核 ukernel(微内核系统中的内核部分),L4 微内核架构操作系统的性能表现较好。
    • Capability 机制:将能力机制(Capability 机制)引入微内核操作系统从而增强微内核的安全性,实现访问控制。Capability 机制允许更精确、更细粒度地给不同的应用程序授予对内核对象的调用权限,从而更好地提升系统的安全性。