gpt4 book ai didi

Linux reboot() 系统调用 : why it calls do_exit(0) after kernel_halt()?

转载 作者:IT王子 更新时间:2023-10-29 00:39:10 24 4
gpt4 key购买 nike

这与:https://stackoverflow.com/a/13413099/1284631 有关

现在,问题是:

为什么 reboot() 系统调用,当使用 LINUX_REBOOT_CMD_HALT 参数调用时(参见此处:http://lxr.linux.no/linux+v3.6.6/kernel/sys.c#L480)在已经调用 之后调用 do_exit(0) >kernel_halt(),因为调用 kernel_halt() 归结为调用 stop_this_cpu()(参见此处:http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/process.c#L519),作为 的一部分native_machine_halt()(参见此处:http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/reboot.c#L680)。

或者,在我看来 stop_this_cpu() 永远不会返回(它以无限循环结束)。

所以,do_exit(0) 被调用只是为了防止 kernel_halt() 没有完成它的工作并返回?那么,为什么不直接使用 panic() 呢?

最佳答案

一些想法:

  • 这可能是 kernel_halt() 拒绝以正当理由实际停止,尽管我想不出任何原因。
  • kernel_halt() 也可以设计为由管理程序或比内核更高或同等级别的东西调用(可能是自定义 SMI 代码?)
  • 也许 kernel_halt() 函数提前返回,“安排”暂停,而实际暂停在某些硬件上发生在一段时间后。我记得读过有关在 DOS 中执行 ATX 断电的文章——你会发出 outb 指令来启动断电,但你必须有一些 nops,无限循环,或 hlt 紧随其后,因为实际断电可能会在几个周期后发生。
  • 调用进程可能希望以内核 panic 以外的其他方式处理重启失败。

关于Linux reboot() 系统调用 : why it calls do_exit(0) after kernel_halt()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com