gab*_*lin 7 multithreading multicore context-switching
在单核处理器上进行上下文切换时,负责的代码在唯一负责切换线程的CPU上执行.
但是,当我们有多个CPU时,这是如何完成的?是否有主CPU执行所有从CPU的所有上下文切换?每个CPU是否负责自己的上下文切换?如果是这样,切换如何同步,以便两个CPU不执行相同的线程?或者是否有其他机制?
小智 6
内核是多线程的.它可以在任何核心上执行.当核心需要交换线程时,它会调用负责选择应该执行的下一个线程的内核部分.
内核是多线程的; 也就是说,它被编写为在多个内核上同时安全执行.因此,只有一个CPU最终运行任何给定的线程,因为构造代码使得如果多个CPU同时重新调度,则会发生正确的结果.
CPU 不进行上下文切换。操作系统可以。
本质上,操作系统通过在 CPU 内核中加载新的上下文(寄存器、内存映射等)来执行上下文切换。线程是一种操作系统结构,可以在其中保存此类上下文。因此,操作系统还负责选择一个非运行线程来加载 CPU 上下文。
如果操作系统选择一个正在运行的线程,两个内核将尝试运行同一个线程。这肯定会引起混淆,因为它们共享相同的内存,并且该单线程不会期望与自身并行运行(!)所以没有操作系统会做这样的事情。
| 归档时间: |
|
| 查看次数: |
9661 次 |
| 最近记录: |