CPU在空闲的时候做什么

简介: CPU在空闲的时候做什么 对于大部分负载并不重的计算机而言,可以说CPU大部分的时间都是停留在"idle task"中,在Windows中从任管理器中可以看到大部分的CPU时间都停留在System Idle Process,如下图所示: 在Linux中,idle task并不是一个独立的线程,但是可以通过top指令查看CPU的idle比例: 总的来说,在Intel x86架构CPU中,“idle task”的实现是通过执行HLT指令实现的。

CPU在空闲的时候做什么

对于大部分负载并不重的计算机而言,可以说CPU大部分的时间都是停留在"idle task"中,在Windows中从任管理器中可以看到大部分的CPU时间都停留在System Idle Process,如下图所示:



在Linux中,idle task并不是一个独立的线程,但是可以通过top指令查看CPU的idle比例:




总的来说,在Intel x86架构CPU中,“idle task”的实现是通过执行HLT指令实现的。当CPU执行HLT指令后,CPU就会停止指令的执行,并且让CPU处于HALT状态。当CPU处于HALT状态的时候,CPU虽然停止指令执行,并且CPU的部分功能模块将会被关闭(达到降低功耗的目的),但是CPU的LAPIC(Local Advanced Programmable Interrupt Controller)并不会停止工作,即CPU将会继续接收外部中断、异常等事件(事实上,CPU HALT状态的退出将由外部事件触发)。当CPU接收到这些外部事件的时候,将会从HALT状态恢复回来,执行中断服务函数,并且当中断服务函数执行完毕后,指令寄存器(CS:EIP)将会指向HLT指令的下一条指令,即CPU继续执行HLT指令之后的程序。
HLT指令是特权指令,所以需要在Ring 0中执行,对于Linux来说,只能由内核执行。

在Linux内核源码中,定时器将会周期性地发送时钟中断,该时钟中断的频率在编译的时候由CONFIG_HZ设置,一般被设置为250,即每秒钟定时器将会向CPU发送250个时钟中断。



当CPU没有可运行的任务的时候,CPU将会执行idle task(循环地执行HLT指令),即CPU执行HLT指令后,将会进入HALT状态。当CPU接收到时钟中断的时候,将会执行中断服务函数,然后继续执行idle task,进入HALT状态。如下图所示,即CPU周期性地进入HALT状态,并被唤醒,直到CPU检测到有可运行的任务。



从Linux内核的启动源码来看,在init/main.c:start_kernel()的最后将会调用rest_init()函数,rest_init()将会进行如下调用:

init/main.c:rest_init() ==> kernel/sched/idle.c:cpu_startup_entry() ==> kernel/sched/idle.c:do_idle()  ==> kernel/sched/idle.c:cpuidle_idle_call() ==> kernel/sched/idle.c:default_idle_call() ==> arch/x86/kernel/process.c:arch_cpu_idle(),在x86平台,x86_idle被赋值为arch/x86/kernel/process.c:default_idle() ==> safe_halt()

safe_halt()指向arch/x86/include/asm/irqflags.h:native_safe_halt()



最终由native_safe_halt()实现CPU的idle task,该函数只是简单地将中断使能,然后执行HLT指令,即停止CPU的运行,并做好接收中断退出HALT状态的准备。
--------------------- 
作者:河马虚拟化 
来源:CSDN 
原文:https://blog.csdn.net/lindahui2008/article/details/83051411?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!
相关文章
|
存储 数据采集 Prometheus
【云原生监控系列第一篇】一文详解Prometheus普罗米修斯监控系统(山前前后各有风景,有风无风都很自由)(一)
【云原生监控系列第一篇】一文详解Prometheus普罗米修斯监控系统(山前前后各有风景,有风无风都很自由)(一)
2196 0
【云原生监控系列第一篇】一文详解Prometheus普罗米修斯监控系统(山前前后各有风景,有风无风都很自由)(一)
|
6月前
|
监控 5G 定位技术
高精度时间统一设备构建时间同步基石
西安同步电子科技有限公司推出的SYN012型时统设备,是支撑现代社会运行的高精度时间同步解决方案。设备采用GPS/北斗双模授时,支持IRIG-B、NTP/SNTP、PTP等多协议,具备30ns授时精度和1μs守时精度。广泛应用于电力系统、金融交易、轨道交通、工业自动化等领域,满足亚微秒级同步需求。其模块化设计与冗余备份确保可靠性,全生命周期服务体系提供专业支持。作为国产化替代标杆,该设备定义了时间同步的“中国标准”,为数字经济提供坚实保障。
|
JavaScript
【ElementUI】Vue+ElementUI多文件上传,一次请求上传多个文件!
教大家一次请求,上传多个文件。 ElementUI如果是默认方案,上传多张图片并不是真正的一次上传多张,而是发送多次请求,一次请求携带一张图片。
1414 0
|
11月前
|
数据挖掘 数据安全/隐私保护
抖音运营:解锁流量增长密码
在短视频盛行的时代,抖音成为流量蓝海,众多创作者和品牌竞相涌入。要在激烈竞争中脱颖而出,除了创作优质内容和巧妙运营外,数据分析至关重要。精准定位目标受众,挖掘创意与热门趋势,优化视频制作、剪辑节奏及发布时间,积极互动并分析关键数据指标(如播放量、点赞数、完播率等),不断优化运营策略,才能实现流量快速增长和账号的长期发展。
1205 11
|
Linux 调度
Linux内核的基础设施:工作队列、等待队列
本文介绍了Linux内核中的工作队列和等待队列机制,通过一个具体的Demo演示了如何使用等待队列进行条件等待和唤醒,以及工作队列的创建和调度,同时展示了修改唤醒条件导致无法唤醒进程的情况。
404 0
|
机器学习/深度学习 人工智能 芯片
AI芯片设计与优化:算力提升、能耗降低与硬件加速器的发展趋势
AI芯片设计与优化:算力提升、能耗降低与硬件加速器的发展趋势
1889 0
|
安全 Java 大数据
基于大数据的旅游系统的设计与实现(论文+源码)_kaic
基于大数据的旅游系统的设计与实现(论文+源码)_kaic
|
存储 缓存 固态存储
SPDK应用框架
SPDK应用框架
币安现货网格交易策略搭建执行代码实例分析
币安现货网格交易策略搭建执行代码实例分析
|
编译器 Linux C语言
PCI配置空间简介
一、PCI配置空间简介 PCI有三个相互独立的物理地址空间:设备存储器地址空间、I/O地址空间和配置空间。配置空间是PCI所特有的一个物理空间。由于PCI支持设备即插即用,所以PCI设备不占用固定的内存地址空间或I/O地址空间,而是由操作系统决定其映射的基址。
3674 0