首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux中的系统暂停

问linux中的系统暂停
EN

Stack Overflow用户
提问于 2014-05-18 09:50:59
回答 1查看 2.2K关注 0票数 4

我在看Linux内核中的reboot.c。

http://lxr.free-electrons.com/source/kernel/reboot.c

有一个对kernel_halt的调用,它说这个函数将关闭所有东西并执行干净的系统暂停。一个干净的系统停止意味着什么?有谁能解释一下这个停顿到底是怎么回事吗?我也想知道syscore是什么样的操作被认为是syscore操作?

代码语言:javascript
复制
  0 void kernel_halt(void)
    161 {
    162         kernel_shutdown_prepare(SYSTEM_HALT);
    163         migrate_to_reboot_cpu();
    164         syscore_shutdown();
    165         pr_emerg("System halted\n");
    166         kmsg_dump(KMSG_DUMP_HALT);
    167         machine_halt();
    168 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-18 10:54:02

syscore_shutdown()将检查所有已注册的syscore操作(司机/基地/syscore.c“执行所有注册的系统核心关机回调”)。对于非空操作shutdown并将执行它们。Syscore操作是使用register_syscore_ops注册的,大多数驱动程序只注册syscore_ops的resume和suspend字段。

对于x86/x86_64,在LinuxKernalVersion3.13中有部分shutdown字段的syscore注册列表:

1) arch/x86/kernel/i8259.c:i8259A_shutdown

代码语言:javascript
复制
261         /* Put the i8259A into a quiescent state that
262          * the kernel initialization code can get it
263          * out of.
264          */
265         outb(0xff, PIC_MASTER_IMR);     /* mask all of 8259A-1 */
266         outb(0xff, PIC_SLAVE_IMR);      /* mask all of 8259A-2 */

2) arch/x86/kernel/cpu/mcheck/mce.c,mce_syscore_shutdown,调用mce_disable_error_reporting

代码语言:javascript
复制
2026  * Disable machine checks on suspend and shutdown. We can't really handle
2027  * them later.
 ....
2037                         wrmsrl(MSR_IA32_MCx_CTL(i), 0);

3) 内核/irq/泛型-chip.c irq_gc_shutdown:对于gc_list中的每个元素,尝试运行ct->chip.irq_pm_shutdown(data);;"@irq_pm_shutdown:每片芯片关闭一次从核心代码调用的函数“(描述)

4) 驱动/发光二极管/触发器/分类账-cpu.c:

代码语言:javascript
复制
 84 static void ledtrig_cpu_syscore_shutdown(void)
 85 {
 86         ledtrig_cpu(CPU_LED_HALTED);
 87 }
...
 61         case CPU_LED_HALTED:
 62                 /* Will turn the LED off */
 63                 led_trigger_event(trig->_trig, LED_OFF);

一个干净的系统停止意味着什么?

卸下所有东西,关闭所有硬件。

我也想知道syscore是什么样的操作被认为是syscore操作?

Syscore用于注册一些函数,以便在挂起/恢复和关闭时工作。只有极少数的驱动程序注册系统关机虚拟函数,例如:关闭PC case LED(关闭不是键盘的leds、禁用中断、禁用机器检查(我认为类似于ECC错误,因为不会有人向系统日志报告它们),

有谁能解释一下这个停顿到底是怎么回事吗?

这个暂停:切换到0 CPU核心,因为只有它可以重新启动或关闭,运行所有已注册的预关闭处理程序,然后打印“系统暂停”并要求硬件执行实际的断电操作。

代码语言:javascript
复制
162         kernel_shutdown_prepare(SYSTEM_HALT);
163         migrate_to_reboot_cpu();
164         syscore_shutdown();
165         pr_emerg("System halted\n");
166         kmsg_dump(KMSG_DUMP_HALT);
167         machine_halt();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23720654

复制
相关文章

相似问题

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