Linux内核学习012——进程调度(一)

Linux内核学习012——进程调度(一)

进程是程序运行态的表现形式,而确保进程有效工作的是一个内核子系统——调度程序。调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间。进程调度程序可以视为可运行态进程之间分配有限处理器时间资源的内核子系统。调度程序是多任务操作系统的基础,只有通过调度程序的合理调度,系统资源才能最大限度发挥作用。

多任务

多任务操作系统是能同时并发地加交互执行多个进程的操作系统。无论是单处理器或者多处理器上,多任务操作系统都能使多个进程处于堵塞或者睡眠状态。处于这种状态的进程,并未真正运行,而是在等待某些事件发生(比如:键盘输入、网络数据、文件I/O等)。

进程调度可以发生在四种环境下:

  1. 当一个进程从运行状态切换到等待状态
  2. 当一个进程从运行状态切换到就绪状态
  3. 当一个进程从等待状态切换到就绪状态
  4. 当一个进程终止时

若调度只能发生在1、4时,称为非抢占式调度,否则为抢占式调度。Linux支持抢占式调度,由调度程序来决定何时停止一个进程的运行,以便其他进程能够得到执行机会。这个强制的挂起动作称为抢占。进程每次运行都被分配了一个固定的时间段,称为进程的时间片——即分配给每个可运行进程的处理器时间段。有效管理时间片能够使得调度程序从全局角度做出决定,并且可以避免陷入死循环的进程独占整个系统资源。现代操作系统对程序运行采用了动态时间片计算的方式,并且引入了可配置的计算策略。

在非抢占式调度的情况下,除非进程主动停止,否则会一直运行。进程主动挂起自己的操作称为让步。但是该机制存在很多缺点:调度程序无法规定每个进程的运行时间,以及陷入死循环的进程会导致系统崩溃。

你可能感兴趣的:(Linux内核学习012——进程调度(一))