linux - Linux 内核中的上下文切换时间
问题描述
在 Linux Kernel 中,当处理器上下文从一个线程切换到另一个线程时,寄存器的状态会保存到 PCB 中,并且会进行更多的簿记以确保可以再次加载确切的状态。
从内核内存中保存和加载寄存器的整个过程可能需要一些 CPU 周期。这个时间也是在用户 CPU / 系统 CPU 或其他地方
解决方案
可以这样想:
一个任务正在用户空间中运行,但是发生了一些事情(系统调用、异常、IRQ,...)导致任务切换到内核空间
内核计算“在用户空间中花费的
now - last_time
时间”last_time = now
(内核做一些事情(最初取决于导致切换到内核空间的原因),并且在做一些事情时,它可能会或可能不会决定做一个或多个任务切换。当每个任务切换发生时,内核计算出前一个任务在内核中花费了多少时间(
now - last time
)并将其添加到任务的“系统时间”中,并为以后设置“最后时间”(last_time = now
)内核最终决定当前正在运行的任务应该返回到用户空间,并且在此之前它立即对任务的系统时间进行最终更新(
now - last time
再次)并再次设置“最后一次”以供稍后(last_time = now
)以便内核可以弄清楚“在用户空间中花费的时间”稍后。任务切换回用户空间后,返回上面的第一步并再次执行所有操作。
推荐阅读
- sql - 如何在bigquery中将纪元转换为日期时间?
- python - Numpy的polyfit函数低估了线性回归线的斜率?
- html - 导航链接使用
- sdn - Neon、Fluorine-SR2 和 Oxygen-SR4 有什么区别?
- c# - 如何使用 API 并以 JSON 格式返回内容?
- ajax - 三星互联网浏览器忽略 Ajax 请求上的设置 cookie
- microservices - 事件驱动架构中有效负载的策略是什么
- angular - 标头未以角度添加到 HttpClient 中的 Get 请求
- sql - PostgreSQL用组和顺序计算滚动平均值
- python - 如何使用python将div添加到单词列表中