CSAPP浅学心得

系列文章目录

处理器的体系结构


学习内容:

1、初步认识了处理器的指令集体系结构

2、定义处理器指令集中的部分指令以及编码

3、认识处理器处理指令的过程(6大阶段)以及不同类别指令之间相同阶段的差异

4、六大阶段的硬件设计


更新时间:

2021年12月27日(未完待续)


学习产出:

首先,我们需要进行一些基础定义。

定义了 15 个64 位的程序寄存器,相比于 x86,省略了%r15 以简化指令的编码。和 x86 一样,寄存器%rsp 被定义为栈指针,其他 14 个寄存器无固定含义。此外,只保留了 x86 中的零标志(ZF)、符号标志(SF)和溢出标志(OF)。程序计数器 PC 用来存放当前正在执行的指令的地址,状态码Stat 用来表示程序的执行状态。

为了简化指令集,将movq 指令分成了 rrmovq、irmovq、rmmovq 和 mrmovq 四种。movq 前面的两个祖母分别表示了源和目的的格式,例如irmovq 的源操作数是立即数(Immediate),目的操作数是寄存器(Register)。

1、指令编码与数据编码

上图中每条指令的第一个字节表明指令的类型。这个字节分为两部分,每部分占 4 个比特位,高四位表示指令代码,低四位表示指令功能。

为了方便在指令编码中使用寄存器,我们需要给寄存器进行编号:

 接下来分别对整数的操作、跳转、传送和系统操作的指令进行定义。

(1)此处定义的整数操作指令只允许对寄存器中的数据进行操作;

(2)条跳转指令的跳转条件和 x86-64 中的跳转指令相同,都是根据条件码的某种组合来判断是否进行跳转;

(3)条传送指令与数据传送指令 rrmovq 有相同的指令格式,只有条件码满足条件时才会更新目的寄存器的值;

(4)系统操作指令主要有:halt、nop、call和ret、push和pop

halt 指令停止指令的执行,执行该指令会导致处理器停止,并将状态码设为HLT;
nop 指令表示一个空操作;
call 和 ret 指令分别实现函数的调用和返回;
push 和 pop 指令分别实现入栈和出栈的操作。

有了如上的指令编码,可以将 Y86-64 的汇编代码翻译成二进制表示。

例如:rmmovq %rsp, 0x123456789abcd(%rdx)-->40 42 cd ab 89 67 45 23 01 00

2、处理器执行指令的过程(组织为6大阶段)

(1)取址:处理器执行所有的指令都需要取址。在 Y86-64 指令系统中,指令的长度不是固定的,因此取址阶段需要根据指令代码判断指令是否含有寄存器指示符、是否含有常数来计算当前的指令长度。
(2)译码:在译码阶段中,处理器从寄存器文件中读取数据。寄存器文件有两个读端口,可以支持同时进行两个读操作。
(3)执行:指令被正式执行的阶段。在该阶段中,算术逻辑单元(ALU)主要执行三类操作:执行算术逻辑运算、计算内存引用的有效地址、针对 push和 pop指令的运算。
(4)访存:顾名思义,对内存进行读写操作的阶段。
(5)写回:将执行结果写回到寄存器文件中。
(6)更新:将 PC 更新为下一条指令的地址。

3、subq指令、irmovq指令、rmmovq指令、pushq指令和je指令的各个阶段

4、六大阶段的硬件设计

(1)取址阶段的硬件设计

1)在取址阶段中,取址操作以程序计数器(PC)的值为起始地址。为了保证每次取址操作至少能够获得一条完整的指令,取址操作每次从指令内存中读取 10 各字节。
2)接下来将这 10 字节分为两部分,第一部分占 1 字节,第二部分占 9 字节。
3)随后名为 Split 的硬件单元处理第一部分。它将这个字节又分成两部分,每部分占 4 个比特位,使这个字节分为两个字段,分别为指令代码和指令功能,用 icode 和ifun 表示。对于剩下的 9 个字节,我们通过名为Align 的硬件单元来产生寄存器字段和常数字段。
4)根据 icode 可以确定当前指令的状态信息,例如指令的合法性。如果 icode 在 0x0 到 0xB 之间,那么它就是一条合法指令。此外,通过 icode 还可以判断当前指令是否包含寄存器指示符字节和常数字节。通过前面说的判断结果,就可以计算出当前指令的长度。
5)与此同时,还可以通过将 PC 值加上当前的指令长度来计算内存中下一条指令的地址,用于后续的更新阶段。

(2)译码阶段的硬件设计

1)译码阶段的操作是从寄存器文件中读取数据,在 Y86-64 处理器中寄存器文件有两个读端口,它支持同时进行两个读操作,两个读端口的地址输入为 srcA 和 srcB,从寄存器文件中读出的数值通过 valA 和 valB 输出。
2)读端口的 srcA 和 srcB 用于产生寄存器的 ID,这需要寄存器指示符 rA 及 rB。

(3)执行阶段的硬件设计

执行阶段的核心部件 ALU 根据指令功能 ifun 来判断要对输入的操作数进行何种运算。每次运行时,ALU 都会产生三个与条件码相关的信号——零、符号、溢出。

(4)访存阶段的硬件设计

该阶段的硬件设计主要包含以下四个控制块:
1)读控制块,用于进行读操作。
2)写控制块,用于进行写操作。
3)内存地址控制块,用于产生内存地址。
4)数据输入控制块,用于输入数据。

(5)写回阶段的硬件设计

(6)更新阶段的硬件设计

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Proxy(代理)是一种在计算机网络中广泛应用的中间服务器,用于连接客户端和目标服务器之间的通信。Proxy csapp是一个与计算机系统应用(Computer Systems: A Programmer's Perspective)相关的代理服务器。 Proxy csapp的设计目的是为了提供更高效的网络通信,增强系统的安全性,并提供更好的用户体验。在Proxy csapp中,客户端的请求首先会被发送到代理服务器,然后由代理服务器转发给目标服务器,并将目标服务器的响应返回给客户端。这种中间层的机制可以提供很多功能,如缓存、负载均衡、安全认证等。 在csapp中,Proxy csapp可以被用于优化网络数据传输的效率。代理服务器可以对客户端请求进行调度和协商,以减少网络延迟和数据传输量。通过缓存常用的数据和资源,代理服务器可以减少重复的数据传输和目标服务器的负载,提高网络性能和响应速度。 此外,Proxy csapp还可以提供安全的网络通信环境。代理服务器可以拦截和过滤网络流量,用于检测和阻止恶意攻击、垃圾邮件等网络安全威胁。代理服务器还可以对用户进行身份验证和授权,保护敏感数据的安全性。 最后,通过Proxy csapp可以实现更好的用户体验。代理服务器可以根据用户的需求进行个性化的服务,如按地理位置提供更快的网络连接、提供访问限制和控制等。代理服务器还可以对网络流量进行压缩和优化,提高网络传输效率,减少用户的等待时间。 总之,Proxy csapp在计算机系统应用中是一个重要的代理服务器,它可以提供高效的网络通信、增强系统的安全性,并带来更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值