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

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

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

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

说明:

1.Based on linux

2.6.32,only for mem(SDR)

2.有兴趣请先参考阅读:电源管理方案APM和ACPI比较.doc

Linux系统的休眠与唤醒简介.doc

3.本文先研究标准linux的休眠与唤醒,android对这部分的增改在另一篇文章中讨论

4.基于手上的一个项目来讨论,这里只讨论共性的地方

虽然linux支持三种省电模式:standby、suspend to ram、suspend to disk,但是在使用电池供电的手持设备上,几乎所有的方案都只支持STR模式(也有同时支持standby模式的),因为STD模式需要有交换分区的支持,但是像手机类的嵌入式设备,他们普遍使用nand 来存储数据和代码,而且其上使用的文件系统yaffs一般都没有划分交换分区,所以手机类设备上的linux都没有支持STD省电模式。

一、项目power相关的配置

目前我手上的项目的linux电源管理方案配置如下,.config文件的截图,当然也可以通过make menuconfig使用图形化来配置:

#

#CPU Power Management

#

#CONFIG_CPU_IDLE is not set

#

#Power management options

#

CONFIG_PM=y

#CONFIG_PM_DEBUG is not set

CONFIG_PM_SLEEP=y

CONFIG_SUSPEND=y

CONFIG_SUSPEND_FREEZER=y

CONFIG_HAS_WAKELOCK=y

CONFIG_HAS_EARLYSUSPEND=y

CONFIG_WAKELOCK=y

CONFIG_WAKELOCK_STAT=y

CONFIG_USER_WAKELOCK=y

CONFIG_EARLYSUSPEND=y

#CONFIG_NO_USER_SPACE_SCREEN_ACCESS_CONTROL is not set

#CONFIG_CONSOLE_EARLYSUSPEND is not set

CONFIG_FB_EARLYSUSPEND=y

#CONFIG_APM_EMULATION is not set

#CONFIG_PM_RUNTIME is not set

CONFIG_ARCH_SUSPEND_POSSIBLE=y

CONFIG_NET=y

上面的配置对应下图中的下半部分图形化配置。。。,看来是直接在Kconfig文件中删除了配置STD模式的选项。

使用上面的配置编译出来的系统,跑起来之后,进入sys目录可以看到相关的接口:#pwd

/sys/power

#ls

state wake_lock wake_unlock wait_for_fb_sleep wait_for_fb_wake

#cat state

mem

如果配置了宏CONFIG_PM_DEBUG,那么在power目录下会多出一个pm_test文件,cat pm_test后,列出的测试选项有:[none]core processors platform devices freezer。关于这个test模式的使用,可以参考kernel文档:

/kernel/documentation/power/Basic-pm-debugging.txt

这个文档我也有详细的阅读和分析。

二、sys/power和相关属性文件创建

系统bootup时候在sys下新建power和相关属性文件,相关源码位置:

kernel/kernel/power/main.c

static int__init pm_init(void)

{

int error=pm_start_workqueue();//CONFIG_PM_RUNTIME not set,so this fun is null

if(error)

return error;

power_kobj=kobject_create_and_add("power",NULL);

//建立power对应的kobject和sysfs_dirent对象,同时建立联系:kobject.sd=

//&sysfs_dirent,sysfs_dirent.s_dir->kobj=&kobject。

if(!power_kobj)

return-ENOMEM;

return sysfs_create_group(power_kobj,&attr_group);

//建立一组属性文件,可以在power下建立一个子目录来存放这些属性文件,//不过需要在结构体attr_group中指定name,否则直接将这些属性文件放在//power_kobj对应的目录下。

}

core_initcall(pm_init);//看的出来,该函数是很早就被调用,initcall等级为1

static struct attribute_group attr_group={

.attrs=g,

};

struct attribute_group{

const char*name;

mode_t(*is_visible)(struct kobject*,

struct attribute*,int);

struct attribute**attrs;

};

//属性文件都是以最基本得属性结构struct attribute来建立的

static struct attribute*g[]={

&state_attr.attr,

#ifdef CONFIG_PM_TRACE//not set

&pm_trace_attr.attr,

#endif

#if defined(CONFIG_PM_SLEEP)&&defined(CONFIG_PM_DEBUG)//not set

&pm_test_attr.attr,

#endif

#ifdef CONFIG_USER_WAKELOCK//set &wake_lock_attr.attr,

&wake_unlock_attr.attr,

#endif

NULL,

};

#ifdef CONFIG_PM_SLEEP

#ifdef CONFIG_PM_DEBUG

power_attr(pm_test);

#endif

#endif

power_attr(state);

#ifdef CONFIG_PM_TRACE

power_attr(pm_trace);

#endif

#ifdef CONFIG_USER_WAKELOCK power_attr(wake_lock);

power_attr(wake_unlock);

#endif

#define power_attr(_name)\

static struct kobj_attribute_name##_attr={\

.attr={\

.name=__stringify(_name),\

.mode=0644,\

},\

.show=_name##_show,\

.store=_name##_store,\

}

//而这些被封装过的属性结构体,将来会使用kobject的ktype.sysfs_ops->show(store)这两个通用函数通过container_of()宏找到实际的属性结构体中的show和store函数来调用。

关于更多sysfs的内容,请查看其他关于这部分内容的详细解析文档。

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

三、pm_test属性文件读写

int pm_test_level=TEST_NONE;

static const char*const pm_tests[__TEST_AFTER_LAST]={

[TEST_NONE]="none",

[TEST_CORE]="core",

[TEST_CPUS]="processors",

[TEST_PLATFORM]="platform",

[TEST_DEVICES]="devices",

[TEST_FREEZER]="freezer",

};

//core>>processors>>platform>>devices>>freezer,控制范围示意

cat pm_test的时候最终会调用函数pm_test_show(),在终端上打印出上面数组中的字符串,当前的模式用[]表示出来。

echo devices>pm_test的时候会最终调用到函数pm_test_store()中去,该函数中设置全局变量pm_test_level的值,可以是0-5,分别代表上none~freezer。该全局变量会在后面的suspend和resume中被引用到。

memchr函数说明:

原型:extern void*memchr(void*buf,char ch,unsigned int count);

用法:#include

功能:从buf所指内存区域的前count个字节查找字符ch。

说明:当第一次遇到字符ch时停止查找。如果成功,返回指向字符ch的指针;否则返回NULL。

四、state属性文件

power_attr(state)宏定义了一个struct kobj_attribute结构体state_attr:

static struct kobj_attribute state_attr={

.attr={

.name=__stringify(state),

.mode=0644,

},

.show=state_show,

.store=state_store,

}

kobj_attribute结构体封装了struct attribute结构体,新建属性文件是依据struct attribute结构体。最终通过函数kobj_attr_show和kobj_attr_store回调到实际的show和store函数(kobject.c)。

state_show()函数主要是显示当前系统支持哪几种省电模式。

static ssize_t state_show(struct kobject*kobj,struct kobj_attribute*attr,char*buf)

{

char*s=buf;

#ifdef CONFIG_SUSPEND//def

int i;

for(i=0;i

if(pm_states[i]&&valid_state(i))

s+=sprintf(s,"%s",pm_states[i]);

}

#endif

#ifdef CONFIG_HIBERNATION//undef,don't support STD mode

s+=sprintf(s,"%s\n","disk");

#else

if(s!=buf)

/*convert the last space to a newline*/

*(s-1)='\n';

#endif

return(s-buf);

}

@kernel/include/linux/suspend.h

#define PM_SUSPEND_ON((__force suspend_state_t)0)

#define PM_SUSPEND_STANDBY((__force suspend_state_t)1)

#define PM_SUSPEND_MEM((__force suspend_state_t)3)

#define PM_SUSPEND_DISK((__force suspend_state_t)4)

#define PM_SUSPEND_MAX((__force suspend_state_t)5)

@kernel/kernel/power/suspend.c

const char*const pm_states[PM_SUSPEND_MAX]={

#ifdef CONFIG_EARLYSUSPEND//android修改了标准linux的休眠唤醒机制,增加了eraly suspend和late resume机制,如果是android内核,则这个宏是需要定义的。

[PM_SUSPEND_ON]="on",

#endif

[PM_SUSPEND_STANDBY]="standby",

[PM_SUSPEND_MEM]="mem",

};

该函数中值得注意的地方应该是valid_state(i),这个函数是用户配置的支持省电模式的验证函数,如果没有这个验证过程,cat时候打印出来的模式则是on standby mem,给上层用户的使用造成困扰。

那这个valid_state()函数在哪里定义的呢?一般定义于文件kernel/kernel/power/suspend.c

static struct platform_suspend_ops*suspend_ops;

void suspend_set_ops(struct platform_suspend_ops*ops)//该函数调用见后面

{

mutex_lock(&pm_mutex);

suspend_ops=ops;

mutex_unlock(&pm_mutex);

}

bool valid_state(suspend_state_t state)

{

return suspend_ops&&suspend_ops->valid&&suspend_ops->valid(state);

}

而实际平台的platform_suspend_ops结构体一般都是在文件arch/arm/mach-xxxx/pm.c中进行定义,对于mtk的平台是文件mtkpm.c,如下:

@kernel/include/linux/suspend.h

struct platform_suspend_ops{

int(*valid)(suspend_state_t state);

int(*begin)(suspend_state_t state);

int(*prepare)(void);

int(*prepare_late)(void);

int(*enter)(suspend_state_t state);

void(*wake)(void);

void(*finish)(void);

void(*end)(void);

void(*recover)(void);

};

经过后面的代码分析,得出了如下结论:

休眠唤醒过程依次会执行的函数是:begin,prepare,prepare_late,enter,wake,finish,end。同颜色的函数执行了恰好相反的工作。休眠的时候代码执行是停留在函数enter中,wake之后也是从suspend的时候停留的地方继续运行。

至于recover函数貌似只有在pm_test处于devices的模式下,才会被调用到。

@kernel/arch/arm/mach-mt6516/mtkpm.c

static struct platform_suspend_ops mtk_pm_ops={

.valid=mtk_pm_state_valid,

.begin=mtk_pm_begin,

.prepare=mtk_pm_prepare,

.enter=mtk_pm_enter,

.finish=mtk_pm_finish,

.end=mtk_pm_end,

};

static int mtk_pm_state_valid(suspend_state_t pm_state)

{

return pm_state==PM_SUSPEND_MEM;

}

void mtk_pm_init(void)

{

_Chip_PM_init();

/*Register and set suspend operation*/

suspend_set_ops(&mtk_pm_ops);

}

而函数mtk_pm_init()是在函数mt6516_init_irq()中调用。可以看出该平台只支持mem的省电模式。

state_store()函数:

static ssize_t state_store(struct kobject*kobj,struct kobj_attribute*attr,

const char*buf,size_t n)

{

#ifdef CONFIG_SUSPEND//set

#ifdef CONFIG_EARLYSUSPEND//对标准linux而言,这个宏不存在

suspend_state_t state=PM_SUSPEND_ON;

#else

suspend_state_t state=PM_SUSPEND_STANDBY;

#endif

const char*const*s;

#endif

char*p;

int len;

int error=-EINVAL;

p=memchr(buf,'\n',n);

len=p?p-buf:n;

/*First,check if we are requested to hibernate*/

if(len==4&&!strncmp(buf,"disk",len)){

error=hibernate();//如果值是disk,那么进入STD模式,该模式暂不讨论goto Exit;

}

#ifdef CONFIG_SUSPEND//def

for(s=&pm_states[state];state

if(*s&&len==strlen(*s)&&!strncmp(buf,*s,len))

break;

}

if(state

#ifdef CONFIG_EARLYSUSPEND

//android的linux内核会定义该宏,首先进入eraly suspend模式

if(state==PM_SUSPEND_ON||valid_state(state)){

error=0;

request_suspend_state(state);

}

#else//标准linux内核直接enter_state()函数

error=enter_state(state);//kernel/kernel/power/suspend.c

#endif

#endif

Exit:

return error?error:n;

}

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

五、suspend和resume代码走读

下面对suspend分的几个阶段都是按照pm test的5中模式来划分的:freezer、devices、platform、processors、core。

suspend第一阶段:freezer

int enter_state(suspend_state_t state)

{

int error;

if(!valid_state(state))

return-ENODEV;

if(!mutex_trylock(&pm_mutex))//def in kernel/kernel/power/main.c

return-EBUSY;

printk(KERN_INFO"PM:Syncing filesystems...");

sys_sync();

printk("done.\n");//同步文件系统

pr_debug("PM:Preparing system for%s sleep\n",pm_states[state]);

error=suspend_prepare();

//suspend前准备工作:Run suspend notifiers,allocate a console and stop all processes if(error)//如果一些准备工作失败,通常为冻结进程的时候某些进程拒绝进入冻结模式goto Unlock;//释放锁,然后退出

if(suspend_test(TEST_FREEZER))

//检查上层下达的命令是否是:

//echo freezer>/sys/power/pm_test

//echo mem>/sys/power/state

//是的话,延时5s后,然后做一些解冻进程等工作就返回

goto Finish;

pr_debug("PM:Entering%s sleep\n",pm_states[state]);

error=suspend_devices_and_enter(state);//休眠外设

Finish:

pr_debug("PM:Finishing wakeup.\n");

suspend_finish();//解冻进程,发广播通知等

Unlock:

mutex_unlock(&pm_mutex);

return error;

}

static int suspend_prepare(void)

{

int error;

if(!suspend_ops||!suspend_ops->enter)//mtk_pm_enter()in mtkpm.c

return-EPERM;

pm_prepare_console();//给suspend分配一个虚拟终端来输出信息

error=pm_notifier_call_chain(PM_SUSPEND_PREPARE);

//广播一个通知给通知链pm_chain_head,该通知链上都是用函数register_pm_notifier()注册的pm通知项(也可以用宏pm_notifier定义和注册),这里按照注册时候的定义的优先级来调用该通知链上注册的回调函数。

//PM_SUSPEND_PREPARE是事件值,表示将要进入suspend

if(error)

goto Finish;

error=usermodehelper_disable();//关闭用户态的helper进程

if(error)

goto Finish;

error=suspend_freeze_processes();

//冻结所有的进程,这里会保存所有进程当前的状态。

if(!error)

return0;

//也许有一些进程会拒绝进入冻结状态,当有这样的进程存在的时候,会导致冻结失败,此函数就会放弃冻结进程,并且解冻刚才冻结的所有进程.

suspend_thaw_processes();//进程解冻

usermodehelper_enable();//enable helper process

Finish:

pm_notifier_call_chain(PM_POST_SUSPEND);//广播退出suspend的通知

pm_restore_console();

return error;

}

//如果不支持pm debug的话,该函数直接返回0

static int suspend_test(int level)

{

#ifdef CONFIG_PM_DEBUG

if(pm_test_level==level){

printk(KERN_INFO"suspend debug:Waiting for5seconds.\n");

mdelay(5000);

return1;

}

#endif/*!CONFIG_PM_DEBUG*/

return0;

}

static void suspend_finish(void)

{

suspend_thaw_processes();

usermodehelper_enable();

pm_notifier_call_chain(PM_POST_SUSPEND);

pm_restore_console();

}

同步文件系统函数sys_sync()调用后,将会执行函数suspend_prepare()来做一些进入suspend之前的准备工作:Run suspend notifiers,allocate a console and stop all processes,disable user mode hleper process。之后将会调用

suspend_test(TEST_FREEZER)来判断上层是否有下这样的命令下来:echo freezer>

/sys/power/pm_test(如果pm debug支持),如果没有下这个命令或者系统根本就不支持pm debug,那么直接返回0。如果该测试函数返回了1,那么就不会继续往下走suspend的流程了,而是调用函数suspend_finish()来结束freezer模式的pm test。返回0,将会进入第二阶段继续suspend的流程。

suspend第二阶段:devices

后续所有对suspend划分的阶段都包含在函数suspend_devices_and_enter(state)之中,所以这个函数是关键所在。

int suspend_devices_and_enter(suspend_state_t state)

{

int error;

if(!suspend_ops)

//一个重要的函数指针结构体,特定平台的不一样,

//kernel/arch/arm/mach-mt6516/mtkpm.c

return-ENOSYS;

if(suspend_ops->begin){

error=suspend_ops->begin(state);

//调用特定平台实现的suspend_begin函数,

//这里没做什么实际的工作,打印了点字符串

if(error)

goto Close;//如果有错,执行特定平台的suspend_end函数

}

suspend_console();//suspend console subsystem

suspend_test_start();//suspend devices超时警告测试

error=dpm_suspend_start(PMSG_SUSPEND);//suspend all devices,外设休眠

//关键函数之一,kernel/drivers/base/power/main.c

if(error){

printk(KERN_ERR"PM:Some devices failed to suspend\n");

goto Recover_platform;//如果外设休眠过程出现错误,将会终止suspend过程,直接跳到某标签出resume外设

}

suspend_test_finish("suspend devices");

if(suspend_test(TEST_DEVICES))//suspend第二阶段以此为界

goto Recover_platform;

suspend_enter(state);//关键函数之一,pm test的后三种模式都在该函数中进行测试:platform、cpus、core

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

标准linux休眠和唤醒机制分析 说明: 1. Based on linux 2.6.32, only for mem(SDR) 2. 有兴趣请先参考阅读:电源管理方案APM和ACPI比较.doc Linux系统的休眠与唤醒简介.doc 3. 本文先研究标准linux的休眠与唤醒,android对这部分的增改在另一篇文章中讨论 4. 基于手上的一个项目来讨论,这里只讨论共性的地方 虽然linux支持三种省电模式:standby、suspend to ram、suspend to disk,但是在使用电池供电的手持设备上,几乎所有的方案都只支持STR模式(也有同时支持standby模式的),因为STD模式需要有交换分区的支持,但是像手机类的嵌入式设备,他们普遍使用nand 来存储数据和代码,而且其上使用的文件系统yaffs一般都没有划分交换分区,所以手机类设备上的linux都没有支持STD省电模式。 一、项目power相关的配置 目前我手上的项目的linux电源管理方案配置如下,.config文件的截图,当然也可以通过make menuconfig使用图形化来配置: # # CPU Power Management # # CONFIG_CPU_IDLE is not set # # Power management options

# CONFIG_PM=y # CONFIG_PM_DEBUG is not set CONFIG_PM_SLEEP=y CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y CONFIG_HAS_WAKELOCK=y CONFIG_HAS_EARLYSUSPEND=y CONFIG_WAKELOCK=y CONFIG_WAKELOCK_STAT=y CONFIG_USER_WAKELOCK=y CONFIG_EARLYSUSPEND=y # CONFIG_NO_USER_SPACE_SCREEN_ACCESS_CONTROL is not set # CONFIG_CONSOLE_EARLYSUSPEND is not set CONFIG_FB_EARLYSUSPEND=y # CONFIG_APM_EMULATION is not set # CONFIG_PM_RUNTIME is not set CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_NET=y 上面的配置对应下图中的下半部分图形化配置。。。,看来是直接在Kconfig文件中删除了配置STD模式的选项。

电脑怎么唤醒休眠

电脑怎么唤醒休眠 ?浏览:2 ?| ?更新:2013-04-24 16:49 1有用+1 已投票 0收藏+1 已收藏 如果电脑休眠后无法唤醒,那是因为唤醒条件不满足,主要原因有以下几种: 1.键盘或鼠标所使用的中断没有被设置成可用于唤醒,解决的方法是进入BIOS的“Power Management Setup”设置界面,将“PM Events”选项下的相关设备的IRQ唤醒功能都打开,即设置IRQ3、IRQ4、IRQ5、IRQ6、IRQ12、IRQ14和IRQ15为“Enabled”。 2.设备驱动程序发生冲突,建议卸载老的驱动程序;驱动程序与所安装的硬件不兼容,请更换或升级驱动程序。 3.主板BIOS版本较老,可下载新版本的BIOS文件,并对主板BIOS进行刷新升级。 4.操作系统存在问题,或许安装补丁程序可以解决问题。 5.如果休眠后时间稍微长一点就不能唤醒,则很可能是CPU风扇停转,而CPU又未按要求进入对应的休眠模式,引起CPU温度过高,从而导致电脑无法正常工作。这种现象大多发生在对CPU温度和CPU风扇有监控功能的电脑系统中。这是因为你的电脑主板bios启用了高级电源管理功能,同时windows系统也启用了高级电源管理功能,两者发生冲突造成死机。解决方法如下: 开机或重启电脑,按DEL键进入bios,找到“power managemant features”回车进入,把里面参数设置为“on”的项全部设置为“off”,按ESC返回上级界面,选择Save&exit step(保存设置),当然直接按F10也可以. 按Y回车.电脑自动重起登陆系统.问题解决。供参考. 下面根据不同的BIOS列出相应的设置方法: 1、首先进入Power Management Setup(电源管理设定)→Power Again(再来电状态),此项决定了开机时意外断电之后,电力供应恢复时系统电源的状态。设定值有: Power Off(保持系统处于关机状态) Power On(保持系统处于开机状态) Last State(恢复到系统断电前的状态)进入挂起/睡眠模式,但若按钮被揿下超过4秒,机器关机。把这个选项改成power off就行了! 2、首先进入BIOS的设置主界面,选择[POWER MANAGEMENT SETUP],再选择[PWR Lost Resume State],这一项有三个选择项。选择[Keep OFF]项,代表停电后再来电时,电脑不会自动启动。选择[Turn On]项,代表停电后再来电时,电脑会自动启动。选择的[Last State],那么代表停电后再来电时,电脑恢复到停电前电脑的状态。断电前如果电脑是处于开机状态,那么来电后就会自动开机。断电前是处于关机状态,那么来电后电脑不会自动开机。 3、有的BIOS中[POWER MANAGEMENT SETUP]没有上面说的[PWR Lost Resume State],可以在[PWRON After PWR-Fail]→[Integrated Peripherals]选项中找到两个选项:ON(打开自动开机)和OFF(关闭自动开机),设置为OFF即可。不同的主板及BIOS型号相对应的选项会有所不同,但我想应该会差不多,一般都在[POWER MANAGEMENT SETUP]这个选项中可以找到相应的设置选项!

Linux+Kernel+and+Android+休眠与唤醒实现与优化

Linux Kernel and Android 休眠与唤醒(中文版) 四月 18th, 2010 0 Comments/1664 hits Table of Contents ?简介 ?国际化 ?版本信息 ?对于休眠(suspend)的简单介绍 ?Linux Suspend 的流程 o相关的文件: o准备, 冻结进程 o让外设进入休眠 o Resume ?Android 休眠(suspend) o涉及到的文件: o特性介绍 ?Early Suspend ?Late Resume ?Wake Lock o Android Suspend o Early Suspend o Late Resume o Wake Lock o Suspend o Android于标准Linux休眠的区别 简介 休眠/唤醒在嵌入式Linux中是非常重要的部分,嵌入式设备尽可能的进入休眠状态来延长电池的续航时间.这篇文章就详细介绍一下Linux中休眠/唤醒是如何工作的, 还有Android中如何把这部分和Linux的机制联系起来的. 国际化 ?English Version: link ?中文版: link 作者: zhangjiejing Date: 2010-04-07, https://www.360docs.net/doc/a31863791.html,

版本信息 ?Linux Kernel: v2.6.28 ?Android: v2.0 对于休眠(suspend)的简单介绍 在Linux中,休眠主要分三个主要的步骤: 1.冻结用户态进程和内核态任务 2.调用注册的设备的suspend的回调函数 o顺序是按照注册顺序 3.休眠核心设备和使CPU进入休眠态冻结进程是内核把进程列表中所有的 进程的状态都设置为停止,并且保存下所有进程的上下文. 当这些进程被 解冻的时候,他们是不知道自己被冻结过的,只是简单的继续执行.如何让 Linux进入休眠呢?用户可以通过读写sys文件/sys /power/state 是实 现控制系统进入休眠. 比如 命令系统进入休眠. 也可以使用 来得到内核支持哪几种休眠方式. Linux Suspend 的流程 相关的文件: 你可以通过访问Linux内核网站来得到源代码,下面是文件的路径: ?linux_soruce/kernel/power/main.c ?linux_source/kernel/arch/xxx/mach-xxx/pm.c ?linux_source/driver/base/power/main.c 接下来让我们详细的看一下Linux是怎么休眠/唤醒的. Let 's going to see how these happens.

电脑休眠和睡眠的区别

电脑休眠和睡眠的区别 Windows操作系统中很早就加入了待机、休眠等模式,而Windows Vista中更是新加入了一种叫做睡眠的模式,可是很多人还是习惯在不使用电脑的时候将其彻底关闭。下面由为你分享电脑休眠和睡眠的区别的相关内容,希望对大家有所帮助。 待机、休眠、睡眠介绍 电脑待机待机(Standby):将系统切换到该模式后,除了内存,电脑其他设备的供电都将中断,只有内存依靠电力维持着其中的数据(因为内存是易失性的,只要断电,数据就没有了)。这样当希望恢复的时候,就可以直接恢复到待机前状态。这种模式并非完全不耗电,因此如果在待机状态下供电发生异常(例如停电),那么下一次就只能重新开机,所以待机前未保存的数据都会丢失。但这种模式的恢复速度是最快的,一般五秒之内就可以恢复。 电脑休眠(Hibernate):将系统切换到该模式后,系统会自动将内存中的数据全部转存到硬盘上一个休眠文件中,然后切断对所有设备的供电。这样当恢复的时候,系统会从硬盘上将休眠文件的内容直接读入内存,并恢复到休眠之前的状态。这种模式完全不耗电,因此不怕休眠后供电异常,但代价是需要一块和物理内存一样大小的硬盘空间(好在现在的硬盘已经跨越TB级别了,大容量硬盘越来越便宜)。而这种模式的恢复速度较慢,取决于内存大小和硬盘速度,一般都要

1分钟左右,甚至更久。 电脑睡眠(Sleep):电脑睡眠是Windows Vista中的新模式,这种模式结合了待机和休眠的所有优点。将系统切换到睡眠状态后,系统会将内存中的数据全部转存到硬盘上的休眠文件中(这一点类似休眠),然后关闭除了内存外所有设备的供电,让内存中的数据依然维持着(这一点类似待机)。这样,当我们想要恢复的时候,如果在睡眠过程中供电没有发生过异常,就可以直接从内存中的数据恢复(类似待机),速度很快;但如果睡眠过程中供电异常,内存中的数据已经丢失了,还可以从硬盘上恢复(类似休眠),只是速度会慢一点。不过无论如何,这种模式都不会导致数据丢失。 正因为睡眠功能有这么多优点,因此Windows Vista开始菜单上的电源按钮默认就会将系统切换到睡眠模式。所以我们大可充分利用这一新功能,毕竟从睡眠状态下恢复,速度要比从头启动快很多。而且睡眠模式也不是一直进行下去的,如果系统进入睡眠模式一段时间后(具体时间可以设定)没有被唤醒,那么还会自动被转入休眠状态,并关闭对内存的供电,可以有效节约用电,以及提高电脑的硬件寿命。 怎么唤醒 2015-06-26 戴尔技术支持天津鼎升力创DELL 电脑闲置的时候,除了关机之外,用户还可以考虑将电脑设为休眠或睡眠状态。休眠睡眠区别和优点: 1:不需要关闭正在进行的工作,电脑唤醒后,所有打开的程序、

android的休眠和唤醒

android休眠与唤醒驱动流程分析 标准linux休眠过程: ●power management notifiers are executed with PM_SUSPEND_PREPARE ●tasks are frozen ●target system sleep state is announced to the platform-handling code ●devices are suspended ●platform-specific global suspend preparation methods are executed ●non-boot CPUs are taken off-line ●interrupts are disabled on the remaining (main) CPU ●late suspend of devices is carried out (一般有一些BUS driver的动作进行)? ●platform-specific global methods are invoked to put the system to sleep 标准linux唤醒过程: ●t he main CPU is switched to the appropriate mode, if necessary ●early resume of devices is carried out (一般有一些BUS driver的动作进行)? ●interrupts are enabled on the main CPU ●non-boot CPUs are enabled ●platform-specific global resume preparation methods are invoked ●devices are woken up ●tasks are thawed ●power management notifiers are executed with PM_POST_SUSPEND 用户可以通过sys文件系统控制系统进入休眠: 查看系统支持的休眠方式: #cat /sys/power/state 常见有standby(suspend to RAM)、mem(suspend to RAM)和disk(suspend to disk),只是standby耗电更多,返回到正常工作状态的时间更短。 通过#echo mem > /sys/power/state 让系统进入休眠。 Android休眠与唤醒 android是在传统的linux内核电源管理设计的基础上,结合手机设计的实际需求而进化出的一套电源管理系统,其核心内容有:wakelock 、early_suspend与late_resume。 wakelock在Android的电源管理系统中扮演一个核心的角色。wakelock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得。这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了,内核就会启动休眠的那套机制来进入休眠。 当系统在启动完毕后,会自己去加一把名为“main“的锁,而当系统有意愿去睡眠时则会先去释放这把“main”锁,在android中,在early_suspend的最后一步会去释放“main”锁(wake_unlock: main)。释放完后则会去检查是否还有其他存在的锁,如果没有则直接进入睡眠过程。 它的缺点是,如果有某一应用获锁而不释放或者因一直在执行某种操作而没时间来释放的话,则会导致系统一直进入不了睡眠状态,功耗过大。 early_suspend:先与linux内核的睡眠过程被调用。一般在手机系统的设计中对背光的操

Android休眠式快速开机设计讲座.doc

/ Android休眠式快速開機設計講座金融研訓院(台北市羅斯福路三段62號)/2011年9月9日/13:00-16:30 發票開立資料 公司抬頭統一編號 聯絡地址電話( ) 發票開立□兩聯式發票□三聯式發票團體報名是否 各別開立發票 □是□否 報名者資料 1 姓名部門職務 電話mail 2 姓名部門職務 電話mail Mail 3 姓名部門職務 電話mail 課程費用 □定價一人NT2,600元 9/1 (四)前報名享早鳥優惠價 □單人報名NT 2,200 ;□團體報名2人以上每人NT 2,000;□團體報名3人以上每人NT 1,800付款方式□ATM轉帳□匯款□支票□信用卡(請填寫信用卡授權單後傳真或MAIL) 付款資訊 .請於9/1(四) 前完成匯款 .戶名:遠播資訊股份有限公司 .銀行:國泰世華中山分行 .帳號:國泰世華013帳號042-03-500039-3匯款帳號末五碼匯款日期匯款金額 / / 課前問題 辦法希望講師說明之主題或問題(也可於報名後隨時來信提出) 問題填寫 零組件科技論壇VIP施行辦法 內容您是公司人事/教育訓練窗口嗎?可參加VIP計畫,取得同仁報名最低優惠價 勾選□我想參加VIP計畫,請寄合作方案給我□暫時不需要,謝謝□已參加聯絡人MAIL (請於此處填寫VIP合作方案寄送郵件地址) 報名注意事項 1.報名表填寫完畢請回寄至conny@https://www.360docs.net/doc/a31863791.html,或傳真(02)2585-5519 2.研討會前三天寄發上課通知單,收到方完成報名手續,未收到請電洽(02)2585-5526 # 335 蔡岡陵小姐2.手開三聯式發票,當日於上課報到處領取

怎样正确认识WINDOWS XP系统待机、休眠、睡眠

大家使用了这么长时间的Windows操作系统,应该早知道Windows操作系统中有待机、休眠等模式,而Windows 7中更是新加入了一种叫做睡眠的模式,可是很多人还是习惯在不使用电脑的时候将其彻底关闭。其实充分利用这些模式,我们不仅可以节约电力消耗,还可以用尽可能短的时间把系统恢复到正常工作状态。下面详细介绍下这三种模式的区别和优缺点 这三种模式的定义如下: 待机(Standby) 将系统切换到该模式后,除了内存,电脑其他设备的供电都将中断,只有内存依靠电力维持着其中的数据(因为内存是易失性的,只要断电,数据就没有了)。这样当希望恢复的时候,就可以直接恢复到待机前状态。这种模式并非完全不耗电,因此如果在待机状态下供电发生异常(例如停电),那么下一次就只能重新开机,所以待机前未保存的数据都会丢失。但这种模式的恢复速度是最快的,一般五秒之内就可以恢复。 休眠(Hibernate) 将系统切换到该模式后,系统会自动将内存中的数据全部转存到硬盘上一个休眠文件中,然后切断对所有设备的供电。这样当恢复的时候,系统会从硬盘上将休眠文件的内容直接读入内存,并恢复到休眠之前的状态。这种模式完全不耗电,因此不怕休眠后供电异常,但代价是需要一块和物理内存一样大小的硬盘空间 (好在现在的硬盘已经跨越TB级别了,大容量硬盘越来越便宜)。而这种模式的恢复速度较慢,取决于内存大小和硬盘速度,一般都要1分钟左右,甚至更久。 睡眠(Sleep) 是Windows Vista中的新模式,这种模式结合了待机和休眠的所有优点。将系统切换到睡眠状态后,系统会将内存中的数据全部转存到硬盘上的休眠文件中(这一点类似休眠),然后关闭除了内存外所有设备的供电,让内存中的数据依然维持着(这一点类似待机)。这样,当我们想要恢复的时候,如果在睡眠过程中供电没有发生过异常,就可以直接从内存中的数据恢复(类似待机),速度很快;但如果睡眠过程中供电异常,内存中的数据已经丢失了,还可以从硬盘上恢复(类似休眠),只是速度会慢一点。不过无论如何,这种模式都不会导致数据丢失。 正因为睡眠功能有这么多优点,因此Windows Vista开始菜单上的电源按钮默认就会将系统切换到睡眠模式。所以我们大可充分利用这一新功能,毕竟从睡眠状态下恢复,速度要比从头启动快很多。而且睡眠模式也不是一直进行下去的,如果系统进入睡眠模式一段时间后(具体时间可以设定)没有被唤醒,那么还会自动被转入休眠状态,并关闭对内存的供电,进一步节约能耗。

Win7小技巧:让电脑在休眠的状态下依然继续下载不间断

Win7技巧:让电脑在休眠的状态下依然继续下载不间断 摘要:如果你要下载资源的话,使用windows7操作系统的电脑用户,你只需对系统设置进行一些小小的改变就能让电脑在休眠的状态下依然继续下载不间断。下面我们就详细介绍操作步骤,帮助windows7系统用户实现这一节能目标。 喜欢在网上下载电影、电视剧观看的朋友也是越来越多,当然为了不影响自己的上网速度,很多人都选择在晚上临睡前打开下载任务,然后自己睡觉,电脑继续干活。有过这种下载经验的网友都会知道,想要让电脑下载不中断,就必须保证电脑不会进入休眠等待机状态,所以需要将Windows系统的电源管理手动调整到从不关闭的状态,这样才能确保电脑不休息,下载不中断。 但提倡环保的今天,这样做显然就是很不环保,浪费电同时电脑还会产生很多热量,因此现在应该改改自己的习惯了。windows7不仅性能比Windows XP和Vista 更高,节能方面也比老系统更出色。 如果你要下载资源的话,使用windows7操作系统的电脑用户,你只需对系统设置进行一些小小的改变就能让电脑在休眠的状态下依然继续下载不间断。下面我们就详细介绍操作步骤,帮助windows7系统用户实现这一节能目标。 首先需要打开注册表编辑器,在开始菜单处的搜索框中输入“regedit”然后回车打开注册表编辑器。 在注册表中找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ Power这一项,然后在右侧窗口中的空白处右键点击鼠标,新建一个“DWORD32位”的值,并命名为“AwayModeEnabled”,同时双击打开该键输入数字“1”点确定返回,此时关闭注册表编辑器就大功告成了! 现在再去打开你的迅雷或是快车执行下载任务,同时将windows7休眠,试试能不能下载完成你安排的任务?如果不想使用这种模式了,直接按照以上的步骤返回注册表编辑器中找到之前新建的那个键值,将其删除就可以了。 在Windows 7(以下简称Win7)系统中,睡眠功能得到了加强,提供了更多丰富的模式可供选择。下面我们就来看看在哪些不同情况下我们应该为Windows7选择什么样的“睡”法。 平时用电脑,我们常常在离开时选择关机,笼统地认为这样既省电又安全。不过这只是大家的习惯性做法,很多人并没有思考过这种做法是否合理。其实自Windows XP(以下简称WinXP)系统开始,微软就提供了“待机”和“休眠”功能,而到了Windows 7(以下简称Win7),这一功能更得到了加强,提供了更多丰富的模式可供选择。下面我们就来看看在哪些不同情况下我们应该为Windows7选择什么样的“睡”法。 一、短暂离开用“睡眠” 让电脑小憩一会儿

Linux Kernel and Android休眠与唤醒

Linux Kernel and Android休眠与唤醒时间:2010-06-26 21:47:04来源:网络作者:未知点击:1767次 版本信息 Linux Kernel: v2.6.28 Android: v2.0 对于休眠(suspend)的简单介绍 在Linux中,休眠主要分三个主要的步骤: Android 休眠(suspend) 在一个打过android补丁的内核中, state_store()函数会走另外一条路,会进入到request_suspend_state()中, 这个文件在earlysuspend.c中. 这些功能都是android系统加的, 后面会对earlysuspend和late resume 进行介绍. 涉及到的文件: linux_source/kernel/power/main.c linux_source/kernel/power/earlysuspend.c linux_source/kernel/power/wakelock.c 特性介绍 Early Suspend Early suspend 是android 引进的一种机制, 这种机制在上游备受争议,这里不做评论. 这个机制作用在关闭显示的时候, 在这个时候, 一些和显示有关的设备, 比如LCD背光, 比如重力感应器, 触摸屏, 这些设备都会关掉, 但是系统可能还是在运行状态(这时候还有wake lock)进行任务的处理, 例如在扫描SD卡上的文件等. 在嵌入式设备中, 背光是一个很大的电源消耗,所以android会加入这样一种机制.

Late Resume Late Resume 是和suspend 配套的一种机制, 是在内核唤醒完毕开始执行的. 主要就是唤醒在Early Suspend的时候休眠的设备. Wake Lock Wake Lock 在Android的电源管理系统中扮演一个核心的角色. Wake Lock是一种锁的机制, 只要有人拿着这个锁, 系统就无法进入休眠, 可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的, 超时的锁会在时间过去以后自动解锁. 如果没有锁了或者超时了, 内核就会启动休眠的那套机制来进入休眠. Android Suspend 当用户写入mem 或者standby到/sys/power/state中的时候, state_store()会被调用, 然后Android会在这里调用request_suspend_state() 而标准的Linux会在这里进入enter_state()这个函数. 如果请求的是休眠, 那么early_suspend这个workqueue就会被调用,并且进入early_suspend状态. void request_suspend_state(suspend_state_t new_state) { unsigned long irqflags; int old_sleep; spin_lock_irqsave(&state_lock, irqflags); old_sleep = state & SUSPEND_REQUESTED; if (debug_mask & DEBUG_USER_STATE) { struct timespec ts; struct rtc_time tm; getnstimeofday(&ts); rtc_time_to_tm(https://www.360docs.net/doc/a31863791.html,_sec, &tm); pr_info("request_suspend_state: %s (%d->%d) at %lld " "(%d-%02d-%02d %02d:%02d:%02d.%09lu UTC)",

Android Linux的休眠和唤醒

Android Linux的休眠和唤醒 Android下有三种省电方式: Early_suspend::主要是屏幕省电需要。进入early_suspend后,注册了early_suspend的外设进入休眠,大部分进程都还在运行,CPU处于正常工作状态。外设可以通过 register_early_suspend注册为early_suspend设备。 LPAUDION_MODE:系统进入early_suspend模式之后,通过has_audio_wake_lock判断是否进入LPAUDION_MODE模式,进入LPAUDION_MODE后,音乐正常播放,CPU 进入省电模式。 Suspend:系统运行状态保存到内存,CPU进入省电模式,所有外设电源关闭,只有内存保持供电和工作。 跟休眠唤醒相关的文件: /kernel/power/main.c /kernel/power/earlysuspend.c /kernel/power/wakelock.c /kernel/power/suspend.c /drivers/base/power/main.c /arch/arm/plat-samsung/pm.c /arch/arm/mach-s5pv210 /arch/arm/plat-s5p/sleep.s /arch/arm/mach-s5pv210/cpuidle.c Android linux休眠流程: 休眠的入口在/kernel/power/main.c的state_store函数。State_store函数通过 power_attr(state)宏,在sysfs中定义了一个属性。用户空间可以通过向state写入MEM,就可以使系统进入休眠状态。也可以通过cat state查看支持哪些休眠方式 在state_store函数中,调用request_suspend_state函数请求休眠。在request_suspend_state 中,如果判断到系统不处于休眠状态,则调用early_suspend。这里是通过将early_suspend 插入到休眠工作队列来实现调用的。 在early_suspend中,通过early_suspend设备链表依次调用设备各自的suspend函数(early_suspend设备通过register_early_suspend注册)。接下来判断是否申请了 audio_wake_lock,如果是,进入LPAUDIO_MODE模式。最后,调用 wake_unlock(&main_wake_lock) 在wake_unlock中,系统判断lock是否为0,若不为0,则系统处于early_suspend模式。因此,在kernel层,我们可以使用wake_lock去申请使系统不进入休眠;若为0则将suspend 插入工作队列(wakelock.c) Suspend函数中,调用pm_suspend,pm_suspend调用enter_state,准备进入休眠模式。到此为止,休眠进入标准的linux模式的休眠。在enter_state中,经过三步进入休眠 1.调用suspend_prepare 冻结用户程序。 2.调用dpm_suspend_start 分别调用设备的suspend函数 3.调用suspend_enter 进入suspend模式

系统待机、休眠、睡眠的区别和优缺点

系统待机、休眠、睡眠的区别和优缺点 Windows操作系统中很早就加入了待机、休眠等模式,而Windows Vista中更是新加入了一种叫做睡眠的模式,可是很多人还是习惯在不使用电脑的时候将其彻底关闭。其实充分利用这些模式,我们不仅可以节约电力消耗,还可以用尽可能短的时间把系统恢复到正常工作状态。 这三种模式的定义如下: 待机(Standby) 将系统切换到该模式后,除了内存,电脑其他设备的供电都将中断,只有内存依靠电力维持着其中的数据(因为内存是易失性的,只要断电,数据就没有了)。这样当希望恢复的时候,就可以直接恢复到待机前状态。这种模式并非完全不耗电,因此如果在待机状态下供电发生异常(例如停电),那么下一次就只能

重新开机,所以待机前未保存的数据都会丢失。但这种模式的恢复速度是最快的,一般五秒之内就可以恢复。 休眠(Hibernate) 将系统切换到该模式后,系统会自动将内存中的数据全部转存到硬盘上一个休眠文件中,然后切断对所有设备的供电。这样当恢复的时候,系统会从硬盘上将休眠文件的内容直接读入内存,并恢复到休眠之前的状态。这种模式完全不耗电,因此不怕休眠后供电异常,但代价是需要一块和物理内存一样大小的硬盘空间(好在现在的硬盘已经跨越TB级别了,大容量硬盘越来越便宜)。而这种模式的恢复速度较慢,取决于内存大小和硬盘速度,一般都要1分钟左右,甚至更久。 睡眠(Sleep) 是Windows Vista中的新模式,这种模式结合了待机和休眠的所有优点。将系统切换到睡眠状态后,系统会将内存中的数据全部转存到硬盘上的休眠文件中(这一点类似休眠),然后关闭除了内存外所有设备的供电,让内存中的数据依然维持着(这一点类似待机)。这样,当我们想要恢复的时候,如果在睡眠过程中供电没有发生过异常,就可以直接从内存中的数据恢复(类似

Android系统的休眠

Thinking beyond Source Code 一个喜欢科学的家伙记录生活,技术,爱情,梦想的地方。 z Home z z Emacs配置 提交查询内容 Home androidlinux Linux Kernel and Android 休眠与唤醒(中文版) Linux Kernel and Android 休眠与唤醒(中文版) 四月 18th, 2010 0 Comments/155 hits Table of Contents z简介 z国际化 z版本信息 z对于休眠(suspend)的简单介绍 z Linux Suspend 的流程 {相关的文件: {准备, 冻结进程 {让外设进入休眠 {Resume z Android 休眠(suspend) {涉及到的文件: {特性介绍 Early Suspend Late Resume Wake Lock {Android Suspend {Early Suspend {Late Resume {Wake Lock {Suspend {Android于标准Linux休眠的区别 简介 休眠/唤醒在嵌入式Linux中是非常重要的部分,嵌入式设备尽可能的进入休眠状 态来延长电池的续航时间.这篇文章就详细介绍一下Linux中休眠/唤醒是如何工作 的, 还有Android中如何把这部分和Linux的机制联系起来的. 国际化 z English Version: link z中文版: link

作者: zhangjiejing Date: 2010-04-07, https://www.360docs.net/doc/a31863791.html, 版本信息 z Linux Kernel: v2.6.28 z Android: v2.0 对于休眠(suspend)的简单介绍 在Linux 中,休眠主要分三个主要的步骤: 1.冻结用户态进程和内核态任务 2.调用注册的设备的suspend 的回调函数 {顺序是按照注册顺序 3.休眠核心设备和使CPU 进入休眠态冻结进程是内核把进程列表中所有的进程的状态都设置为停止,并且保存下所有进程的上下文. 当这些进程被解冻的时候,他们是不知道自己被冻结过的,只是简单的继续执行.如何让Linux 进入休眠呢?用户可以通过读写sys 文 件/sys /power/state 是实现控制系统进入休眠. 比如 命令系统进入休眠. 也可以使用 来得到内核支持哪几种休眠方式. Linux Suspend 的流程 相关的文件: 你可以通过访问 Linux 内核网站 来得到源代码,下面是文件的路径: z linux_soruce/kernel/power/main.c z linux_source/kernel/arch/xxx/mach-xxx/pm.c z linux_source/driver/base/power/main.c 接下来让我们详细的看一下Linux 是怎么休眠/唤醒的. Let 's going to see how these happens. 用户对于/sys/power/state 的读写会调用到 main.c 中的state_store(), 用户可以写入 const char * const pm_state[] 中定义的字符串, 比如"mem", "standby". 然后state_store()会调用enter_state(), 它首先会检查一些状态参数,然后同步文件系统. 下面是代码: # echo standby > /sys/power/state # cat /sys/power/state

修改WIN7 进入休眠的方法

win7休眠的开启与关闭方法 从开始菜单中找到“附件→命令提示符”,手工输入如下命令:powercfg -a,从这里可以清楚的看到,计算机是支持休眠的,显示“尚未启用休眠"。仍然在命令提示符下进行操作,开始休眠方法:手工键入如下命令: powercfg -hibernate on(关闭则为powercfg -hibernate off) 命令执行之后立即就可以生效,无需要重新启动系统,再次执行“powercfg -a”命令,这里会提示当前系统已经支持休眠、混合睡眠。 这时候点开win开始菜单可能只有一个睡眠按钮而没有休眠按钮,这是所谓的混合休眠……那怎么再把休眠按钮找出来呢…… 打开控制面板——电源选项——选择电源计划——平衡/节能/高性能——更改计划设置——更改高级电源设置——睡眠——允许混合睡眠——更改为“关闭”。保存退出。 然后就可以看到多出了一个“休眠”按钮了。哈哈。 因为原来启用了混合睡眠,所谓混合睡眠就是把待机和休眠合在了一起。如果你混合睡眠后电脑不断电,实质就是在待机;如果断电了,实质就是休眠。当你关闭混合睡眠后,那个睡眠按钮就是真正的待机,即仍然维持对内存供电;而连内存都断电的休眠模式就出来了。 弄清Win7休眠与睡眠更有效率地用电脑 相信很多朋友已经开始体验Windows 7,我们在离开电脑的时候常常让电脑进入睡眠模式以便在回来的时候让电脑快速进入工作状态达到节能的目的。而在windows7中,有睡眠,休眠以及混合休眠三种工作模式,有何不同,我们该如何选择来让自己的电脑更加节能呢?

查看电源支持的睡眠模式 如果排除掉其他的因素,那么我们怎样才能知道自己的计算机支持哪几种睡眠状态呢?方法很简单,你并不需要重新启动进入BIOS设置程序进行查看,只需要通过输入几个命令即可。 从开始菜单中找到“附件→命令提示符”,右击选择“以管理员身份运行”,此时可能需要输入管理员密码或进行UAC确认,手工输入如下命令:powercfg -a,从这里可以清楚的看到,计算机是支持休眠的,只是未曾启用罢了。仍然在命令提示符下进行操作,手工键入如下命令:powercfg -hibernate on,命令执行之后立即就可以生效,也不需要重新启动系统,再次执行“powercfg -a”命令,这里会提示当前系统已经支持休眠、混合睡眠。如果我们再次进入控制面板的“硬件和声音→电源选项→系统设置”,进入高级设置窗口,我们可以在“睡眠”小节中查看到关于休眠的时间设置选项。 ●通过命令行打开电源节能模式 高效管理休眠文件避免磁盘空间浪费 无论是启用了休眠还是混合休眠,系统分区根目录下都会自动生成一个名为hiberfil.sys的文件,其大小等同于物理内存的容量,即使安装了双操作系统,删除这个文件也并不是件容易的事情… 我们可以按照下面的步骤,在Windows 7系统下对睡眠文件进行清理: ①从控制面板中依次进入“硬件和声音→电源选项”,我们需要在这里禁止睡眠。在左侧任务窗格中选择“更改计算机睡眠时间”,此时会弹出“编辑计划设置”对话框,请将“使计算机进入睡眠状态”的选项设置为“从不”,注意如果是使用笔记本电脑,请将“用电池”和“接通电源”两个选项都进行类似的设置。

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

linux驱动程序之电源管理之标准linux休眠与唤醒机制分析 (一) linux驱动程序之电源管理之标准linux休眠与唤醒机制分析(一) 1. Based on linux 2.6.32, only for mem(SDR) 2. 有兴趣请先参考阅读:电源管理方案APM和ACPI比较.doc Linux系统的休眠与唤醒简介.doc 3. 本文先研究标准linux的休眠与唤醒,android对这部分的增改在另一篇文章中讨论 4. 基于手上的一个项目来讨论,这里只讨论共性的地方 虽然linux支持三种省电模式:standby、suspend to ram、suspend to disk,但是在使用电池供电的手持设备上,几乎所有的方案都只支持STR模式(也有同时支持standby模式的),因为STD模式需要有交换分区的支持,但是像手机类的嵌入式设备,他们普遍使用nand来存储数据和代码,而且其上使用的文件系统yaffs一般都没有划分交换分区,所以手机类设备上的linux都没有支持STD省电模式。

一、项目power相关的配置 目前我手上的项目的linux电源管理方案配置如下,.config 文件的截图,当然也可以通过make menuconfig使用图形化来配置: # # CPU Power Management # # CONFIG_CPU_IDLE is not set # # Power management options # CONFIG_PM=y # CONFIG_PM_DEBUG is not set CONFIG_PM_SLEEP=y CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y CONFIG_HAS_WAKELOCK=y CONFIG_HAS_EARLYSUSPEND=y CONFIG_WAKELOCK=y CONFIG_WAKELOCK_STAT=y

单片机的休眠模式

AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。 单片机空闲与掉电模式2009-04-23 00:03特别对于电池供电系统来说,功耗是首要考虑的问题.我们知道单片机内部有一个电源管理 寄存器PCON,这个寄存器的最低两位,IDL和PD这两位分别用来设定是否使单片机进入空闲模式和掉电模式。 1. 空闲模式 当单片机进入空闲模式时,除CPU处于休眠状态外,其余硬件全部处于活动状态,芯片中程序未涉及到的数据存储器和特殊功寄存器中的数据在空闲模式期间都将保持原值。但假若定时器正在运行,那么计数器寄存器中的值还将会增加。单片机在空闲模式下可由任一个中断或硬件复位唤醒,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。 让单片机进入空闲模式的目的通常是为了降低系统的功耗,举个很简单的例子,大家都用过数字万用表,在正常使用的时候表内部的单片机处于正常工作模式,当不用时,又忘记了关掉万用表的电源,大多数表在等待数分钟后,若没有人为操作,它便会自 动将液晶显示关闭,以降低系统功耗,通常类似这种功能的实现就是使用了单片机的空闲模式或是掉电模式。以STC89系列单片机为例,当单片机正常工作时的功耗通常为4mA~7mA,进入空闲模式时其功耗降至2mA,当进入掉电模式时功耗可降至0.1μA以下。 2. 休眠模式 当单片机进入掉电模式时,外部晶振停振、CPU、定时器、串行口全部停止工作,只有外部中断继续工作。使单片机进入休眠模式的指令将成为休眠前单片机执行的最后一条指令,进入休眠模式后,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据都将保持原值。可由外部中断低电平触发或由下降沿触发中断或者硬件复位模式换醒单片机,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。可将数字万用表调节到电流档,然后串接入电路中,观察单片机在正常工作模式、休眠模式、空闲模式下流过系统的总电流变化情况,经测试可发现结果如下:正常工作电流>空闲模式电流>休眠模式电流。 51进空闲模式 2007-10-24 14:36 进入空闲模式:PCON=0x01; 之前执行AUXR=0xFF;定义空闲模式下看门狗WDT不计数。 PCON:电源控制器及波特率选择寄存器 GF1、GF0——用户通用标记 PD——掉电方式控制位,PD=1时进入掉电模式

待机与休眠死机或重启

待机与休眠死机或重启.txt39人生旅程并不是一帆风顺的,逆境失意会经常伴随着我们,但人性的光辉往往在不如意中才显示出来,希望是激励我们前进的巨大的无形的动力。40奉献是爱心,勇于付出,你一定会收到意外之外的馈赠。待机与休眠死机或重启 你试试下面的方法是否可以解决问题。 因为你的电脑主板BIOS启用了高级电源管理功能,同时windows系统也启用了高级电源管理功能,两者发生冲突造成死机或重启。 解决方法如下: 开机或重启电脑,按DEL键进入BIOS,找到“power managemant features”回车进入,把里面参数设置为“on”的项全部设置为“off”,按ESC返回上级界面,选择Save&exit step(保存设置),当然直接按F10也可以. 按Y回车.电脑自动重起登陆系统。 另一个原因,你的C盘空间不足也可引起休眠死机故障的发生,如果使用休眠功能,最少C 盘要保留1个G的使用空间。 如果使用待机与休眠功能,经常发生故障,尽量不要使用待机与休眠功能了,因为遇到这样的故障,是系统的本身故障造成的,有时无法修复,除非重装操作系统(如果故障依旧就要换系统安装盘了)。平是长时间不用就关机,短时间不用有屏幕保护呢。 屏幕保护,待机状态下死机的几个常见原因及解决方法 发布者:观兰电脑维修发布时间:2009-10-30 20:20:31 阅读:5次 屏幕保护状态下死机: 这很可能是系统的问题,当系统文件损坏,特别是部分屏保程序损坏时出现这问题。你可以尝试不使用屏保,当然,你点桌面属性,屏幕保护时想设置会出现死机现象,这时候你根本不能操作,你可以尝试在SYSTEM32下删除该程序,删除后就没有屏保程序了!你可以试着使用系统自带的!!当然了,解决该问题你也可以试着更新下芯片的驱动,一般VIA 的驱动最好使用4IN1的!!当然你可以直接重装系统 我一个朋友的电脑经常在屏幕保护后出现死机的现象,不但工作不能正常进行,而且还把正在调用的资料破坏了,这是怎么回事呢?经过仔细观察,发现并不是只要进行屏幕保护就会死机,这就说明死机故障与屏幕保护本身无关。 待机状态下: 我们所遇到的死机现象有真假两种,其中“假死机”实际上没有死,而是因为唤醒系统、启动硬盘、开启显示器等情况需要一定时间的等待,有些性子急的朋友往往在几秒钟之 内就判断它是死机了。

相关文档
最新文档