Linux进程管理:优先级、亲和性与实时系统解析
1. 进程调度中的“乒乓效应”及新机制
在进程调度中,曾经存在一种“乒乓效应”。当两个进程都有非零时间片且都调用 sched_yield() 时,旧的调度行为会让内核轮流调度这两个进程,每个进程依次表示“不,调度其他进程”,这种情况会持续到两个进程耗尽它们的时间片。进程调度器的选择顺序就像“A, B, A, B, A, B”这样,因此被称为“乒乓效应”。
新的调度行为避免了这种情况。一旦进程A请求让出处理器,调度器就会将其从可运行进程列表中移除。同样,进程B提出相同请求时,也会被从可运行进程列表中移除。调度器在没有其他可运行进程之前,不会考虑运行进程A或进程B,从而防止了“乒乓效应”,让其他进程能公平地获得处理器时间。
所以,当一个进程请求让出处理器时,它应该是真的打算让出!
2. 进程优先级
这里讨论的是普通的非实时进程,实时进程需要不同的调度标准和独立的优先级系统。
Linux不会随意调度进程,而是为应用程序分配优先级,这些优先级会影响进程何时运行以及运行多长时间。Unix历史上把这些优先级称为“nice值”,其背后的理念是通过降低进程的优先级来“善待”系统中的其他进程,让其他进程能消耗更多的系统处理器时间。
nice值决定了进程的运行时机。Linux会按照优先级从高到低的顺序调度可运行进程,优先级高的进程会在优先级低的进程之前运行。nice值还决定了进程时间片的大小。合法的nice值范围是从 -20 到 19(包含),默认值是 0。有点令人困惑的是,进程的nice值越低,其优先级越高,时间片越大;反之,nice值
订阅专栏 解锁全文
57

被折叠的 条评论
为什么被折叠?



