Operating system 是否可以部分关闭操作系统,然后重新启动到正常工作状态?

Operating system 是否可以部分关闭操作系统,然后重新启动到正常工作状态?,operating-system,kernel,boot,Operating System,Kernel,Boot,我通读了一遍,虽然我对操作系统开发不太了解,但我想知道您是否可以部分关闭系统,然后从那时起重新启动 例如,在Linux上,如果我在关机时正确读取输出,则有点像这样: 向所有进程发送终止/终止 关闭服务/守护进程 关掉电源 启动顺序有点像: BIOS,引导加载程序 加载内核和模块 启动服务/守护进程 启动进程 那么我们能不能在2点之后关机,然后从3点开始重新启动?基本上,我认为这应该在将内核保留在内存中的同时重置进程和守护进程,从而节省正常(重新)启动时的内核加载时间。大多数处理器/计算机制造商都

我通读了一遍,虽然我对操作系统开发不太了解,但我想知道您是否可以部分关闭系统,然后从那时起重新启动

例如,在Linux上,如果我在关机时正确读取输出,则有点像这样:

  • 向所有进程发送终止/终止
  • 关闭服务/守护进程
  • 关掉电源
  • 启动顺序有点像:

  • BIOS,引导加载程序
  • 加载内核和模块
  • 启动服务/守护进程
  • 启动进程

  • 那么我们能不能在2点之后关机,然后从3点开始重新启动?基本上,我认为这应该在将内核保留在内存中的同时重置进程和守护进程,从而节省正常(重新)启动时的内核加载时间。

    大多数处理器/计算机制造商都有计算机可能处于的几种不同电源状态。英特尔的可能是最适用于你的问题,这听起来像是关于通用计算机。查看此链接:


    要了解英特尔电源状态的工作原理、每个状态下保留的系统上下文等的更多信息,请参阅。通常,输入的S状态越高,需要保留的系统上下文越少,因此系统退出该状态并返回S0(完全运行)所需的时间越长.

    大多数处理器/计算机制造商都有计算机可能处于的几种不同电源状态。英特尔的可能是最适用于你的问题,这听起来像是关于通用计算机。查看此链接:


    要进一步了解intel的电源状态如何工作,在每个状态中保留什么系统上下文等。通常,输入的S状态越高,需要保留的系统上下文越少,因此系统退出该状态并返回S0(完全运行)所需的时间就越长。

    这里重点介绍Linux:

    “重新启动”用户空间(和一些硬件部件)

    在这些服务、守护进程和程序的启动方式方面,您的启动序列中缺少了一些内容

    在Linux上输入
    init
    /sbin/init
    (可以是system V init、upstart或systemd)的目的正是启动所有其他进程。所有这些init实用程序都具有管理在其下运行的服务的功能

    现在,linux系统还具有运行级别的概念,即:

    0 = shutdown
    1 = single user recovery mode, no networking
    2 = ?
    3 = multi user networking no X
    4 = ?
    5 = multi user networking X
    
    那个?没有严格的定义。无论如何,如果您现在su到root并键入
    init3
    ,假设您在Linux上,X和每个X客户机都将被终止。当然,如果在给定的运行级别上允许某些操作,那么它不会被终止,但是如果您只希望某个进程重新启动,那么这可以很好地实现它。重新启动系统守护进程的用例是对更新的响应,现在大多数包管理器实际上会通过您选择的initscript工具为您执行此操作

    所以我们可以重新启动整个GUI,我们可以重新启动任何守护进程。我们也可以杀死任何其他进程。重新加载硬件驱动程序?我已经可以通过
    modprobe
    动态地完成这项工作,因此如果我想更新我的图形驱动程序,我可以
    init3
    ,删除旧的,插入新的,然后继续

    您的包管理器知道如何重新启动系统守护进程,您可以随时按照它的建议注销和重新登录;因此,Linux在避免更新时重新启动方面已经相当有效

    重新启动内核

    因此,基本上,我认为大多数Linux都可以“重新启动”,而无需实际重新启动。那么现在还剩下什么

  • 我无法重新加载内核
  • 我无法轻松卸载根文件系统。我依赖它来获得新加载的用户空间。免责声明:您可以在内核“重新加载”过程中重新加载initramfs,所以这里我们依赖于1
  • 现在,问题是如何重新加载内核?内核实际上并不是什么特别的魔法,它只是另一个复制到内存中的计算机程序,所以我们可以在某个地方写一个程序,在我们的内核上写,并将执行传递给它

    这是存在的,信不信由你,叫做。我将留下来总结它的问题:

    虽然可行,但实施kexec等机制带来了两大挑战:

  • 新内核将覆盖当前正在运行的内核的内存,而它仍在执行
  • 新内核通常期望所有物理设备都处于定义良好的状态(在系统重新启动后,当BIOS(或固件)将其重置为“正常”状态时)。绕过真正的重新启动可能会使设备处于未知状态,新内核必须从中恢复
  • 与系统关闭不同,kexec不会自动停止文件系统或进程;你要为此负责


    好了。根据需要重新加载的部分,在Linux上,大部分都是可能的。

    这里重点介绍Linux:

    “重新启动”用户空间(和一些硬件部件)

    在这些服务、守护进程和程序的启动方式方面,您的启动序列中缺少了一些内容

    在Linux上输入
    init
    /sbin/init
    (可以是system V init、upstart或systemd)的目的正是启动所有其他进程。所有这些init实用程序都具有管理在其下运行的服务的功能

    现在,linux系统还具有运行级别的概念,即:

    0 = shutdown
    1 = single user recovery mode, no networking
    2 = ?
    3 = multi user networking no X
    4 = ?
    5 = multi user networking X
    
    那个?没有严格的定义。无论如何,如果您现在su到root并键入
    init3
    ,假设您在Linux上,X和每个X客户机都将被终止。当然,如果在给定的运行级别上允许某些东西,它不会被杀死,但是如果你想要一个certa