首页 > 解决方案 > Linux 内核中的上下文切换时间

问题描述

在 Linux Kernel 中,当处理器上下文从一个线程切换到另一个线程时,寄存器的状态会保存到 PCB 中,并且会进行更多的簿记以确保可以再次加载确切的状态。

从内核内存中保存和加载寄存器的整个过程可能需要一些 CPU 周期。这个时间也是在用户 CPU / 系统 CPU 或其他地方

标签: linuxmultithreadinglinux-kernelcontext-switchcontext-switching

解决方案


可以这样想:

  • 一个任务正在用户空间中运行,但是发生了一些事情(系统调用、异常、IRQ,...)导致任务切换到内核空间

  • 内核计算“在用户空间中花费的now - last_time时间” last_time = now

  • 内核做一些事情(最初取决于导致切换到内核空间的原因),并且在做一些事情时,它可能会或可能不会决定做一个或多个任务切换。当每个任务切换发生时,内核计算出前一个任务在内核中花费了多少时间(now - last time)并将其添加到任务的“系统时间”中,并为以后设置“最后时间”(last_time = now

  • 内核最终决定当前正在运行的任务应该返回到用户空间,并且在此之前它立即对任务的系统时间进行最终更新(now - last time再次)并再次设置“最后一次”以供稍后(last_time = now)以便内核可以弄清楚“在用户空间中花费的时间”稍后。

  • 任务切换回用户空间后,返回上面的第一步并再次执行所有操作。


推荐阅读