【问题标题】:Linux user-space scheduling while shutdown or reboot关机或重启时的 Linux 用户空间调度
【发布时间】:2015-11-24 04:22:20
【问题描述】:
 68 void kernel_restart_prepare(char *cmd)
 69 {
 70         blocking_notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd);
 71         system_state = SYSTEM_RESTART;
 72         usermodehelper_disable();
 73         device_shutdown();
 74 }

我正在检查 linux 内核源代码linux/kernel/reboot.c。 在重新启动调用时,将调用上面定义的函数。 我的问题与重新启动系统有关。由于我们在驱动程序中安装了重启通知程序,因此我们希望确保在重启过程中不会调用我们的用户空间进程。

  1. 如果调用了重新启动,用户空间进程是否仍在运行?
  2. 是否保证如果调用了重启通知程序,用户空间进程仍然可以运行或调度?
  3. SMP 上的行为是否也得到保证,如果调用重新启动,用户空间不会执行?
  4. 能否抢占此调用?
  5. 如果驱动程序注册到reboot-notifier list 是否满足要求,用户空间应用程序不在此通知程序处执行?
  6. 是否可以在驱动程序中为device_shutdown添加挂钩?

【问题讨论】:

    标签: linux-kernel


    【解决方案1】:

    kernel_restart_prepare 作为reboot 系统调用的一部分被调用,描述explicitely says

    重启不同步:在调用它之前自己做。

    因此,无法保证用户空间进程将在此时完成,并且不会阻止新的用户空间进程启动。

    该函数在标准内核环境中运行,因此可以像往常一样被抢占。

    根据 device_shutdown implementation,它不提供挂钩机制。它只是为每个驱动程序调用shutdown 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      相关资源
      最近更新 更多