CPU在空闲的时候做什么-阿里云开发者社区

开发者社区> 优惠码领取> 正文

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 
版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10013 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
2500 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9154 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13812 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7336 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
22363 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4483 0
+关注
优惠码领取
阿里云优惠码阿里云推荐券bieryun.com
193
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载