首页 > 解决方案 > 如果默认时间片为 100 毫秒,Linux 进程如何每秒产生 60 次图形输出?

问题描述

关于多任务处理在 Linux 中的工作原理,我从根本上不了解(可能也是一般情况下)。如果我理解正确,每次进程想要将其输出更改到屏幕时,它都需要进行一些计算并发送数据。但如果我理解正确的话,在大多数 Linux 发行版的默认设置下,进程在被抢占之前最多可以占用 CPU 100 毫秒。这似乎排除了进程被频繁解锁以能够以 60Hz 刷新屏幕的可能性。鉴于此,我想我可能对 Linux 如何管理其稀缺的 CPU 时间和/或进程如何将数据发送到 I/O 设备有很多基本的误解。

问题。这里发生了什么?

标签: linux-kerneloperating-systemschedulingmultitasking

解决方案


您似乎混淆了不同的调度策略。

在 Linux 中,有几种调度策略可以确定不同的时间片。100ms 默认时间片仅适用于SCHED_RR策略,用于实时进程。实际上,没有正常的进程在SCHED_RR.

正常进程在 下运行SCHED_OTHER,这是默认的调度程序策略。在这种调度下,时间片是在运行时动态确定的,而且要低得多。默认情况下,它可以在 0.75ms 到 6ms 之间的任何地方。您可以看到这些默认值(以纳秒为单位)分别定义在kernel/sched/fair.cassysctl_sched_min_granularitysysctl_sched_latency中。您可以通过阅读/proc/sys/kernel/sched_min_granularity_ns或获取系统上的实际值/proc/sys/kernel/sched_latency_ns

您可以在此处了解有关 Linux 内核 CFS 调度程序的更多信息(或在此处获取更多文档)。


推荐阅读