【问题标题】:Is the Operating System a process?操作系统是一个进程吗?
【发布时间】:2016-01-25 01:54:16
【问题描述】:

我刚刚学习操作系统,我在课堂讲义中偶然发现了这个问题。在我们的课程中,我们将进程定义为正在执行的程序,并且我知道操作系统本身就是一个程序。所以按照这个定义,操作系统就是一个进程。

同时可以通过上下文切换来切换进程,这是由操作系统管理和处理的。但是,当操作系统不运行时,它会自己处理什么呢?

另外,如果是进程,操作系统是否有与之关联的进程控制块?

我查看了这个网站上的一个较旧的问题,但我觉得答案似乎不够清楚,无法真正概述为什么操作系统是/不是一个过程,所以我想我会在这里再问一次.

【问题讨论】:

  • 但是当操作系统不运行时,它会处理什么? - 没有。这几乎是一种理想状态 - 用户线程/进程正在使用所有 CPU 执行,而操作系统则不使用。

标签: process operating-system kernel


【解决方案1】:

首先,一个操作系统是由多个部分组成的。核心部分是内核,它不是一个进程。它是运行进程的框架。在实践中,一个进程不仅仅是一个“正在执行的程序”。在具有 MMU 的系统上,进程通常在其自己的虚拟地址空间中运行。然而,内核通常映射到所有进程。它总是在那里。

存在操作系统的其他辅助部分以使其可用。操作系统可能具有作为其管理的一部分运行的进程。例如,Linux 有许多独立调度任务的内核线程。但这些通常对操作系统的运行并不重要。

【讨论】:

  • 好吧,这是有道理的。我只有一个问题——为什么内核不是一个进程?
  • 一个进程至少需要一个线程。一个线程需要一个堆栈。操作系统内核没有。它只是一个状态机,所有线程/进程都调用托管资源,如 CPU 磁盘、KB、网络等。内核不自己工作——它仅在用户线程/进程调用它或硬件请求服务时进入。
【解决方案2】:

简短回答:不。

这里对“操作系统”的定义和其他的一样好:

https://en.wikipedia.org/wiki/Operating_system

操作系统 (OS) 是管理计算机的系统软件 硬件和软件资源,并提供通用服务 电脑程序。操作系统是系统的组成部分 计算机系统中的软件。应用程序通常需要一个 操作系统。

甚至“系统级进程”(如 Linux 上的“init”或 Windows 上的“svchost.exe”)依赖“操作系统”......但它们本身并不是 操作系统。

【讨论】:

  • 我已经习惯了 OS = Kernel + Utility 程序(工具链、编辑器、计算器等)的定义。这不也包括 init(或 systemd)进程吗?
  • 当然,我会接受的。根据这个定义,“操作系统”绝对是!=“一个进程”。 “操作系统”甚至不是“一组进程”。正确的?然而,就个人而言,我认为说“Linux OS 是内核”更有用。原因如下:stackoverflow.com/questions/3403938/…
【解决方案3】:

如果你愿意的话,它更像是身体(硬件)的灵魂。 它不仅仅是一个进程,而是在系统中运行用户进程所需的一组(内核)进程。 PID 0 是为其余内核/用户进程提供调度程序/交换功能的所有进程的父进程,但它不是唯一的进程。这些内核进程(在内核驱动程序的帮助下)向用户进程提供访问器功能(通过系统调用)。

【讨论】:

    【解决方案4】:
    1. 这取决于您所说的“操作系统”。
    2. 这取决于您所谈论的操作系统。

    话虽如此,但存在过度简化的风险,大多数所谓的“操作系统”通常是在内核模式下从用户进程执行的。通过中断、陷阱或故障进入内核。

    要进行上下文切换,通常是进程导致进入内核模式的错误(例如写入磁盘)。在内核模式下,进程意识到它必须等待,因此它通过将上下文切换到另一个进程来让步。另一种常见的方式是定时器导致中断,强制进程进入内核模式。然后进程确定接下来应该执行谁,并切换进程上下文。

    一些操作系统确实有自己的内核进程,但这种情况越来越少了。

    大多数操作系统的组件都有自己的进程。

    【讨论】:

      【解决方案5】:

      同意上面/下面的一些 cmets。

      操作系统不是一个进程。然而,很少有设计变体会产生相反的错觉。

      例如:如果您正在运行 FreeRTOS,则没有单独的操作系统地址空间和进程地址空间之类的东西,每件事都作为单个进程运行,FreeRTOS 框架提供了允许不同任务同步的 API。

      操作系统只是一组 API(系统调用)和实用程序,有助于实现多处理、资源共享等。例如:schedule() 是处理操作系统的多处理能力的核心操作系统函数.

      从这个意义上说,操作系统不是一个进程。虽然它附加到运行在 CPU 上的每个进程,否则进程将如何使用 OS 的 API。

      【讨论】:

        猜你喜欢
        • 2014-02-19
        • 2016-10-31
        • 2018-07-01
        • 1970-01-01
        • 2021-04-26
        • 2018-06-23
        • 1970-01-01
        • 1970-01-01
        • 2012-06-09
        相关资源
        最近更新 更多