G、S、C、P、T STATE

1)G状态(Global System State)
指整个系统的状态:
G0:⼯作状态(working),相当于计算机处于正常开机的状态,该状态下系统实时响应外部事件,⽤于程序可以正常执⾏,设备也可以动态分配⾃⼰的状态;
G1:休眠状态(sleeping),该状态类似于电脑待机或者休眠,处于低功耗状态,计算机此时不会去执⾏⽤户的程序,看起来就像关机,此时显⽰屏是关闭的,但是只要有唤醒操作还是可以很快的恢复到⼯作状态;
G2:(soft off),除了⽤户程序不再执⾏,操作系统的程序也不再执⾏,如果要唤醒的话需要较长时间恢复到⼯作状态,类似于电脑关机;
G3:(mechanical off),简单的讲就是拔电源线,如果是PC的话可能感觉和G2状态差不多,但是如果是服务器,G3和G2的唤醒时间差异估计够你来⼀盘⽃地主。
 

2)S-State
系统的休眠状态,有6种(没错,就是有这么多姿势):
S0:正常⼯作状态,系统所有设备都处于开启状态;
S1:休眠模式,叫做POS(Power on Suspend),在这个状态下CPU通过CPU的时钟控制器关闭(但是CPU的寄存器和cache好像还是维持的),其他设备也是正常处于开启状态,这个状态相当于降低CPU的功耗;
S2:也是⼀种休眠模式,类似于S1,不过这个状态下CPU完全关闭(包括寄存器和cache),总线时钟也被down掉,其余设备还是照常保持;
S3:STR(Suspend to RAM),这个状态除了内存其他设备都断电,内存会低速刷新;
S4:STD(Suspend to Disk),系统主电源关闭,S4之前的内存信息写⼊硬盘,所有部件停⽌⼯作,系统主电源关闭,只有硬盘还带电并且可以被唤醒;
S5:完全下电,电源都关闭了,即关机(shut down)。
从上⾯看的话S的级数越⾼(代表睡眠程度越深),越往后的状态消耗的电量越少,也就是越省电。S0~S4状态其实就是G1状态的细分。S5状态其实和G2状态⼀样。
3)C-State (CPU Power State)

表⽰CPU的供电状态,主要是⽤于降低CPU功耗的,其实就是G0下的状态:
C0:此时CPU还是正常执⾏各种指令,相当于满状态运⾏,唤醒时间为0;
C1:这个状态已经需要唤醒时间了,不过很⼩(idle),⼀般软件在执⾏过程中对该影响基本可以忽略不计,这个状态CPU的功耗已经⼤⼤降低了;
C2:唤醒时间⽐C1更长,功耗⽐C1更低;
C3:唤醒时间⽐C2更长,功耗⽐C2更低,这个状态下CPU依旧会保持缓存信息,但是不会对信息进⾏监听,需要软件⾃⾝负责保证缓存内容的⼀致性。
(后⾯好像还定义了更多的C(C4、C5、C6)状态,总体就是CPU功耗更低,响应更慢,⼯作⽅式更简单)
4)P状态(CPU Performance state)
该状态也称为EIST(Enhanced Intel Speed Step Technology),通过控制CPU的电压和频率来变更CPU的性能,进⽽改变功耗。为C0状态下降低CPU功耗的⼀种⽅式。
5)Device State(Dx)

  •  
    • D0 -- Full Power 全速
    • D1 -- 中间态
    • D2 -- 比D1能耗低,延时高
    • D3 -- Off

6)T状态(CPU Throttling state)
⼀种节能状态,也是在C0状态下降低CPU功耗的⼀种⽅式,与P状态不同,T状态是通过调整单位时间内CPU Clock On的占空⽐(CPUClock On /(Clock On + Clock Off))的⽅式 ,改变系统的功耗和温度。
 

EIST与Turbo与PState的关系

Turbo是睿频开关,顾名思义,如果设为Enable,则CPU可以睿频运行。一般来说,EIST作为智能降频开关,优先级较高,如果EIST设为diable,则不允许CPU节能,CPU正常运行主频应当一直在标频。Turbo为睿频开关,当EIST设为disable后则Turbo应当加灰失效。

PState属于ACPI中得一个概念,PState标志着CPU节能等级,如果PState被设置为Enable后,则CPU将会在不同得PState状态之间进行切换,一般应用较多得是P0-P4,后面还可以到P10。CPU在P状态之间进行切换时,CPU的频率,CPU内部核心电压,Cache缓存的数据量以及唤醒时间会有所变化,总之最终得目的亦是为了节省能耗。

EIST与Turbo和Pstate三者之间得关系:仅关注CPU主频角度来看得话,EIST是总开关,如果设为Disable则Pstate也会设为Disable,体现在BIOS中你可以看到,Pstate得开关会随着EIST得disable而加灰,意思是禁止PState。此时进入到OS后,CPU得主频应该稳定在标频运行,此时Turbo开关也会随着EIST而加灰无效,意为不可睿频,此时即使使用PTU工具加压,也只会稳定在标频。但若EIST设为Enable,情况还稍微复杂下,但也基本是反着来得Global State (Gx State) 全局态,这个属于是top-level 的状态

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(int j = 0; j < symbols.size(); j++) { char X = symbols[j].name; vector<string> J = getGoto(I.items, X); if (J.size() == 0) { continue; } // 查好的,下面是一个使用C语言,适用于STM32G030单片机的卡尔曼滤波器找项集是否已存在 bool exists = false; int nextState = -1; for (int k = 0的示例代码。在这个示例中,我们将使用STM32CubeMX自动生成的代码库进行开发。 首; k < C.size(); k++) { State K = C[k]; if (K.items == J) { exists =先,我们需要在CubeMX中配置串口和ADC模块。假设我们使用的是USART1串口和ADC1 true; nextState = K.id; break; } } // 如果项集不存在,则添加一个新状态 模块,对应的代码如下: ```c /* 配置串口 */ MX_USART1_UART_Init(); /* 配置ADC if (!exists) { State K = { (int)C.size(), J }; C.push_back(K); nextState = K */ MX_ADC1_Init(); HAL_ADC_Start(&hadc1); ``` 然后,我们需要定义卡尔曼滤波器的.id; } // 添加转移边 int state = I.id; int symbolIndex = j; State nextState结构体和相关变量: ```c typedef struct { float x[2]; // 状态向量 [电压, Obj = C[nextState]; int nextSymbol = nextStateObj.items[0][0]; lr0Automaton[state][symbolIndex] = nextState; } } // 保存LR(0)自动机状态states = C; } 电压变化率] float F[2][2]; // 状态转移矩阵 float H[1][2]; // 构造LR分析表 void buildLRTable() { // 初始化LR分析表 for (int i = 0; i < states.size(); i++) { vector<TableItem> row; for (int j = 0; // 测量矩阵 float P[2][2]; // 状态协方差矩阵 float Q[2][2 j < symbols.size(); j++) { TableItem item = { ' ', -1 }; row.push_back(item); } ]; // 系统噪声协方差矩阵 float R[1][1]; // 测量噪声协方差矩 lrTable.push_back(row); } // 填充LR分析表 for (int i = 0; i < states阵 } KalmanFilter; KalmanFilter kf; float dt = 0.001; // 间步长 float Q = .size(); i++) { State I = states[i]; // 对于I中每个项A->a.Bb,执行以下操作 for (int j = 0; j < I.items.size(); j++) { string item = I.items[j]; 1e-5; // 系统噪声方差 float R = 0.1; // 测量噪声方差 int dot = item.find('.'); if (dot >= item.length() - 1) { continue; } char B =float z = 0; // 当前测量值 ``` 接着,我们需要定义卡尔曼滤波器的相关 item[dot + 1]; char BType = getSymbolType(B); if (BType == 'T') { // 移函数: ```c void KalmanFilter_Init(float voltage) { // 初始化状态向量 kf.x[0] = voltage入动作 int nextState = lr0Automaton[i][B - 'a']; TableItem item = { 's', nextState; kf.x[1] = 0; // 初始化状态转移矩阵 kf.F[0][0] = }; lrTable[i][B - 'a'] = item; } else if (BType == 'N') { // GOTO 1; kf.F[0][1] = dt; kf.F[1][0] = 0; kf.F动作 vector<string> J = getGoto(I.items, B); int nextState = -1; for (int[1][1] = 1; // 初始化测量矩阵 kf.H[0][0] = 1; k = 0; k < states.size(); k++) { State K = states[k]; if (K.items == J) kf.H[0][1] = 0; // 初始化状态协方差矩阵 kf.P[0][0 { nextState = K.id; break; } } TableItem item = { ' ', nextState }; lrTable[i] = 1; kf.P[0][1] = 0; kf.P[1][0] = 0; ][B - 'A'] = item; } } // 对于I中每个项A->a.,执行以下操作 for (int j = 0; j < I.items.size(); j++) { string item = I.items[j]; kf.P[1][1] = 1; // 初始化系统噪声协方差矩阵 kf.Q[0 int dot = item.find('.'); if (dot != item.length() - 1) { continue; } char A =][0] = Q; kf.Q[0][1] = 0; kf.Q[1][0] = 0 item[0]; if (A == 'S') { // 接受动作 TableItem item = { 'a', -; kf.Q[1][1] = Q; // 初始化测量噪声协方差矩阵 kf.R[1 }; lrTable[i]['$' - 'a'] = item; } else { // 规约动作 for0][0] = R; } void KalmanFilter_Predict(void) { // 预测状态状态协方差 (int k = 0; k < productions.size(); k++) { Production p = productions[k]; if (p.left == kf.x[0] = kf.F[0][0] * kf.x[0] + kf.F[0][1] * kf A) { TableItem item = { 'r', k }; for (int l = 0; l < symbols.size();.x[1]; kf.x[1] = kf.F[1][0] * kf.x[0] + kf.F[1 l++) { char symbol = symbols[l].name; if (lrTable[i][l].action == ' ') { lr][1] * kf.x[1]; kf.P[0][0] = kf.F[0][0] * kf.P[Table[i][l] = item; } } } } } } } } }; int main()0][0] + kf.F[0][1] * kf.P[1][0] + kf.Q[0][0]; { // 文法字符串 string grammar = "S->E\n" "E->E+T|E-T|T kf.P[0][1] = kf.F[0][0] * kf.P[0][1] + kf.F[0][\n" "T->T*F|T/F|F\n" "F->(E)|i"; // 输入字符串1] * kf.P[1][1]; kf.P[1][0] = kf.F[1][0] * kf.P string input = "i+i*i"; // 创建LR分析器 LRParser parser(grammar); // 分析输入[0][0] + kf.F[1][1] * kf.P[1][0]; kf.P[1][1]字符串 parser.parse(input); return 0; } ``` 以上代码仅供参考,

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值