首页 > 编程知识 正文

arm有多少条指令,arm支持哪几种指令集

时间:2023-05-04 22:17:57 阅读:153669 作者:4994

本文转载于http://www.wowo tech.net/arm v8a _ arch/wfe _ WFI.html

1 .前言

蜗牛很久以前就知道存在WFI和WFE两个指令,但一直看起来不明白。 最近计划研究CPU idle framework,因为WFI是使CPU进入idle状态的一种方法,所以我决心弄清它们。

wfi(waitforinterrupt )和wfe (wait for event )是将ARM核心置于低功耗标准模式的两个命令,由ARM architecture定义,由ARM core 听着很简单,为什么有两个指令? 它们的区别是什么? 使用场景是什么? 追根究底,很有趣呢。 例如,你能想象WFE和spinlock的关系吗?

2. WFI和WFE 1)共同点

WFI和WFE的功能非常相似,以ARMv8-A为例(参照DDI0487A_d_armv8_arm.pdf的记述)主要是“ARMv8-A”处理单元)

另外,由于ARM architecture没有规定“低功率标准状态”的具体形式,因此可以由ARM core自身发挥,根据ARM的建议,一般关闭标准状态(clock ) 以Cortex-A57 ARM core为例,将WFI和WFE称为“putthecoreinalow-powerstatebydisablingtheclocksinthecorewhilekeepingthecorepoweredup

2 )不同点

其差异体现在哪里? 主要表现在进入和退出方式上。

对于WFI,当您运行WFI命令时,ARM core会立即进入低功耗标准状态,直到出现WFI Wakeup events。

另一方面,WFE略有不同。 执行WFE命令后,根据Event Register(1个单位寄存器,每个PE一个)的状态,如果eventregister为1,则该命令清除并执行完成) standby Event Register为0时,与WFI一样,进入低功率标准状态,直到发生WFE Wakeup events。

WFI wakeup Event和WFE wakeup event可以分别将核心从WFI和WFE状态唤醒。 这两种event大部分相同,例如任何IRQ中断、FIQ中断等,几个细微的区别,请参见“DDI0487A_d_armv8_arm.pdf”,最大的区别在于WFE

SEV命令是用于变更Event Register的命令,有两个。 SEV更改所有PE上的寄存器。 SEVL,只修改本PE的寄存器值。 让我们来看看像WFE这样特殊设计的使用场景。

3 .使用场景1 ) WFI

WFI一般用于cpuidle。

2 ) WFE

WFE的一个典型使用场景用于spinlock (请参见arch_spin_lock )。 对于arm64,可以在arm64/include/asm/spinlock.h上找到)。 spinlock的功能是在不同的CPU核心之间保护共享资源。 使用WFE的流程如下。

a )资源空闲

b )访问Core1资源、访问锁定和获取资源

c )访问酷睿2资源,如果此时资源不可用,则运行WFE命令,将酷睿放入低功耗状态

d )释放核心1资源、释放锁定、释放资源,同时执行SEV命令,启动核心2

e )获得酷睿2资源

在以前的spinlock中,得不到资源时,会将Core放入busy loop中,但插入WFE命令可以节约耗电量,这大概是因为它因灾祸(失去了性能)而受益(降低了耗电量)吧。

原创文章,转发请注明出处。 蜗杆技术,www.wowotech.net。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。