深入理解计算机系统阅读笔记-第四章

2024-09-07 00:12

本文主要是介绍深入理解计算机系统阅读笔记-第四章,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第四章 处理器体系结构

一个处理器支持的指令和指令的字节级编码称为它的ISA(instruction-set architecture,指令集体系结构)。不同家族处理器有不同的ISA。ISA在编译器编写者和处理器设计人员之间提供了一个概念抽象层,编译器编写者只需要知道允许哪些指令,以及他们是如何编码的;而处理器设计者,必须建造出执行这些指令的处理器。

ISA模型看上去是顺序执行的,实际上同时处理多条指令的不同部分,可以提升性能。

本章自定义设计一个Y86处理器,它的指令集称为Y86指令集。

4.1 Y86指令集体系结构

我们设计的Y86处理器,类似于IA32,包含下面四部分:
八个程序寄存器:每个寄存器存储一个字,寄存器%esp被入栈,出栈调用和返回指令作为栈指针,其他寄存器没有固定含义或固定值。
三个一位的条件码:它们保存最近的运算的相关信息。
程序计数器(PC):存放着当前正在执行指令的地址。
存储器:保存程序和数据,可以看成很大的数组。Y86用虚拟地址来引用存储器位置。硬件和软件操作系统协作将虚拟地址转换成物理地址。

下图是我们设计的Y86指令集描述,这个就是我们要设计的处理器要实现的目标。左边是汇编表示,右边是字节编码。我们使用小端法。

指令的字节编码最多6个字节(0xff是8位,一个字节
第0字节:称为指令指示符。fn字段表示是某个整数操作(OP1)或分支条件(jXX)。

我们把IA32的movl拆分成4个指令,显示地指明源和目的的类型,i立即数,r寄存器,m存储器。

opl:是4个整数操作指令addl,subl,andl,xorl。它们只对寄存器数据进行操作,这些指令会设置条件码。

jXX:跳转指令jmp,jle,jl,je,jne,jg,jge。根据分支指令类型和条件码选择分支。dest是绝对地址。

call指令将返回地址入栈,然后调到目的地址。dest是绝对地址。

ret指令从call指令的调用中返回。

pushl和popl实现入栈和出栈。

halt:停止执行指令。

fn指令字节码

如下图所示,8个寄存器都有相应的寄存器标识符。程序寄存器被存放在cpu的一个寄存器文件中,这个寄存器文件就是一个小的,以寄存器ID作为地址的随机访问存储器。图4.2中的rA,rB就对应这8个寄存器。当操作数不是寄存器时,就用ID为8的表示,图4.2中的8就是这个意思。

通过上面这些规则,我们可以把汇编语言转换成十六进制字节码,反之亦然。

例如

rmmovl %esp 0x12345(%edx)的转换过程如下:

rmmovl %esp 0x12345(%edx) -->404245230100
rmmovl = 40
%esp = rA = ID 4
%edx = rB = ID 2
0X12345 = D = 0x12345补齐8位=0x00012345 = 小端452301100

指令集的一个重要特性就是字节编码必须有唯一解释 。任何一个字节序列只能对应唯一的指令。

4.2 逻辑设计和硬件控制语言HCL

4.2.1 逻辑门

下图是3个逻辑门的标准符号,下面是对应的HCL表达式。逻辑门只对位进行操作。

4.2.2 组合电路和HCL布尔表达式

将多个逻辑门组合起来,可以得到组合电路,有两个基本原则:

1. 逻辑门的输出不可以连到一起,因为会相互影响。

2. 这个网必须是无环的,因为该组合电路的计算函数有歧义。

两个简单的组合电路

 

 4.2.3 字级的组合电路和HCL整数表达式

通常需要字级操作,这就需要更复杂的组合电路,下面列了几个组合电路的符号图和HCL表达式

1. 字等于电路

2. 字等于的HCL表达式

bool Eq = (A == B);

 

 字级多路复用HCL表达式

int Out = [S: A;1: B;
];

 3. 多路选择的多路复用

HCL表达式:

int Out4 = [!S1 && !S0: A;!S1: B;!S0: C;1: D;
];

4. 取最小值 

HCL表达式:

int Min3 = [A < B && A < C: A;B < A && B < C: B;1: C;
];

算术逻辑运算单元ALU是非常重要的组合电路,其抽象如下图

 

A和B是数据输入,上方的0、1、2、3是控制输入,对应Y86指令集的四个整数操作addl,subl,andl,xorl。

4.2.4 集合关系(Set Membership)

处理器设计中,经常需要判断一个信号是否属于一组信号中的一个,使用表达式

iexpr in {iexpr1, iexpr2,...iexpr10}

4.2.5 存储器和时钟控制

为了产生时序电路(sequential circuit),也就是有状态,并且在这个状态上的系统,需要引入安位存储信息的设备,考虑如下两类:

时钟寄存器:简称寄存器,存储单个位或字。时钟信号控制寄存器加载输入值。

随机访问存储器:简称存储器,存储多个字,用地址来选择读写哪个字。常见的有处理器的虚拟存储器系统和寄存器文件。

硬件通过时钟控制化寄存器的值,如高电平保持,低电平变化。

下图是一个寄存器文件,虽然不是硬件组合电路,但原理是一样的,当向src*写入一个值后,过一段时间,就可以在val*上得到对应的值。例如向srcA设置为3,就会读%ebx的值,然后这个值就会出现在valA上。

4.3 Y86的顺序(sequential)实现

SEQ:顺序处理器

4.3.1 将处理组织成阶段

取址(fetch):从存储器读入指令,地址为PC的值。从指令中抽取出指令指示符字节两个4位部分,称为icode指令代码和ifun指令功能。取的值有多种可能:
        1. 一个寄存器指示符字节,指明一个或两个寄存器操作数指示符rA和rB。
        2. 四字节常数valC。
        人理解L取出的内容是4.1中的字节码,可以转换成汇编语言后理解。
        它按顺序的方式计算下一条指令的地址valP,valP等于PC的值加上已取出的指令的长度。

解码(decode):从寄存器文件读入最多两个操作数,得到valA或/和valB。通常它读入指令rA和rB字段指明的寄存器,也有些指令是读寄存器%esp的。

执行(execute):ALU进程工作,有如下几种:
        1. 执行指令指明的操作(根据ifun的值),计算存储器引用的有效地址;
        2. 增加或减少栈指针;
        3. 设置条件码,对于跳转指令来说,这一阶段会检查条件码和(ifun)给出的分支条件,看是否选择分支。

访存(memory):将数据写入存储器或从存储器读出数据,读出的值为valM。

写回(write back):最多可以写两个结果寄存器文件。

更新PC:将PC设置成下一条指令地址。

处理器循环执行上述几个阶段,只有在遇到halt或发生错误时才会停止。

下图展示了三个机器指令在每个阶段的动作。

以这个例子具体来看

 

第3行指令subl

 第5条指令rmmovl

第6行pushl

 

第8行je

 

第13行ret

 

4.3.2 SEQ硬件结构

通过下面的硬件抽象图,学习图中的硬件单元和各个阶段关联

取址:指令存储器将PC作为地址,读取一个指令大小的字节,PC增加器计算valP。

解码:从寄存器文件的A、B两端读取valA和valB。

执行:ALU根据指令类型进行相应计算valE,可能会设置条件码。

访存:数据存储器读出或写入一个存储器字。指令和数据存储器访问的是相同的存储器位置,但是用于不同的目的。

写回:寄存器文件有两个写端口,M端口用于写从存储器中读出的值,E端口用来写ALU计算出的值。

下图是一个更详细的SEQ所需硬件,简单说明下图形表示:

用带淡点的浅灰色方框:表示硬件单元。比如存储器,ALU等。

灰色圆角矩形:表示控制逻辑块。用于从一组信号源中进行选择,或用来计算布尔函数。

白色圆角方框:线路的名字。

中等粗的线:表示宽度为字长的数据连接。实际上代表一簇32根线。

比字长线细一点的线:表示宽度为字节或者更小的数据连接。根据数据类型,实际上代表一簇4或8根线。

点虚线:表示单个位的连接。代表芯片上单元与块之间传递的控制值。

4.3.3 SEQ的时序(timing)

提前总结,就是新周期开始的上升沿,会把逻辑组合的值更新到寄存器,计数器等状态设备。

以下图为例介绍,硬件如何执行第3、4条指令的。 

在时钟周期3开始的时候,状态元素使第2条命令结束的状态,地址0x00c载入程序计数器中,这样就会取出和处理第3条指令。值沿着组合逻辑流动,包括读随机访问存储器,在3周期末尾,组合逻辑为条件码产生了新值000,但没更新到条件码寄存器;更新了程序寄存器%ebx,以及程序计数器的新值0x00c,此时逻辑组合已经更新了,但是状态没有更新。

在时钟周期4开始的时候,有上升沿,会更新条件码寄存器,程序计数器,寄存器文件。但组合逻辑还没对这些变化做出反应。在这个周期内会取出和执行第4条指令。

4.3.4 SEQ的阶段实现

常用的HCL如下表

取址阶段:

 

4.4 流水线的通用原理

4.5 Y86的流水线实现

4.6 小结

这篇关于深入理解计算机系统阅读笔记-第四章的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143514

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

深入手撕链表

链表 分类概念单链表增尾插头插插入 删尾删头删删除 查完整实现带头不带头 双向链表初始化增尾插头插插入 删查完整代码 数组 分类 #mermaid-svg-qKD178fTiiaYeKjl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-