转自:http://blog.csdn.net/haomcu/article/details/7398703

系统挂起(Suspend)是电源管理(APM&ACPI)的一个特性,给用户带来了很大的方便。Linux在2.6系列核心中对电源管理有了较好的支持,下面就谈谈Linux对系统挂起的支持情况。

另外有一篇介绍android和linux内核对电源管理的支持的比较,代码级别的:Linux Kernel and Android 休眠与唤醒(中文版)

一个网址是http://blog.csdn.net/hellolwl/article/details/6271207

Linux对系统挂起的支持

Linux同时提供了对APM和ACPI的支持,当时两者是不兼容的,同一时刻只能有一种机制工作。由于ACPI的优越性,所以现在Linux将ACPI设为缺省的电源管理方案。对于一些比较旧的主板,如果其BIOS中ACPI的实现在2000年以前,那么Linux自动启用APM(可以通过核心命令行参数acpi=force来强制启用ACPI)。如果你下主板BIOS中对ACPI的支持有些问题导致Linux工作不正常,那么还可以使用核心命令行参数acpi=off来强制禁用ACPI,这样Linux会自动启用APM电源管理。

Linux现在主要支持三种ACPI的节电方式:

S1:Stopgrant,即待机(standby)模式。显示屏自动断电,只是主机通电。这时敲任意键即可恢复原来状态。
S2 S3:STR(Suspend To Ram),即挂起到内存。系统把当前信息储存在内存中,只有内存等几个关键部件通电,这时计算机处在高度节电状态。此时系统不能从键盘唤醒。手工唤醒的方法只能是按前面板上的电源按钮。唤醒后,计算机从内存中读取信息很快恢复到原来状态。
S4:STD(Suspend To Disk),即挂起到硬盘,也即休眠。计算机自动关机,关机前将当前数据存储在硬盘上,用户下次按开关键开机时计算机将无须启动操作系统,直接从硬盘读取数据,恢复原来状态。

在Linux下查看核心支持ACPI情况的方法如下:

2.4核心下:
# cat /proc/acpi/sleep
S0 S1 S3 S4 S5
2.6核心下:
# cat /sys/power/state
standby mem disk

上面的输出可知,我们系统中核心同时支持三种节电模式。

在/sys/power目录下还有一个文件:disk,文件的内容可以如下:

shutdown: 将系统状态保存到磁盘,让BIOS关闭计算机;
platform: 将系统状态保存到磁盘,让BIOS关闭计算机,并且点亮挂起指示灯;
firmware:
让BIOS自己将系统状态保存,并且关闭计算机,需要BIOS自己有挂起磁盘。大部分工作都由BIOS完成,对操作系统是透明的;
进入这三种节电模式的方法如下:
#echo  standby > /sys/power/state ---->挂起(S1)
#echo mem > /sys/power/state ---->挂起到内存(S3)
#echo shutdown > /sys/power/disk; echo disk >
/sys/power/state ---->挂起到磁盘(S4)
#echo platform > /sys/power/disk; echo disk >
/sys/power/state

Linux下的磁盘挂起(STD)是通过swsusp机制实现的:将系统当前状态保存的内存后,再把内存内容写入交换分区(swap)。这里要求交换分区容量最好大于内存容量。系统挂起到磁盘后,下次启动的时候需要向核心传递命令行参数resume=/dev/hdaX(/dev/hdaX是系统中的交换分区),这样系统就能够很快恢复到关机时的状态。

还有一个非正式的核心补丁可以实现STD:Software Suspend 2。该项目是一个快速发展的项目,设计上教swsusp有一些优势,但是还没有集成到核心正式发布中,实现方式与swsusp基本相同。

虽然Linux提供了系统挂起的机制,但是执行上面的挂起操作不一定能够成功。一方面,这些操作除了需要BIOS支持以外,还需要外围硬件设备能够兼容,即设备支持节电状态,支持从节电状态或断电状态恢复;另一方面,这些设备驱动必须能够接收电源管理指令。目前,系统挂起的主要障碍就是那些还不太完善的驱动程序,如USB、显卡、声卡驱动等。

当然,现在Linux核心对系统挂起的支持还有待改进,主要表现在:

  1. 不支持SMP系统。
  2. 不支持大内存(>4G)。
  3. 核心中许多模块需要增加电源管理的支持。
  4. 缺少上层配置程序。

不过可以放心,所有的问题内核黑客们都能够解决!

参考阅读:

  1. http://www.acpi.info:ACPI的官方网站,在上面可以免费获得最新的ACPI规范。
  2. http://acpi.sourceforge.net:Linux下支持ACPI项目网站。官方Linux内核中ACPI的版本实际上已经远远落后于最新的版本,因为linux稳定版中对任何新特性的加入都是非常小心谨慎的。你可以从这里下载最新的ACPI补丁。
  3. Linux核心源代码目录:Documentation/power/,里面有开发人员写的一些关于电源管理在Linux上实现的文档。
  4. http://www.suspend2.net:Software Suspend 2的官方网站,STD的另一个解决方案。

linux系统的休眠与唤醒简介的更多相关文章

  1. android 系统的休眠与唤醒+linux 系统休眠

    Android休眠与唤醒驱动流程分析 标准Linux休眠过程: powermanagement notifiers are executed with PM_SUSPEND_PREPARE tasks ...

  2. 1.Linux电源管理-休眠与唤醒

    1.休眠方式 在内核中,休眠方式有很多种,可以通过下面命令查看 # cat /sys/power/state //来得到内核支持哪几种休眠方式. 常用的休眠方式有freeze,standby, mem ...

  3. 1.Linux电源管理-休眠与唤醒【转】

    转自:https://www.cnblogs.com/lifexy/p/9629699.html 1.休眠方式 在内核中,休眠方式有很多种,可以通过下面命令查看 # cat /sys/power/st ...

  4. Linux 系统库函数coreleft 与sbrk简介

    coreleft   函数名: coreleft 功 能: 返回未使用内存的大小 用 法: unsigned coreleft(void); 程序例: #include <stdio.h> ...

  5. linux驱动程序之电源管理之标准linux休眠与唤醒机制分析(一)

    1. Based on linux2.6.32,  only for mem(SDR) 2. 有兴趣请先参考阅读: 电源管理方案APM和ACPI比较.doc Linux系统的休眠与唤醒简介.doc 3 ...

  6. linux驱动程序之电源管理 之linux休眠与唤醒(2)

    在Linux中,休眠主要分三个主要的步骤:(1)冻结用户态进程和内核态任务:(2)调用注册的设备的suspend的回调函数:(3)按照注册顺序休眠核心设备和使CPU进入休眠态.       冻结进程是 ...

  7. 第1章 Linux系统简介

    第1节 UNIX发展历史和发行版本 1. UNIX与Linux发展史 1.1 UNIX发展历史 (1)1965年,美国麻省理工学院(MIT).通用电气公司(GE)及AT&T的贝尔实验室联合开发 ...

  8. Linux基础学习(1)--Linux系统简介

    第一章——Linux系统简介 1.UNIX和Linux发展史: 1.1 unix发展史: (1)1965年,美国麻省理工学院(MIT).通用电气公司(GE)及AT&T的贝尔实验室联合开发Mul ...

  9. Linux学习笔记-Linux系统简介

    Linux学习笔记-Linux系统简介 UNIX与Linux发展史 UNIX是父亲,Linux是儿子. UNIX发行版本 操作系统 公司 硬件平台 AIX IBM PowerPC HP-UX HP P ...

随机推荐

  1. 【BZOJ1064】【NOI2008】假面舞会(图论,搜索)

    题面 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一个自己喜欢的面 具.每个面具都有一个编号 ...

  2. CPP相关的常见错误(更新ing)

    01.只允许在C99模式下使用 for 循环初始化申明 解决:指定下即可 gcc -o xxx -std=c99 02.

  3. A1022. Digital Library

    A Digital Library contains millions of books, stored according to their titles, authors, key words o ...

  4. 7.STL

    一.什么是STL  STL是standart template library,标准模板库.  是HP实验室开发的一系列软件的统称,从根本上来说,它是一些容器和算法的集合,它是世界上很多最聪明的程序员 ...

  5. terminal下历史命令自动完成功能history auto complete

    CentOS下,有一个很智能的功能,就是只输入一条历史命令的前几个字母,再按PageUp和PageDown键,就可以在以此字母为前缀的历史命令中上下切换.这个功能非常实用,而且比CTRL+R使用起来更 ...

  6. JQ版本对比

    JQ不知不觉来到第三版了,那么它们有什么不同呢? 下面先给大家推一个CDN加速的网站,上面有各种JQ的版本:http://www.bootcdn.cn/jquery/ 先来对比一下它们的“体重”,23 ...

  7. Hibernate_事务管理

    今天学习Hibernate,发现当我在执行下面操作时,不会对数据库产生任何效果,就是说Customer对象并不会保存到数据库中 Session session = HibernateUtils.ope ...

  8. Scala进阶之路-Scala中的高级类型

    Scala进阶之路-Scala中的高级类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类型(Type)与类(Class)的区别 在Java里,一直到jdk1.5之前,我们说 ...

  9. c# 打印 bartender

    参考: 官网  https://www.seagullscientific.com/label-software/barcode-label-design-and-printing 文章 http:/ ...

  10. PHP 日志专题

    PHP堆栈跟踪(php stack trace) PHP message: PHP Stack trace: PHP message: PHP . {main}() PHP message: PHP ...