一CPU相关的基础知识
了解cpu相关的基础知识,主要目的为后续STR中的CPU休眠概念作一些铺垫
1.1 CPU的基本单元与关系
冯诺伊曼-计算机基本组成结构:存储器相当于内存,运算器+控制器相当于CPU
关系说明:输入设备通过cpu读取内存中的指令和数据进行逻辑控制与运算,结果再写回内存中,最后数据流给输出设备
上述想表达:虽然CPU是没有记忆的,即CPU不知道自己过去和将来需要干啥,但是内存保存了这个记忆。
1.2 时间片调度算法
轮转调度算法(Round Robin,RR)也称时间片调度算法:调度程序每次把 CPU 分配给就绪队列首进程使用规定的时间间隔,称为时间片,通常为 10ms ~ 200ms,「就绪队列中的每个进程轮流地运行一个时间片,当时间片耗尽时就强迫当前运行进程让出 CPU 资源,转而排到就绪队列尾部,等待下一轮调度」。所以,一个进程一般都需要多次轮转才能完成。
轮转调度算法对每个进程都一视同仁,就好比大家都排好队,一个一个来,每个人都运行一会儿再接着重新排队等待运行。
上述想表达:虽然CPU是没有记忆的,即CPU不知道自己过去和将来需要干啥,但是内存保存了这个记忆。如果我们暂停了调度,保证内存数据不变的话。是不是可以在不需要CPU工作的时候让CPU休息一下,需要工作的时候唤醒CPU让他从内存重新读取数据而不影响后续任务的正常调度。即合理利用CPU资源
二STR背景
2.1 Linux电源状态中的STR概念
座舱和电视 CPU休眠一般称STR。手机设备一般就直接说CPU进入睡眠了,起码手机厂很少说CPU进入STR模式,听起来很怪哈。STR模式即RAM保持供电,CPU和其他大部分外设关闭
ACPI State | Linux State | 描述 |
S0 | On(on) | |
S1 | Standby | 浅睡眠模式下CPU并未断电,依旧可以接收处理某些特定事件,视具体设备而定,恢复至正常工作状态的速度也比STR更快,但也更为耗电。 举个例子来说,以该方式进入睡眠时,后续通过点击键盘也能将系统唤醒;而以mem进入的睡眠为深度睡眠,只能通过中断唤醒设备唤醒系统,如电源键(此时按电源键,不会经过正常的开机流程的BIOS、BOOTLOAD等),此时按键盘是无法唤醒系统的。 |
S2 | ------ | ------ |
S3 | Suspend to RAM(mem) | 挂起到内存,俗称待机、睡眠(Sleep),进入该状态,系统的主要工作如下: 1.将系统当前的运行状态等数据保存在内存中,此时仍需要向RAM供电,以保证后续快速恢复至工作状态 2.冻结用户态的进程和内核态的任务(进入内核态的进程或内核自己的task) 3.关闭外围设备,如显示屏、鼠标等,中断唤醒外设不会关闭,如电源键 4.CPU停止工作 |
S4 | Suspend to Disk(disk) | 挂起到硬盘,俗称休眠(Hibernation)将系统当前的运行状态等数据保存到硬盘上,并自动关机。下次开机时便从硬盘上读取之前保存的数据,恢复到休眠关机之前的状态。 譬如在休眠关机时,桌面打开了一个应用,那么下一次开机启动时,该应用也处于打开状态。而正常的关机-开机流程,该应用是不会打开的。 |
S5 | Shutdown | 主要init进程进行关闭各个服务进程deamon、发送SIGTERM、SIGKILL、将内存数据同步到磁盘和内核关机 |
2.2 STR原理
设备有STR休眠需求时,挂起内存同时CPU暂停调度等,被唤醒时通过读取内存等数据快速恢复工作状态
2.3 为什么有STR-为了合理的省电哈
现实生活中不论是手机、座舱、手表、电视都是需要消耗电能的,即电能要钱的哈。但是设备又不需要一直高负荷使用,总有空闲的时候,空闲的时候就可以进入STR模式。通过合理的省电节省点钱。
例如如下对比场景
场景 | 优点 | 缺点 |
系统不关机,一直等待用户操作 | 启动最快 | cpu任何时候都等操作,费电 |
系统关机,用户操作需等开机流程完成 | 省电 | 开机启动需要时间 |
系统进入STR,唤醒即可用户操作 | 省电和用户体验良好 | 系统各个功能适配STR模式 |