当前位置: 首页 > news >正文

BSP 和 AP 的启动路径分离

/*
* Now that this CPU is running on its own stack, drop the realmode
* protection. For the boot CPU the pointer is NULL!
*/
movq trampoline_lock(%rip), %rax
testq %rax, %rax
jz .Lsetup_gdt
movl $0, (%rax)

这段汇编代码是 Linux 内核启动流程中,应用处理器(AP)解除对实模式代码保护的关键步骤,确保其顺利进入保护模式。

可以将代码拆解为三个核心逻辑部分,并结合背景来理解。

背景:释放实模式锁

在 x86 多核启动中,所有 AP(应用处理器)在唤醒时,最初都在实模式下运行。为了防止多个 CPU 同时争抢或破坏共享的实模式代码和数据(trampoline),内核使用了一个自旋锁(spinlock)来确保同一时刻只有一个 CPU 在执行这段代码。

当 AP 成功切换到 64 位模式并拥有了自己的栈后,它就需要释放这个锁,以便唤醒下一个 AP 核心。这就是这段代码的最终目的。

代码逻辑详解

  1. 获取锁的地址

    movq trampoline_lock(%rip), %rax

    这行代码获取了名为trampoline_lock的锁变量的当前地址(RIP-relative 寻址)并存入%rax

  2. 检查锁是否有效

    testq %rax, %rax jz .Lsetup_gdt
    • testq指令检查%rax是否为 0(即NULL)。

    • 如果%rax == 0,说明当前执行的是主 CPU(BSP),因为 BSP 是从 BIOS 直接启动的,并不通过 trampoline 代码唤醒,所以它没有持有这个锁,直接跳转到.Lsetup_gdt继续执行。

    • 如果%rax != 0,则说明当前是 AP CPU,需要执行释放锁的操作。

  3. 释放锁

    movl $0, (%rax)

    这是释放锁的实际操作,它将trampoline_lock指向的内存地址的值设置为0。这个动作会解除锁的保护,并唤醒下一个在等待的 AP 核心。

设计意图:明确的职责分离

这段代码体现了内核启动中一个重要的设计思路:BSP 和 AP 的启动路径分离

  • BSP (Boot Strap Processor):在head_64.S中,BSP 的入口会跳过锁释放的步骤,直接进入 GDT 设置,因为它从未占用过这个锁。

  • AP (Application Processor):所有 AP 在secondary_startup_64中都会经过这段逻辑,释放trampoline_lock,确保唤醒机制的正确性和数据的一致性。trampoline_lock本身是一个在arch/x86/kernel/smpboot.c中定义的全局指针。

这个设计确保了在复杂的多核启动过程中,共享资源的访问是安全且有序的。

http://www.jsqmd.com/news/1369865/

相关文章:

  • Ext系列文件系统详解:从磁盘寻址到 inode、目录与软硬链接
  • 找德州信誉好的屋顶风机源头厂家,建议联系德州宏莱空调设备(德州办事处) - 热点品牌推荐
  • AI Agent工具链设计:五大核心原则提升LLM工具调用能力
  • 如何实现淘宝同行数据截流自动化?全自动挂机防风控,7x24小时无人值守
  • 3分钟掌握免费分屏神器:Nucleus Co-Op让你在同一台电脑上玩转多人游戏
  • 图像抠图与分割核心技术解析:从原理、差异到数据集选型指南
  • 图像抠图与分割:核心区别、数据集构建与实战调优指南
  • 【2027最新】基于SpringBoot+Vue的语言在线考试与学习交流网页平台管理系统源码+MyBatis+MySQL
  • AI社交新范式:动态推荐引擎与目标导向Agent的架构与应用
  • 企业微信API二次开发:实战指南
  • 构建系统演化路径:从单体脚本到可扩展构建平台的设计与实践
  • Linux 内核源码分析与内存管理机制:生产运维止损与巡检实践
  • 2026 年至今,海伦性价比高的异形护栏生产厂家联系电话,小区物业花大价钱装的这玩意儿,居然能救小孩的命?-贤音丝网 - 行业推荐官[官方】--
  • 含容单棒变减速模型:微元法求解电磁感应与动力学综合问题
  • RAG 八股不必硬背:跟着逆境救活一个“满嘴跑火车”的知识助手
  • 从跟随到引领:Fedora、CentOS与RHEL的关系演进及对国产服务器OS的启示
  • Minecraft 模组推荐
  • 5分钟掌握Window Resizer:让所有Windows窗口乖乖听话的终极方案
  • Tesseract.js浏览器端OCR实战:原理、集成与避坑指南
  • springboot电商个性化推荐系统
  • 深入解析I/O多路复用:从select、poll到epoll与kqueue的技术演进与实战
  • TCP三次握手与四次挥手:网络通信的基石与实战诊断
  • 智能体架构设计:OpenProse、Harness与AGE三大方向层技术解析
  • 顶级思维模型拆解:第一性原理与系统思维在技术决策中的实战应用
  • SDIO接口技术概述与测试策略
  • 2026年泉州玉石漆优质厂商选择指南 - 装修教育财税推荐2026
  • 自然抽卡机制设计:手势交互与流体概率可视化
  • ViGEmBus虚拟游戏控制器驱动:让任何手柄在Windows上完美工作
  • 2026 年更新:秀城热门的制冷机头回收出售厂家哪家专业,家里闲置3台旧制冷机头别乱卖,找对渠道能多赚近千元还不踩坑?-博霄制冷设备回收 - 行业鉴选官
  • 2026年优选杭州多品类组合礼盒定制优质厂家怎么联系 - 装修教育财税推荐2026