linux系统的休眠与唤醒简介

转载 2012年03月27日 14:07:42

系统挂起(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下休眠/待机命令

if you # cat /sys/power/state mem disk you can echo “mem” > /sys/power/state 这相当于待机 echo “disk”...

标准linux休眠和唤醒机制分析

标准linux休眠和唤醒机制分析 标准linux休眠和唤醒机制分析(一) 说明: 1. Based on linux2.6.32, only for mem(SDR) 2. 有兴趣请先参考...

Netlink Socket

Netlink Socket  简介关键字: netlink 简介Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目...

应用层创建socket,内核模块通过该socket发送数据包

关于netlink,相信玩过上层开发的人并不陌生,尤其是经常穿梭于用户空间和内核之间的开发,前面我们说过在用户空间与内核空间的交互有ioctl 、proc 等,而netlink又有它独特的地位和作用....
  • hwyfy
  • hwyfy
  • 2014-01-15 00:21
  • 904

ath10 移植记录

mac80211和fix说明: http://blog.csdn.net/suiyuan19840208/article/details/44021591 https://dev.openwrt.or...

Netlink实例----用户态内核态全包含

/*  * netlink_kernel.c  */ #ifndef __KERNEL__ #define __KERNEL__ #endif #ifndef MODULE #def...
  • hwyfy
  • hwyfy
  • 2014-01-15 14:48
  • 572

linux中断处理------顶半部与底半部

转自http://my.oschina.net/fzliu/blog/33028 尽管有些设备仅通过它们的I/O寄存器就可以得到控制,但现实中的大部分设备却比这复杂一些。设备需要与外部世界打交道...
  • HAOMCU
  • HAOMCU
  • 2012-11-07 09:11
  • 7456

netlink---Linux下基于socket的内核和上层通信机制(上)

目录(?)[+] 我最近有一个项目需求,需要在linux网卡驱动中加入一个自己的驱动,实现在内核态完成一些报文处理(这个过程可以实现一种零COPY的网络报文截获),对于复杂报文C...

linux netlink机制介绍与实例

开发和维护内核是一件很繁杂的工作,因此,只有那些最重要或者与系统性能息息相关的代码才将其安排在内核中。其它程序,比如GUI,管理以及控制部分的代码,一般都会作为用户态程序。在linux系统中,把系统的...

Linux 系统内核空间与用户空间通信的实现与分析

开心网  新浪微博  搜狐博客  百度收藏  谷歌收藏  qq书签  豆瓣  淘江湖  Facebook  Twitter  Digg  Yahoo!Bookmarks...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)