- 博客(17)
- 收藏
- 关注
原创 内核异常检测机制——Soft lockup、Hard lockup、hung up
本文介绍了内核中的Soft lockup和Hard lockup及Hung up的检测机制
2024-10-11 15:59:44
1092
原创 Linux内核基础——内存序、屏障和原子量
内存序(Memory order)可以理解为CPU对内存的访问顺序。如果进一步细分,可以分为编译期内存序和运行时内存序。
2024-06-25 14:02:12
1033
原创 S4休眠及唤醒功能分析(Arm64/linux4.19)
Linux内核包含多种休眠状态,目前主要是4种,目前S4是最省电的一种休眠形式,但恢复速度最慢。状态ACPI等级动作备注冻结用户空间进程停止timekeepingIO设为低功耗状态通用,纯软件实现,支持所有平台,且可以用于下面的所有休眠之中StandbyS1包含Suspend-to-idle所有动作非引导cpu offline待机,适度节能,较快恢复S3包含Standby所有动作内存/唤醒设备外,所有设备进入低功耗状态,内存自动刷新睡眠,提供较大程度节能,恢复较慢S4。
2023-12-25 10:53:21
2814
1
原创 Linux 系统休眠状态 System Sleep Status
唤醒后,控制转移到运行加载引导程序的固件,内核新实例会在持久存储设备(如Disk)中查找休眠映像,如果找到,则加载到内存中。接下来,停止系统中的所有活动,恢复内核用映像内容覆盖自身,并跳转到存储在映像中的原始内核中的一个特殊的区域(称为“映像内核”),这是需要特定于体系结构的低级代码的地方。写入快照映像后,系统进入特殊的低功耗状态,如ACPI的S4状态,或者干脆关闭电源。默认情况下值为0,如果值为1,挂起/恢复事件将会保存在RTC内存中,覆写掉原有的RTC信息,从而在恢复后寻找导致崩溃的信息。
2023-10-11 10:57:43
1203
原创 Energy aware scheduling (EAS) 能量感知调度流程及源码解析
【代码】Energy aware scheduling (EAS) 能量感知调度流程及源码解析。
2023-09-20 17:05:08
724
1
原创 Scheduling Fixed-Priority Tasks with Preemption Threshold
本节提供一种算法,其为有固定优先级的任务分配抢占阈值,保证可调度性。
2023-09-18 17:15:41
155
原创 Source code of Energy Model in Linux kernel (Linux kernel 中的能量模型源码)
对于CPU设备来说,性能域指的是一组共同缩放性能的cpu,所有cpu都必须具备相同的微架构,1个性能域通常与1个cpu调频策略对应。对于其他种类设备em_perf_domain的cpus字段没有使用。
2023-09-18 17:01:07
175
翻译 Energy Aware Scheduling (EAS, 能量感知的调度) Linux 文档翻译
EAS给出了调度器预测CPU的决策对能耗的影响。EAS依赖Energy Model (EM)模型为每个任务选择节能的CPU,从而使得对吞吐量影响最小。本文介绍EAS是如何工作的,其设计初衷是什么等内容。注意:EAS不支持具有对称CPU拓扑的平台EAS仅在异构CPU上运行,如Arm big.LITTLE,这是通过调度节省能量的实质。
2023-09-18 16:56:59
806
翻译 进程、线程和协程
进程、线程和协程22/3/1阿里面试,面试官对项目中线程和协程这个问题讨论的非常深入,但自己无奈只是知道一些基本概念,但项目中我也只是调库来完成的,关于协程也只是知道它是比线程更轻量级的存在。这里搬运一些stackoverflow上面的讨论,扩展到进程。进程和线程的差别回答1(讨论了线程和进行各自具有的资源)ProcessEach process provides the resources needed to execute a program. A process has a virtual
2022-03-02 23:44:50
178
原创 C++ 单例模式 饿汉+懒汉实例
C++单例模式及实例单例模式是非常常用的设计模式,通俗讲就是保证全局仅存在一份类型实例。我们通过模板类来实现泛型单例模式,所有单例类对象存储在static变量中,全局静态变量要早于main方法之前初始化,且只初始化一次,因此只要调用类似HungrySingleton<log>::GetInstance()这样的语句即可获取单例对象log的指针。对于C++来说,需要保证单例类HungrySingleton和LazySingleton构造函数、析构函数、拷贝和赋值通通不可用,因此其继承了一个删
2022-02-17 23:19:17
499
原创 c++ 手写智能指针shared_ptr
c++ 手写智能指针shared_ptr留个坑,回头在填。#include <utility>#include <iostream>#include <cstddef>#include <string>template<typename T>class shared_ptr { friend class shared_ptr; public: shared_ptr(T* ptr = nullptr) :
2022-01-31 00:22:22
1251
2
原创 函数指针与typedef和using的类型声明
函数指针与typedef和using的类型声明typedeftypedef是C/C++中一个经典的关键词,用于为数据类型定义一个新的名称,但可读性比较差,尤其是和函数指针结合起来使用非常令人迷惑。举个例子:typedef int* IntPtr; // 将IntPtr类型解释为int*表明我们可以用IntPtr来表示一个int型指针。在使用时int* a = nullptr就和IntPtr a = nullptr完全等价。而typedef在声明函数指针类型时会更让人迷惑。例如:int func
2022-01-30 16:29:56
1562
原创 一个Socket连接实例
一个Socket连接实例默认端口5005。功能:最简单的socket通信,server_运行后阻塞等待client_连接,client_可以向server_发送报文,server_收到报文后向client_作出接收成功的回应。client_断开连接后server_将处理阻塞等待队列中的其他client_。注意:云服务器记得要在安全策略中放行5005端口,本地Linux也要放行5005端口代码:服务器server_.cpp#include <sys/types.h>#inc
2021-12-05 15:48:32
550
原创 基于C++标准容器Vector实现的十大经典排序方法
基于C++标准容器Vector实现的十大排序方法简介代码输出简介其他博客中关于十大排序算法的方法以及非常全面,我这里就不再赘述。目前其他博客中大多是利用c语法的数组类型来实现排序的操作,有些代码仍旧会出现一些边界问题。这里总结的代码使用C++17标准。由于vector自身复制和分配仍旧需要一定开销,因此部分理论上能达到O(nlogn)的算法在使用辅助容器排序时将产生额外的开销,如归并排序。原地算法的效果就比上述算法效果好很多。代码#include <iostream>#include
2021-11-08 14:53:21
3959
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人