现代操作系统 原理与实现(银杏书)—— 概述、arm硬件结构

概述

操作系统的共性

  • 从硬件的角度来看:
    • 管理硬件

      将硬件资源纳入统一的管理

    • 对硬件提供抽象

      将有限的、离散的资源抽象成无限的、连续的资源

  • 从应用的角度来看:
    • 服务于应用

      提供了不同层次的接口(系统调用)以满足应用的需求

    • 管理应用

      对应用的生命周期进行管理(加载、启动、切换、调度、销毁)

操作系统接口

  • 系统调用接口
    • 应用程序通过系统调用向操作系统内核申请服务
  • POSIX接口
    • Portable Operating System Interface for uniX (可移植操作系统接口)

ChCore:一个简单的实验操作系统

  • ChCore包括两个部分:
    • 运行在内核态的ChCore为内核
    • 运行在用户态的各种操作系统服务

ARM硬件结构

AArch64中特权级

AArch64的特权级别分类

  • AArch64中的特权级别被称为异常级别,共四种:
  • EL0:
    • 用户态
  • EL1
    • 内核态
  • EL2
    • 虚拟机监控器(VMM,也称为Hypervisor)
  • EL3
    • 和TrustZone相关,负责普通世界(normal world)和安全世界(secure world)之间的切换

从EL0到EL1的场景

  1. 系统调用
  2. 指令触发异常(exception)
  3. CPU收到中断(interrupt)

前两种属于同步的CPU特权级切换,是由CPU中正在执行的指令导致的
第3种称为异步的CPU特权级切换

保存现场的状态

  • 在发生特权级切换时,CPU负责保存当前执行状态,以便操作系统内核在处理异常时使用,并在处理之后恢复应用程序的执行。
  • 要保存的内容包括:
  1. 触发异常的PC, 保存在ELR_EL1(异常链接寄存器)
  2. 异常原因, 保存在ESR_EL1(异常症状寄存器)
  3. 栈指针从SP_EL0切换到SP_EL1
  4. 其他状态:CPU的相关状态保存在SPSR_EL1(已保存的程序状态寄存器),引发缺页异常的地址保存在FAR_EL1(错误地址寄存器)

异常向量表

  • 异常向量表中为不同的异常类型配置相应的异常处理函数
  • 发生特权级切换时,CPU读取VBAR_EL1(向量基地址寄存器)来获的异常向量表的基地址,根据异常原因(ESR_EL1中保存的内容)调用相应的异常处理函数。

AArch64寄存器

  • 31个64位通用寄存器: X0 ~ X30
    其中:
    • X29:栈指针寄存器(FP)
      • 保存函数调用过程中栈顶的地址
    • X30:链接地址寄存器(LP)
      • CPU在执行函数调用指令bl时,会把返回地址保存在其中
  • EL1特权级下有两个页表基址寄存器(TTBR)
    负责翻译虚拟地址空间中不同的地址段。
    • TTBR0_EL1
    • TTBR1_EL1

物理缓存

相联度

  • 组相联 = 组内全相联,组间直接映射

    = 路内直接映射, 路间全相联

缓存结构

  • CPU缓存是由若干个==缓存行(cache line)==组成的(常见64B)
  • 物理地址包括分为三个部分:
    tag index offset
    路(way) 组(set) 缓存行内偏移量

AArch64缓存寻址

  • 物理地址长度44位(2^44)
  • 缓存大小为32KB(2^15)
  • 缓存行大小为64B(2^6)
    • 缓存内有2^9=512个缓存行
  • 2路组相联
    • 分成256个组(组间直接映射)
    • 每个组2个缓存行(组内全相联)
  • 寻址过程:
    1. 先定位组(对比index部分)
    2. 找到组后,在组内找块(对比tag部分)

设备与中断

内存映射输入输出(MMIO Memory-Mapped I/O)

把输入输出设备和物理内存放到同一个地址空间,为设备内部的内存和寄存器也分配相应的地址。

轮询与中断

上一篇:newlib-nano


下一篇:ARM/developmentstudio-2020.1 报错Error: C9511E: Unable to determine the current toolkit. Check that AR