STR初识

一CPU相关的基础知识

了解cpu相关的基础知识,主要目的为后续STR中的CPU休眠概念作一些铺垫

1.1 CPU的基本单元与关系

冯诺伊曼-计算机基本组成结构:存储器相当于内存,运算器+控制器相当于CPU

0

关系说明:输入设备通过cpu读取内存中的指令和数据进行逻辑控制与运算,结果再写回内存中,最后数据流给输出设备

上述想表达:虽然CPU是没有记忆的,即CPU不知道自己过去和将来需要干啥,但是内存保存了这个记忆。

1.2 时间片调度算法

轮转调度算法(Round Robin,RR)也称时间片调度算法:调度程序每次把 CPU 分配给就绪队列首进程使用规定的时间间隔,称为时间片,通常为 10ms ~ 200ms,「就绪队列中的每个进程轮流地运行一个时间片,当时间片耗尽时就强迫当前运行进程让出 CPU 资源,转而排到就绪队列尾部,等待下一轮调度」。所以,一个进程一般都需要多次轮转才能完成。

0

轮转调度算法对每个进程都一视同仁,就好比大家都排好队,一个一个来,每个人都运行一会儿再接着重新排队等待运行。

上述想表达:虽然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暂停调度等,被唤醒时通过读取内存等数据快速恢复工作状态

0

2.3 为什么有STR-为了合理的省电哈

现实生活中不论是手机、座舱、手表、电视都是需要消耗电能的,即电能要钱的哈。但是设备又不需要一直高负荷使用,总有空闲的时候,空闲的时候就可以进入STR模式。通过合理的省电节省点钱。

例如如下对比场景

场景

优点

缺点

系统不关机,一直等待用户操作

启动最快

cpu任何时候都等操作,费电

系统关机,用户操作需等开机流程完成

省电

开机启动需要时间

系统进入STR,唤醒即可用户操作

省电和用户体验良好

系统各个功能适配STR模式

### Python 基础语法概述 Python 是一种解释型高级编程语言,以其简洁清晰的语法著称。对于初学者来说,理解其基本结构和语法规则是非常重要的。 #### 代码组织与缩进 Python 使用缩进来表示代码块之间的关系,而不是像其他一些编程语言那样使用大括号或其他分隔符。每一级缩进通常由四个空格组成[^2]。例如: ```python def my_function(): print("This is inside the function") # 这里有一个缩进级别 print("This line is outside of the function") ``` #### 控制流语句 Python 提供了几种常见的控制流工具来管理程序执行路径,包括条件判断 `if` 和循环 `for`, `while` 等。下面是一个简单的例子展示了如何使用这些语句: ```python number = 10 if number > 5: print(f"{number} is greater than five.") else: print(f"{number} is not greater than five.") for i in range(3): print(i) counter = 0 while counter < 3: print(counter) counter += 1 ``` #### 注释 为了提高代码可读性和维护性,在编写过程中添加适当注释是非常有益的做法。单行注释可以通过井号(`#`)实现;而多行注释则可以采用三重引号(无论是三个单引号还是双引号都可以)[^4]: ```python # This is a single-line comment. ''' This is a multi-line comment. It spans multiple lines. ''' """ Another way to write multi-line comments, using triple double quotes instead. """ ``` #### 变量定义 在 Python 中声明变量不需要指定数据类型,直接赋值即可创建新变量。支持多种内置的数据类型如整数(int), 浮点数(float),字符串(str)等: ```python integer_example = 42 # Integer variable floating_point_example = 3.14 # Float variable string_example = "Hello, world!" # String variable ``` 通过上述内容的学习,能够帮助建立起对 Python 编程的基础认识,并为进一步深入学习打下良好基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值