1 Star 0 Fork 0

WHC/xv6-course

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
44-multi-core-boot.org 2.10 KB
一键复制 编辑 原始数据 按行查看 历史
殊蕤 提交于 2023-11-22 21:10 . add

多处理器启动逻辑

多处理器启动流程

  1. BSP BootStrap Processor
    • 主启动 core
  2. AP Application Processor
    • 从启动 core
  3. BSP 作为主启动首先启动
    • 跳转实模式
    • 初始化
    • 读取 AP 代码 jmp 语句
      • 0x8000
  4. BSP 设置好基础环境后,再拉起 AP
    • 开启 APIC
    • INIT => APs
      • 初始化 core
    • STARTUP => APs
      • AP 入口点 0x8000
    • Print apicid RED
  5. AP 设置各自的环境,最后达到所有处理器都启动
    • AP => 0x8000
    • Print apicid(12) => 2 GREEN

mpinit 信息收集

mp.h 配置头文件 ../../study/os/xv6-public/mp.h

  1. volatile uint *lapic

参考 Intel64 手册 volume 3 - chapter 11 ADVANCED PROGRAMMABLE INTERRUPT CONTROLLER (APIC)

  1. CPU 需要路由中断到处理查询(handler)
  2. APIC 的目的是把中断传递给多个 CPU. 分成 LAPIC 和 IOAPIC
  3. LAPIC 和 IOAPIC 的寄存器都是一块内存地址, 对应实现文件中有定义
  4. 现代计算机它通常由两个部分组成
    • LAPIC : Local APIC 本地高级可编程中断控制器
      1. 每个 CPU 都有 LAPIC
      2. LAPIC 里面有一些寄存器, 定时器
      3. LAPIC 还有 2 条 IRQ 线 LINT0 和 LINT1
    • IOAPIC : I/O 高级可编程中断控制器
      • IOAPIC 通常在所谓的南桥, 负责接收外部 IO 设备发送来的中断
      • 例如:键盘字符输入
  5. xv6 只处理 APIC 和 IOAPIC, 而忽略 PIC

LAPIC 初始化

volatile uint *lapic;  // Initialized in mp.c

中断流程

  1. 一个 CPU 给其他 CPU 发送中断的时候, 就在自己的 ICR 中, 放中断向量和目标 LAPIC ID, 然后通过总线发送到对应 LAPIC
  2. 目标 LAPIC 根据自己的 LVT(Local Vector Table) 来对不同的中断进行处理.
  3. 处理完了写 EOI 表示处理完了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/whc_softHardware/xv6-course.git
git@gitee.com:whc_softHardware/xv6-course.git
whc_softHardware
xv6-course
xv6-course
master

搜索帮助