进程调度

这章的主要内容是进程调度相关知识,下面我们来看本章总结:
多任务操系统分为两类:

  • 非抢占式多任务
  • 抢占式多任务
    Linux同Unix一样,提供了抢占式的多任务模式,这种模式是由调度器来决定什么时候停止一个进程。

Linux的进程调度使用了CFS算法进行调度。
进程的类型一般分为两类:

  • I/O消耗类型(I/O型)
  • 处理器消耗类型(计算密集型)
    调度策略的主要目标:在两个矛盾间寻找平衡点,即进程快速响应和最大系统利用率。

那么CFS调度策略是怎样找到这个平衡点的?
在CFS调度器调度进程时,没有将时间片直接分配给进程,而是将处理器的使用比划分给进程,这样一来,进程执行所获得的处理器时间和系统负载密切相关,这也是Linux的调度策略同其它操作系统不同之处。(CFS算法实现喜欢的童鞋可以再看看,其中CFS使用红黑树来组织进程)

睡眠和唤醒:
睡眠通过等待队列进行处理,等待队列是由某些时间发生的进程组成的简单链表。
唤醒时,会将此进程放入红黑树中,通常哪段代码促使唤醒条件达成,它就负责随后的唤醒操作。

在进程调度中还有两个重要的概念,那就是:抢占和上下文切换
首先,我们先来看上下文切换,就是从一个可执行进程切换到另一个可执行进程,这其中要完成两个步骤的工作:
1.调用switch_mm()函数,该函数作用是将虚拟内存从上一个进程映射切换到新进程中。
2.调用switch_to()函数,该函数将处理器状态进行切换,包括:保存,恢复栈信息,寄存器信息,还有其它关联信息。

下面是抢占,抢占分为用户抢占和内核抢占:
1.用户抢占:内核即将返回用户空间的时候会产生抢占,因为此时内核进程知道自己是安全的,即可以发生抢占。
2.内核抢占:Linux完整的支持内核抢占,只要重新调度是安全的,内核就可以在任何时间抢占正在执行的任务,怎样才算重新调度安全?只要没有持有锁就都是安全的,锁是非抢占区域的表示。我们多线程编程中加锁也是同样道理。

这一章我们了解了内核进程调度的过程和一些概念信息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 进程调度 调度程序复杂决定哪个进程投入运行,合适运行以及运行时长。调度程序可看做在可运行态进程之间分配有限的处理器...
    大雄good阅读 637评论 0 1
  • 引言 当计算机系统处于就绪状态的用户进程数多于CPU数时,就会产生多个进程或线程同时竞争CPU的结果。假设现在只有...
    程序猿胖子阅读 8,208评论 1 3
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,304评论 0 23
  • 天空之上,血球悬浮,一丝丝的血红煞气散发出来,伴随着那细微的跳动,远远看去,犹如一块令人毛骨悚然的肉团一般。 这诡...
    混沌天书阅读 326评论 0 0
  • 法国名作家莫泊桑于1884年写了一个故事,讲述了小公务员的妻子玛蒂尔德为参加一次晚会,向朋友借了一串钻石项链,来炫...
    雅各布666阅读 269评论 0 1

友情链接更多精彩内容