首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux ()系统调用:为什么在do_exit()之后调用kernel_halt(0)?

Linux ()系统调用:为什么在do_exit()之后调用kernel_halt(0)?
EN

Stack Overflow用户
提问于 2012-11-19 10:34:13
回答 1查看 2.2K关注 0票数 5

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

现在的问题是:

为什么使用LINUX_REBOOT_CMD_HALT参数调用的reboot()系统调用(参见此处:http://lxr.linux.no/linux+v3.6.6/kernel/sys.c#L480)在调用kernel_halt()之后调用do_exit(0),因为调用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()呢?

EN

回答 1

Stack Overflow用户

发布于 2013-07-15 14:10:50

一些想法:

  • 也许是kernel_halt()为了合法的理由而拒绝停下来,尽管我想不出任何理由。
  • kernel_halt()也可以设计为由管理程序调用,或者在比内核更高或更等效的级别上调用(可能是自定义SMI代码吗?)
  • 也许kernel_halt()函数会提前返回,“调度”暂停,而实际的暂停会在稍后的一些硬件上发生。我记得我读过关于在汇编中执行ATX电源关闭的文章--您可以发出outb指令来降低电源关闭,但是您必须有一些nops、一个没完没了的循环,或者是一个hlt,因为实际的断电可能会在几个周期后发生。
  • 调用进程可能希望以其他方式处理重新启动失败,而不是内核恐慌。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13452002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档