S2R

1.Linux内核的suspend状态

Linux内核支持多种类型睡眠状态,目前存在四种模式:suspend to idle(freeze)、power-on standby(standb)、suspend to ram(memory;STR)和suspend to disk(hibernate),分别对应ACPI状态的S0、S1、S3和S4状态。
State in Linux     Label     state     ACPI      备注
#define  PM_SUSPEND_ON         ((__force suspend_state_t) 0)                       正常
#define  PM_SUSPEND_FREEZE      ((__force suspend_state_t) 1)     freeze     suspend-to-idle     S0     冻结进程+挂起设备+CPU空闲
#define  PM_SUSPEND_STANDBY    ((__force suspend_state_t) 2)     standby     power-on suspend     S1     冻结进程+挂起设备+关闭nonbootCPU
#define  PM_SUSPEND_MEM     ((__force suspend_state_t) 3)     mem     suspend-to-ram     S3     仅保留RAM自刷新
#define  PM_SUSPEND_MAX      ((__force suspend_state_t) 4)     disk     suspend-to-disk     S4     关闭所有设备包括RAM,也被称为Hibernate

    Suspend-To-Idle

        此状态包括frozen processes+suspended devices+idle processors,具有轻量化的特点;并且相对于相对于Idle状态能节省更多的功耗,因为此时的用户空间被冻结且I/O设备进入了低功耗状态。

        相对于Suspend-To-RAM它具有低延时的优势。

    Power-On Suspend

        此状态简称standby状态,包括frozen processes+suspended devices+offline nonboot CPUs+suspend low-level system,对CPU的处理更近一步。所以相对于Suspend-To-Idle节省了更多的功耗,但是由于需要恢复CPU和一些底层功能也花费了更多的时间。

    Suspend-to-RAM

        挂起到内存,简称待机。计算机将目前的运行状态等数据存放在内存,关闭硬 盘、外设等设备,进入等待状态。此时内存仍然需要电力维持其数据,但整机耗电很少。恢复时计算机从内存读出数据,回到挂起前的状态,恢复速度较快。对 DDR的耗电情况进行优化是S3性能的关键,大多数手持设备都是用S3待机。此状态下计算机会冻结所有的活动并将当前工作状态保存到RAM中,然后关闭屏幕进入低功耗模式,通常睡眠和唤醒需要几秒。此状态使所有的设备进入低功耗状态,仅保留RAM自刷新。所有的设备和系统状态都保存在RAM中,所有外设被挂起。

    Suspend-to-disk

         此状态是最省功耗的模式,简称休眠。相对Suspend-to-RAM能节省更多功耗的原因是数据会被写入磁盘中,RAM也可以被关闭。但是这也导致了,更多的恢复延时,在resume的时候读回到RAM,然后在进行系统和设备状态恢复工作。把运行状态等数据存放在硬盘上某个文件或者某个特定的区域,关闭硬盘、外设等设备,进入关机状态。此时计算机完全关闭,不耗电。恢复时计算机从休眠文件/分区中读出数据,回到休眠前的状态,恢复速度较慢。电子书项目中,见过一款索尼的电子书,没有定义关机状态,只定义了S4,从而提高开机速度。一般在window系统中常见到。此状态下计算机将所有活动的状态保存到磁盘中,然后处于关机状态,此模式下是不耗电的,而相比之前的模式,休眠和唤醒的速度都比较慢。但是在一般的嵌入式设备上,此种状态不支持。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是符合您要求的代码: ``` // Shape接口 interface Shape { String getColor(); void setColor(String c); } // Shape2D接口 interface Shape2D extends Shape { double area(); void draw(); } // Circle类 class Circle implements Shape2D { private String color; private double radius; public Circle(String c, double r) { color = c; radius = r; } @Override public String getColor() { return color; } @Override public void setColor(String c) { color = c; } @Override public double area() { return Math.PI * radius * radius; } @Override public void draw() { System.out.println("I am a circle."); } } // Rectangle类 class Rectangle implements Shape2D { private String color; private double width; private double height; public Rectangle(String c, double w, double h) { color = c; width = w; height = h; } @Override public String getColor() { return color; } @Override public void setColor(String c) { color = c; } @Override public double area() { return width * height; } @Override public void draw() { System.out.println("I am a rectangle."); } } // ShapeTester类 class ShapeTester { public static void main(String[] args) { Circle c = new Circle("red", 2.0); Shape sc = (Shape) c; Shape2D s2c = c; sc.setColor("blue"); System.out.println("Circle area: " + s2c.area()); Rectangle r = new Rectangle("green", 3.0, 4.0); Shape sr = (Shape) r; Shape2D s2r = r; sr.setColor("yellow"); System.out.println("Rectangle area: " + s2r.area()); } } // ShapeTester2类 import java.util.Random; class ShapeTester2 { public static void main(String[] args) { Shape2D[] shape2ds = new Shape2D[10]; Random rand = new Random(); for (int i = 0; i < 10; i++) { if (rand.nextBoolean()) { shape2ds[i] = new Circle("red", rand.nextDouble() * 10); } else { shape2ds[i] = new Rectangle("green", rand.nextDouble() * 10, rand.nextDouble() * 10); } } for (Shape2D shape2d : shape2ds) { shape2d.draw(); } } } ``` 希望这份代码能够满足您的需求!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值