在嵌入式中, CPU是如何取指,译码,执行和启动的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在嵌入式中, CPU是如何取指,译码,执行和启动的?相关的知识,希望对你有一定的参考价值。

   CPU内部由寄存器,控制单元,和逻辑运算器组成。寄存器有多种各司其职,有程序计数器,指令寄存器,数据寄存器,用来实现保存指令和执行指令。

   程序保存在硬盘中,你打开一个程序的时候,就把程序的指令+数据加载到了内存里,其中指令部分被随后加载到了CPU的缓存里面,然后CPU里面相应功能的寄存器把指令从缓存取到寄存器里面保存,这里是取指; 你取过来的指令,是由操作码和地址码组成的,分别表示执行什么操作和对谁操作,但是这些指令需要控制单元里面的一个叫做译码器的人来分析,分析这些取来的码是什么意思,然后根据此指定下一步的行动计划,去哪里找什么部件执行什么操作,这是译码。 随后数据寄存器把数据从内存里面加载到逻辑计算单元,进行运算,并把结果传回数据寄存器,这就是执行。

     CPU的寄存器里面有一个出厂的时候就已经写定了固化的默认值,保存了CPU一旦上电之后就会自动执行的第一条指令,你的设备一旦上电后,就会执行这个默认值,进行各种初始化操作的准备工作,同时这个固化的默认指令是属于引导程序的,引导程序是在操作系统之前运行的一段程序,用来初始化硬件,建立内存关系映射,引导你过渡到操作系统并为此创造环境。它会在运行完最后一个JMP指令后调到操作系统,然后把控制权交给操作系统。

参考技术A 有人会讲,这么做、那么做,其实,都是瞎猜的。

CPU 内部的操作,厂家,不会公开的。
即使公开,也是落后、淘汰不用的方法。

操作系统的硬件环境

一 中央处理器 (CPU)

微处理器是微机的硬件核心

主要包含指令执行的运算和控制部件,还有多种寄存器

对程序员来说,微处理器抽象为以名称存取的寄存器

8086内部结构有两个功能模块,完成一条指令的取指和执行功能

模块之一:总线接口单元BIU,主要负责读取指令和操作数

模块之二:执行单元EU ,主要负责指令译码和执行

 

指令执行的基本过程(1)

先从存储器中每次读取一条指令

然后执行这条指令

一个单条指令处理过程称为一个指令周期

程序的执行是由不断取指和执行的指令周期组成

指令执行的基本过程(2)

每个指令周期开始时,依据在程序计数器中的指令地址从存储器中取一条指令

在取指完成后根据指令类别自动将程序计数器的值变成下条指令的地址,自增1

取到的指令放在指令寄存器中

处理器解释并执行所要求的动作

 

cpu五类指令

访问存储器指令: 处理器和存储器间数据传送

I/O指令: 处理器和I/O模块间数据传送和命令发送

算术逻辑指令(数据处理指令): 执行数据算术和逻辑操作

控制转移指令: 指定一个新的指令的执行起点

处理器控制指令: 修改处理器状态,改变处理器工作方式

 

特权指令和非特权指令

特权指令:只能由操作系统使用的指令。

特权指令一般引起处理器状态的切换 处理器通过特殊的机制将处理器状态切换到操作系统运行的特权状态(管态) 然后将处理权移交给操作系统中的一段特殊代码,这一个过程称为陷入。

CPU通过处理器状态的标识判断当前运行的是操作系统还是一般应用软件。

 

汇编指令的组成

指令由操作码和操作数两部分组成。

操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分。

操作数是指令执行的参与者,即各种操作的对象。有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数。

每种指令的操作码: 用一个唯一的助记符表示(指令功能的英文缩写) 对应着机器指令的一个二进制编码。

指令中的操作数: 可以是一个具体的数值,可以是存放数据的寄存器或指明数据在主存位置的存储器地址。

 

操作码  操作数1,操作数2 

操作数2,称为源操作数 src,它表示参与指令操作的一个对象

操作数1,称为目的操作数 dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果

 

程序状态字PSW:根据运行程序对资源和机器指令的使用权限将处理器设置为不同状态

多数系统将处理器工作状态划分为管态和目态

管态:操作系统管理程序运行的状态,较高的特权级别,又称为特权态(特态)、核心态、系统态

目态:用户程序运行时的状态,较低的特权级别,又称为普通态(普态)、用户态

 

数据寄存器:用来存放计算的结果和操作数,也可以存放地址

变址寄存器:常用于存储器寻址时提供地址

指针寄存器:用于寻址内存堆栈内的数据

 

二、存储系统

作业必须把它的程序和数据存放在内存中才能运行 操作系统本身也要存放在内存中并运行 多道程系统中,若干个程序和相关的数据要放入内存。

存储器是是计算机的记忆部件,用来存放程序和数据。分类: 读写型的存储器 只读型的存储器。

 

内存(RAM): 随机访问存储器(RAM:Random Access Memory),主要用作存放随机存取的程序和数据 存放当前正在执行的程序和使用的数据,CPU可以直接存取。

速度快,但是成本高,容量小,断电以后内容会丢失。

可把数据存入其中任一地址单元,并可在以后的任何时候把数据读出,或者重新存入新的数据的一种存储器。

 

存储单元: 每个存储单元都有一个编号;被称为存储器地址 存储内容: 每个存储单元存放一个字节的内容

0002H单元存放有一个数据34H 表达为 [0002H]=34H

 

三、中断技术

及时处理设备的中断请求

它使得OS可以捕获用户程序发出的系统功能调用

防止用户程序中破坏性的活动等

中断:在CPU执行程序的过程中,出现了中断请求,CPU需暂停正在执行的程序,转去处理该事件(执行中断服务程序) 并在处理完毕后返回断点处继续执行被暂停的程序,这一过程称为中断。。

        CPU对系统发生的某个事件作出的一种反应。CPU暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的程序。断点处是指返回主程序时执行的第一条指令的地址。

特点:

1) 中断是随机的

2) 中断是可恢复的

3) 中断是自动处理的

中断的引入:

为了开发CPU和通道(或设备)之间的并行操作,当CPU启动通道(或设备)进行输入/输出后,通道 (或设备)便可以独立工作,CPU转去处理与此次输入/输出不相关的事情。

当通道(或设备)完成输入/输出后,通过向CPU发中断告诉CPU此次输入/输出结束,使CPU继续处理输入/输出以后的事情。

中断的类型

中断(外中断):

I/O中断

时钟中断

异常(内中断):

系统调用

缺页异常

断点指令

其他程序性异常 (如算术溢出等)

 

四、I/O系统

I/O控制使用下面几种技术:

程序控制

中断驱动

直接存储器存取(DMA)

通道

1、程序控制I/O技术

由处理器提供I/O相关指令来实现

I/O处理单元处理请求并设置I/O状态寄存器相关位

不中断处理器,也不给处理器警告信息

处理器定期轮询I/O单元的状态,直到处理完毕

I/O软件包含直接操纵I/O的指令

控制指令: 用于激活外设,并告诉它做什么

状态指令: 用于测试I/O控制中的各种状态和条件

数据传送指令: 用于在设备和主存之间来回传送数据

主要缺陷: 处理器必须关注I/O处理单元的状态,因而耗费大量时间轮询信息,严重地降低了系统性能

 

2、中断驱动I/O技术

为了解决程序控制I/O方法的主要问题:让处理器从轮询任务中解放出来,使I/O操作和指令执行并行起来

具体作法: 当I/O处理单元准备好与设备交互的时候 通过物理信号通知处理器,即中断处理器的执行

 

3、DMA技术

直接存储器访问(DMA:Direct Memory Access) 通过系统总线中一独立控制单元DMA控制器,自动控制成块数据在内存和I/O单元间的传送。 大大提高处理I/O的效能。

当处理器需要读写一整块数据时, 给DMA控制单元发送一条命令。 包含:是否请求一次读或写,I/O设备的编址,开始读或写的主存编址,需要传送的数据长度等信息。

处理器发送完命令后就可处理其他事情, DMA控制器将自动管理数据的传送。 当这个过程完成后, DMA控制器给处理器发一个中断,处理器只在开始传送和传送结束时关注一下就可。

处理器和DMA传送不完全并行,因为: 有时会有总线竞争的情况发生, 处理器用总线时可能稍作等待, 不会引起中断, 不引起程序上下文的保存。 通常过程只有一个总线周期。 在DMA传送时,处理器访问总线速度会变慢。 对于大量数据I/O传送,DMA技术很有价值。

 

4、通道

通道又称为I/O处理机,独立于中央处理器,是专门负责数据I/O传输的处理机。

它对外设实现统一管理 代替CPU对I/O操作进行控制 使CPU和外设可以并行工作

引入通道的目的: 为了使CPU从I/O事务中解脱出来 同时为了提高CPU/设备、设备/设备之间的并行度

 

以上是关于在嵌入式中, CPU是如何取指,译码,执行和启动的?的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式:ARM的流水线技术

CPU在取指令阶段的操作是啥?

ARM7 三级流水线

荣耀黄金

ARM1

1-3 冯诺依曼结构的小故事