gpt4 book ai didi

linux - Linux中多核处理器从实模式到保护模式的转换

转载 作者:太空狗 更新时间:2023-10-29 11:40:40 24 4
gpt4 key购买 nike

我正在努力学习更多关于操作系统的知识,目前我正在研究 Linux 内核是如何加载和初始化的。

感谢几个相关问题和this book , 我基本上能够理解 transition from real mode to protected mode有效。

但是,我不明白的是,其余内核如何以及何时切换到多核处理器的保护模式(据我所知,每个内核都有自己的一组控制寄存器和切换似乎只在启动过程中发生一次。

(我只发现 this somehow related question with an (short) answer 不可能有两个内核处于不同的模式,但是没有给出来源。) 这个答案是错误的(感谢例如 n.m. 在指出这一点的评论)。

编辑:正如评论已经指出的那样,内核可能会在初始化过程的后期执行此操作,但是那是什么时候发生的?

最佳答案

感谢 sawdust 的输入, Peter CordesMichael Petch我能够找到我的问题的解决方案(此处适用于 Linux v4.16):

基本上,从实模式到保护模式的转换发生在内核的每次启动时(如果支持热插拔,则随时可能发生)。

辅助处理器的第一次启动发生在 SMP (Symmetric Multiprocessing) initialization 期间(这是内核初始化的一部分)。在那里,cpu_up() 被初始化期间存在的所有 CPU 调用:

for_each_present_cpu(cpu) {
if (num_online_cpus() >= setup_max_cpus)
break;
if (!cpu_online(cpu))
cpu_up(cpu); // Startup of the core in the following functions
}

此函数调用导致使用 APIC 激活核心(参见 INIT/SIPI 信号)。

首先,被唤醒的核心处于实模式并获得real mode trampoline code for x86-64。作为切入点,在 x86-64 的情况下。

在下面的函数中,过渡到protected mode对于辅助处理器发生(例如设置 PE 位):

# Enable protected mode
movl $X86_CR0_PE, %eax # protected mode (PE) bit
movl %eax, %cr0 # into protected mode

关于linux - Linux中多核处理器从实模式到保护模式的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51417464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com