未完待续英文


程序在处理器中的运行机制

要理解任务调度,首先得了解任务切换的原理。而要理解任务切换,关键在于掌握程序在处理器中的运行方式。

处理器内部结构概览

为了理解程序在处理器中的运行过程,我们首先得对处理器的内部结构有个大致的了解。处理器的结构大致可以由以下几个部分组成:寄存器堆、运算单元、控制单元、流水线结构、指令存储器以及数据存储器。处理器执行指令通常包含五个阶段:取指、译码、执行、访存和回写。

取指与执行详解

取指阶段即从指令存储器中读取指令。译码阶段则是对读取的指令进行解析。执行阶段则根据解析的指令进行相应的操作或计算地址。访存阶段是从数据存储器中读取操作数,而回写阶段则是将计算结果存回到寄存器中。

处理器的简化模型

简化模型中,处理器主要由寄存器堆、运算单元、指令存储器以及数据存储器构成。其中,寄存器堆包括PC(程序计数器)、通用寄存器堆以及状态寄存器等。而指令存储器和数据存储器的使用对于程序的运行流程具有重要影响。

寄存器堆的工作原理

以ARM CM3内核为例,寄存器堆包含17个寄存器,处理器正是通过操作这些寄存器来实现程序的运行。为了更好地理解处理器的操作方式,我们可以通过几个汇编指令来加以熟悉。

指令存储器的功能与特性

在嵌入式领域,代码的二进制格式存放在指令存储器中,通常使用只读存储器ROM来存放。目前很多指令存储器采用NOR-FLASH,其优势在于可反复擦写并且支持芯片内执行(XIP)。除了保存代码数据外,指令存储器还负责保存静态区的非零数据。

数据存储器的分类与作用

数据存储器主要分为静态区、栈区和堆区三个区域。静态区存放静态变量和全局变量,栈区用于存放局部变量数据,而堆区则用于存放动态申请的数据。

程序运行所需资源

程序运行时,会使用到多种资源,包括寄存器堆的数据、栈空间的数据、堆空间的数据以及静态空间的数据等。这些资源的变化将直接影响程序的运行状态。

程序运行过程解析

假设有一程序进入无限循环,并在循环内部包含五个表达式。程序会按照表达式1至表达式5的顺序进行循环执行。如果我们改变处理器的状态,比如使用“神奇的力量”将处理状态改变为某个特定值,那么处理器的下一个执行路径将发生变化。

任务切换的原理与应用

任务切换的核心思想在于改变处理器的“总值”,即通过改变处理器的状态来切换任务。这种机制在处理器复位、系统中断以及操作系统中的程序切换等场景中都有广泛应用。例如,处理器复位就是通过给予一个特定的总值来重新开始程序运行;而系统中断则是在保存现场后执行中断程序,再恢复现场返回用户程序。