【问题标题】:How does the operating system handle its responsibilities while a process is executing?进程执行时操作系统如何处理其职责?
【发布时间】:2014-10-17 08:38:53
【问题描述】:

我很早就想到了这个问题,听起来可能有点空洞。我们知道操作系统负责处理内存分配、进程管理等。CPU 一次只能执行一项任务(假设它是单核)。假设操作系统已经为某个用户启动的进程分配了一个 CPU 周期,并且 CPU 正在执行该进程。现在操作系统在哪里运行?如果其他进程正在使用 CPU,那么操作系统是否暂时没有运行?因为操作系统本身必须需要 CPU 才能运行。如果操作系统没有运行,那么这段时间谁在处理进程管理、设备管理等?

【问题讨论】:

标签: process operating-system cpu


【解决方案1】:

问题在于混淆了谁控制了内存和谁控制了 CPU。 “运行”这个词并不准确:在单个 CPU 上,单个任务在任何给定时间运行,即处理器正在执行其指令;但是许多任务正在执行,因为它们的状态存储在内存中,并且可以随时恢复执行。

当一个进程在 CPU 上执行时,内核没有执行。它的状态保存在内存中。内核的执行可以恢复:

如果操作系统提供preemptive multitasking,它将安排在一段时间后发生中断(称为time slice)。在非抢占式操作系统上,如果进程不让出 CPU,它将永远运行。请参阅 What mechanisms prevent a process from taking over the processor forever? 了解抢占的工作原理。

进程管理和设备管理等任务是由某个事件触发的。如果事件是进程的请求,则该请求将采用系统调用的形式,系统调用执行内核代码。如果事件是从硬件触发的,它将采取中断的形式,执行内核代码。

(注意:在这个答案中,我使用“CPU”和“处理器”作为同义词,表示单个执行线程:单个内核,或任何硬件架构。)

【讨论】:

  • @Gilles-这很清楚,也是最好的答案。谢谢,但是,我无法删除我的答案,因为它说它已被接受!我现在该怎么办?
  • @shekharsuman 您的回答基本正确。修复错误的部分。
【解决方案2】:

操作系统内核在通过中断进入之前什么都不做。它可能是因为硬件中断导致驱动程序运行并且驱动程序选择通过操作系统退出,或者正在运行的线程可能会产生syscall 中断。

除非发生中断,否则操作系统内核什么都不做。它不需要做任何事情。

编辑:

DMA(通常)用于批量 I/O,由硬件子系统处理,该子系统处理由系统调用(软件中断)发出的请求。当 DMA 操作完成时,DMA 硬件会引发硬件中断,因此运行可以进一步向操作系统发出完成信号的驱动程序,可能会更改正在运行的线程集,因此 DMA 由中断管理。

新进程/线程只能由已发出系统调用(软件中断)的现有线程加载,因此新进程由中断启动。

这是中断,一路下来:)

【讨论】:

  • @shekharsuman 这个答案是完全正确的。虽然给用户进程分配了 CPU 周期,但内核不会“处理任何新进程”——因为没有新进程:新进程只能因某些请求而被调用,该请求要么采用系统调用的形式,或者从某个已经触发中断并中断正在运行的进程的事件启动。
  • 好吧,除了系统调用不一定是中断(这只是可能的实现之一)。
【解决方案3】:

这取决于您使用的 CPU 调度类型:(如果是单核) 如果您的进程使用抢占式调度执行,那么您可以在其间中断该进程一段时间,您可以将 CPU 用于其他进程或操作系统。 但是在非抢占式调度的情况下,进程在完成执行之前不会让出 CPU。

在单核的情况下,如果有一个进程,那么它将按照给定的指令执行,如果有多个进程,则将状态存储在PCB中。如果没有中断发生,则使进程排队并一个接一个地执行。 PCB 负责任何流程管理。

当一个进程初始化时,它调用库函数,即系统调用,如果某个进程在执行期间失败或中断,内核的执行将被调用> 发生。

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    相关资源
    最近更新 更多