Linux hibernate的简单过程

本文概述了Linux系统休眠(hibernate)的过程,重点在于CPU的操作。休眠过程涉及`kernel/power/hibernate.c`中的函数,包括`disable_nonboot_cpus`,通过`__cpu_disable`和`__cpu_die`等步骤来关闭非启动CPU,保存并恢复处理器状态。软件恢复阶段由`hibernation_restore`驱动,调用`resume_target_kernel`和`swsusp_arch_resume`进行恢复操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天应上级只要求,survey一下Linux的hibernate,侧重于CPU的operation。

 

有一份PPT可以参考,可惜不能下载,链接是:

http://www.slideshare.net/varunmahajan06/hibernation-linux-2629

进去之后,如果有问题,那你自己在网站中search“Linux Hibernate”这2个关键字,就能找到。

 

 

另外,我整理出了一个简单的代码树,供大家参考。


hibernate    (kernel/power/hibernate.c)
    |- hibernation_snapshot
    |    |- create_images
    |        |- disable_nonboot_cpus        (kernel/cpu.c)
    |        |    |- _cpu_down
    |        |    |    |- take_cpu_down
    |        |    |    |    |- __cpu_disable    (arch/x86/include/asm/smp.h)    // Ensure this CPU doesn't handle any more interrupts
    |        |    |    |        |- native_cpu_disable    (arch/x86/kernel/Smpboot.c)
    |        |    |    |- __cpu_die    (arch/x86/include/asm/smp.h)    // This actually kills the CPU
    |        |    |        |- native_cpu_die    (arch/x86/kernel/Smpboot.c)
    |        |    |
    |        |    |- cpumask_set_cpu    (include/linux/cpumask.h)
    |        |   
    |        |- in_suspend = 1;
    |        |
    |        |- save_processor_state        (arch/x86/power/cpu.c)
    |        |    |- __save_processor_state
    |        |
    |        |- swsusp_arch_suspend    (arch/x86/power/hibernate_asm_32.S)
    |        |    |- swsusp_save    (kernel/power/snapshot.c)
    |        |
    |        |- restore_processor_state    (arch/x86/power/cpu.c)
    |        |
    |        |- enable_nonboot_cpus        (kernel/cpu.c)
    |
    |-     if (in_suspend)
        {
            swsusp_write;
            power_down;
            in_suspend = 0;
        }

   

   
software_resume    (kernel/power/hibernate.c)
    |- hibernation_restore        // If successful, control returns after hibernation_snapshot->create_images->swsusp_arch_suspend
        |- resume_target_kernel
            |- disable_nonboot_cpus        (kernel/cpu.c)
            |- swsusp_arch_resume        (arch/x86/power/Hibernate_32.c)   
            |    |- restore_image    (arch/x86/power/hibernate_asm_32.S)
            |- // The code below is only ever reached in case of a failure.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值