CSAPP(3):处理器如何执行指令

前一章叙述了c语言如何转化为汇编程序,如何使用汇编程序。但是,汇编程序具体是如何执行的呢?例如(add %eax %edx)这条指令,我们知道它的功能,处理器是何如执行指令来获得想要的结果?——这是本章的主题。

(一)Y86指令集体系结构

为了简化问题,我们不使用Intel和ATT的指令集体系结构,抽象简化一个Y86。Y86的定义了各种状态元素、指令集及其编码、编程规范、异常事件处理。

(二)存储器和时钟

存储设备都是由同一个时钟控制的。时钟是一个周期性的信号,决定什么时候把新值加载到设备中。

存储设备分两种:

1)时钟寄存器(硬件寄存器),存储单个位或字,时钟信号控制寄存器加载输入值;

2)随机访问存储器(存储器)存储多个字,用地址来选择该读写哪个字,包括:处理器的虚拟存储系统、程序寄存器等。

(硬件和机器级编程,“寄存器”这一概念是有细微差距的。硬件中,寄存器是直接连接到电路中的;而机器级编程中,寄存器是寄存器文件中可寻址的字,地址为寄存器ID。为避免歧义,两类寄存器分别称为:硬件寄存器和程序寄存器。)

(图为时钟寄存器工作方式,Y86中用时钟寄存器保存程序计数器(PC)、条件代码(CC)和程序状态(Stat))

(三)指令执行6大阶段

下面是Y86各个指令对应于6各阶段的分解,可以对照上面的说明仔细对照

(四)SEQ处理器

我们直接实现上述的6大阶段对应的硬件结构,称为SEQ处理器

上面展示了每条指令所对应的分阶段执行情况,现在我们把这些指令汇总,给出每个阶段的指令情况:

(相应的need_regids, need_valC;  srcB, dstM; aluB; mem_data, mem_write指令情况见课本)

(五)流水线

SEQ实现的问题是:一个时钟周期内,必须完成6大阶段。故而时钟周期必须非常慢。所以我们使用流水线模型。

流水线的两个重要概念:

throughput(吞吐量):单位时间内服务的顾客总数;

延迟(latency):服务一个用户所需要的时间。

流水线模型需要在各个阶段之间都放上流水线寄存器

下面是流水线的图例说明:

可以看到流水线的巨大优点,然而流水线就没有一点问题吗?

1. 将系统计算划分为一组具有相同延迟的阶段是很严峻的挑战;

2. 流水线过深的话,收益反而下降。(现在处理器采用很深的(15+阶段)流水线,Y86采用5阶段流水线)

3. 带反馈的流水线。1)data dependency(数据相关):相邻指令之间可能是相关的。流水线模式下,可能下一条指令需要的数据,上一条指令还没产生。2)control dependency(控制相关):下一条指令是否执行依赖的条件,上一条指令还没有计算出来。

当我们实现流水线结构时,我们要解决第三个问题。

(六)Y86的流水线实现——PIPE-

首先对于SEQ,我们将PC的计算挪到取指阶段(在时钟开始是计算,而不是结束时计算),然后再在各个阶段之间加上流水线寄存器:

在PIPE-结构的基础上,根据我们之前的学习,只要再解决几个大问题即可:

1.如何解决数据相关?

2.如何解决控制相关?重点是ret指令和条件跳转指令

3.如何处理异常指令?

解决数据相关

需要仔细的体会这一过程,尤其是时钟控制下,状态更新如何进行。

解决控制相关

这一问题分解来看,需要分三个部分:1.如何预测下一个PC值?2.如何处理ret指令?3.如何处理预测错误分支?

处理异常指令

对于控制相关问题,还需要多做一些说明,如何多个控制问题组合在了一起,我们应该如何处理?这一问题留到最后作为补充、

(七)PIPE处理器实现

根据上面的讨论,我们只要在PIPE-中加入上述问题的解决方案之后,就得到了我们想要的PIPE处理器。

1.实现转发。只需要添加几个电路即可实现。

具体的PIPE的HCL描述,见课本。

2.实现暂停和取消指令

在此新型流水线寄存器的基础上,很容易实现暂停某指令或者取消某指令,由此,我们就可以实现之前问题的解决方案。

(八)控制相关情况的组合

时间: 2024-10-20 21:18:28

CSAPP(3):处理器如何执行指令的相关文章

第四章处理器体系结构 学习报告

第四章  处理器体系结构 4.1 Y86指令集体系结构 定义一个指令集体系结构,例如Y86,包括定义各种状态元素.指令集和他们的编码.一组变成规范和异常事件处理. 4.1.1 程序员可见的状态 ①程序员可见的状态:Y86中每条指令都会读取或修改处理器状态的某些部分.这里的“程序员”既可以是用汇编代码写程序的人,也可以是产生机器代码的编译器. Y86的处理器状态类似IA32.有8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%esp和%ebp.处理器的每个程序寄存器存储一个字.

信息安全系统设计基础期中总结

Chapter 00 Linux基础 man命令调用手册页 man <command_name> 手册通常被分为8个区段,要查看相应区段的内容,就在 man 后面加上相应区段的数字即可: 1 一般命令 2 系统调用 3 库函数,涵盖了C标准函数库 4 特殊文件(通常是/dev中的设备)和驱动程序 5 文件格式和约定 6 游戏和屏保 7 杂项 8 系统管理命令和守护进程 man有一个-k 选项用起来非常好,这个选项让你学习命令.编程时有了一个搜索引擎,可以举一反三.结合后面学习的grep 命令和

Linux第五次学习笔记(10.11-10.18)

1Y86指令集体系结构 ISA:指令集体系结构,一个处理器支持的指令和指令的字节级编码 程序员可见的状态 Y86程序中的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态.其中包括: 8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp. 条件码:ZF(零).SF(符号).OF(有符号溢出) 程序计数器(PC):存放当前正在执行的指令的地址 存储器:很大的字节数组,保存着程序和数据.Y86系统用虚拟地址来引用存储器的位置,硬件和操作系统软件联

5233杨光--第六周实验报告

第四章 处理器体系结构 指令体系结构:一个处理器支持的指令和指令的字节级编码 4.1Y86指令集体系结构 Y86:包括定义各种状态元素.指令集和它们的编码.一组编程规范和异常事件处理. 4.1.1 程序员可见状态 Y86程序中的每条指令都会读取或修改处理器状态的某些部分.Y86具体包括:8个程序寄存器.3个条件码ZF\SF\OF.程序计数器(PC) Y86用虚拟地址引用存储器位置. 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态. 4.1.2 Y86指令 4.1.4 Y86异常

20135316王剑桥 linux第五周课实验笔记

4.1.1程序员的可见的状态 ———— Y86的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态.如图1所示. 1.程序寄存器(Program registers): %eax, %ecx, %edx, %ebx, %esi,%edi, %esp和%ebp.都是32位的. 2.条件码(Condition codes): ZF(零标志), SF(符号标志), OF(溢出标志).用来保存最近的算术或逻辑指令造成的影响. 3.程序计数器(PC):存放当前正在执行的地址. 4.存储器(Me

ARM汇编基础(iOS逆向)

1. ARM汇编基础 在逆向一个功能的时候,往往需要分析大量的汇编代码,在iOS逆向中,ARM汇编是必须掌握的语言,本文总结了ARM汇编的基础知识,如果你想了解更多,请参考狗神的小黄书<iOS逆向逆向工程>或ARM官方手册. 1.1 寄存器,内存和栈 在ARM汇编里,操作对象是寄存器,内存和栈 ARM的栈遵循先进后出,是满递减的,向下增长,也就是开口向下,新的变量被存到栈底的位置;越靠近栈底,内存地址越小 一个名为stackPointer的寄存器保存栈的栈底地址,成为栈地址. 可以把一个变量给

20145311 《信息安全系统设计基础》第六周学习总结

20145311 <信息安全系统设计基础>第六周学习总结 教材学习内容总结 书上那几个表还是挺重要的 一个程序编译成在一种机器上运行,就不能在另一种机器上运行寄存器%esp被入栈.出栈.调用和返回指令作为栈指针程序计数器PC存放当前正在执行指令的地址三个一位的条件吗:ZF.SF.OF保存着最近的算数运算或逻辑运算所造成影响的有关信息Y86指令集:每个指令的第一个字节表明指令的类型,高4位是代码部分,低4位是功能部分指令集的一个重要性质就是字节编码必须有唯一的解释IA32(复杂指令集计算机CIS

Perfmon - Windows 自带系统监测工具

本文转载自oscar999 一. 简述 可以用于监视CPU使用率.内存使用率.硬盘读写速度.网络速度等. Perfmon提供了图表化的系统性能实时监视器.性能日志和警报管理,系统的性能日志可定义为二进制文件.文本文件.SQLSERVER表记录等方式,可以很方便地使用第三方工具进行性能分析. perfmon.exe 文件位于C:\Windows\System32目录下. 使用方法: 1)开始 - 运行,输入 perfmon 后回车,即可打开perfmon.exe. 2)在 perfmon.exe

Perfmon - Windows 自带系统监测工具(转)

本文转自:http://blog.csdn.net/oscar999/article/details/7918385 一. 简述 可以用于监视CPU使用率.内存使用率.硬盘读写速度.网络速度等. Perfmon提供了图表化的系统性能实时监视器.性能日志和警报管理,系统的性能日志可定义为二进制文件.文本文件.SQLSERVER表记录等方式,可以很方便地使用第三方工具进行性能分析. perfmon.exe 文件位于C:\Windows\System32目录下. 使用方法: 1)开始 - 运行,输入