【问题标题】:Who runs the scheduler in operating systems when CPU is given to user processes?当 CPU 分配给用户进程时,谁在操作系统中运行调度程序?
【发布时间】:2014-04-16 20:48:39
【问题描述】:

如果有 10 个进程 P1,P2...P10 并且被调度程序使用循环策略调度以访问 CPU。 现在当进程 P1 正在使用 CPU 并且当前时间片已经过期时,P1 需要被抢占,P2 需要被调度。但是既然 P1 正在使用 CPU,那么谁抢占了 P1 并调度了 P2 呢? 我们可以调度程序这样做,但是当 CPU 被 P1 占用时调度程序如何运行?

【问题讨论】:

  • 通常会有某种定时中断,它会不时中断用户代码在 CPU 上的执行并运行管理器代码。然后,该管理器代码将决定是否应该继续运行 P1 或切换到 P2。硬件具有中断这样的过程的功能......

标签: process operating-system cpu scheduler context-switch


【解决方案1】:

根据您的问题,P1 需要被抢占,P2 需要被调度,所以有一个 CPU 调度器的概念(CPU 调度器是操作系统的进程,持续监视正在运行的进程)负责在进程中选择进程准备执行的内存,并将 CPU 分配给其中之一。

如果一个进程发生 CPU 调度:

  1. 列表项
  2. 从运行状态切换到等待状态
  3. 从运行状态切换到就绪状态
  4. 从等待切换到就绪
  5. 终止

Dispatcher 模块将 CPU 控制权交给 CPU 调度程序选择的进程;

【讨论】:

    【解决方案2】:

    这和 jcoder 说的完全一样,但让我详细说明(并做出答案而不是评论)

    基本上,当您的操作系统启动时,它会初始化一个中断向量,其中 CPU 在给定中断时会调用相应的中断处理程序。
    操作系统也会在启动期间检查可用硬件,并检测您的主板有 x 个计时器。

    定时器只是使用给定时钟速度滴答的硬件电路,它们可以设置为在给定时间后发送中断(通常每个具有不同的精度,具体取决于其时钟速度和其他因素)

    操作系统检测到定时器后,会设置其中一个,例如每50毫秒发送一次中断;现在每 50 毫秒 CPU 将停止它正在执行的任何操作并调用该中断处理程序,通常是调度程序代码,这反过来将检查当前正在运行的进程并根据调度策略决定是否保留它。

    调度程序,实际上就像大多数操作系统一样,是一个被动的东西,只有在发生某些事件时才会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 2022-01-24
      • 2023-03-12
      相关资源
      最近更新 更多