当前位置:   article > 正文

Linux|时间片和上下文切换_linux设置线程时间片

linux设置线程时间片
Linux 系统调度中的时间片

Linux 时间片是操作系统调度中的一个概念,它是分配给每个进程或线程的 CPU 时间,即进程被允许运行的时间。如果某个进程 / 线程在时间片结束时还在运行,则 CPU 将暂停该进程 / 线程,并选择下一个已就绪的线程 / 进程来执行(切换);如果某个进程 / 线程在时间片结束前就阻塞或结束,则 CPU 会在阻塞或结束时立即进行切换。

虽然每个处理器核心在一个时刻永远只能运行一个任务,但是通过时间片不断、快速地循环切换,可以让多个任务都得到执行。通常来说,时间片的长度很短,用于切换时间也非常短,所以从用户角度看来就是多个任务在同时执行,也就模拟了并行计算。对于多核或超线程的 CPU 来说,内部有不只一个处理器核心,也就真正实现了并行计算。

在 Linux 中,系统分配给每个进程的时间片的长短并不是固定的,而是受到进程父子关系、进程数量、进程交互性(趋向于 IO 密集型还是处理器密集型)等因素来分配不同的时间片长度。

如果时间片的长度过短,因为上下文切换(进程间切换)本身也是需要时间的,所以上下文切换就会占用更大比例的时间。

如果时间片的长度过长,那么当 CPU 正在执行的任务较多时,一些简单命令的响应时间也可能会因为 CPU 正在执行其他进程的时间片而延长。

上下文切换的过程

每次保存和恢复上下文的过程,都是在系统态进行的,并且需要几十纳秒到数微秒的 CPU 时间。具体包括如下过程:

  1. CPU 保存线程 A 的用户态指令,切换为内核态
  2. 保存线程 A 的私有资源,包括栈、寄存器等
  3. 保存线程 A 的用户态资源,包括内存、打开文件等(如需切换进程)
  4. 加载线程 B 的用户态资源,包括内存、打开文件等(如需切换进程)
  5. 加载线程 B 的私有资源,包括栈、寄存器等
  6. CPU 恢复线程 B 的用户态指令,切换为用户态
上下文切换的类型
主动的上下文切换(voluntary-context-switches)

进程主动放弃 CPU 的执行权。其常见的原因包括:

  • 等待事件发生(包括等待用户输入、等待网络数据到达等)
被动的上下文切换(involuntary-context-switches)

进程被动放弃 CPU 的执行权。其常见的原因包括:

  • 进程的时间片已经结束,被系统强制切换
  • 高优先级进程抢占 CPU 资源
  • 发生硬件中断,跳转执行内核的中断服务程序
常见问题及原因
大量进程争夺 CPU 资源时,被动的上下文切换次数激增

当 Linux 系统中参与竞争 CPU 资源的进程数量增加时,操作系统会将时间片分割得更小,以便公平地分配 CPU 时间给每个进程。这就导致处理器需要更加频繁地切换上下文并执行不同的进程,从而使得被动的上下文切换次数激增(system time 激增),同时也会导致上下文切换占用更大比例的 CPU 时间。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/254752
推荐阅读
相关标签
  

闽ICP备14008679号