Textbook:
《计算机组成与设计——硬件/软件接口》    HI
《计算机体系结构——量化研究方法》           QR


这节我们来看CPU内部的一些东西。

Instruction Set Architecture

指令集是介于硬件(CPU microarchitecture / IO / ....)和软件(compiler / OS / ....)之间的一个interface。硬件(486-586-PentiumPro)和软件(Win98-WinXP)都会更新换代,但指令集很少变化(比如x86)。现在比较流行的是General-purpose register architecture,这也是我们重点学习的。早期还有stack architecture和accumulator architecture,不过已经不流行了...

Java VM:HI P89

Register

寄存器是在cpu内部的存储单元,访问简单,速度也非常快。

和前面说的cache不同,寄存器是对软件可见的(explictly managed)。比如下面的一段程序:

 void foo(){
....
} void bar(){
int a,b;
a=;
foo();
printf("%d\n", a);
}

foo()和bar()都可能会用满所有的寄存器。那么在Line 8调用foo()之前,编译器就要手动把bar()当前运行时寄存器的值备份一下(存到stack),等foo()结束后再还原回来。

Memory Addressing

指令可以分为以下几类:

  • Load/Store就是在内存和寄存器之间搬运数据......
  • ALU operation是用来计算的。它操作数据的主要来源是寄存器
    • 在RISC中,ALU inst只能从寄存器中读写,不能读内存地址。而在x86中一条指令最多可以读写1个内存地址

那么指令是如何进行memory addressing呢?要考虑如下几个问题:

  1. Bytes addressed。即每个地址包含多少个byte。大多数情况下是一次读一个byte(参考这张图)。也有些奇怪的机器是一次读一个word(多个bytes)
  2. Little/Big Endian
  3. Alignment。比如4bytes alignment表示每个数据的起始地址必须是4 bytes的倍数。

Addressing Mode:(PPT P6)

Control Flow Instructions

分支指令

几种常见的ISA

CISC:硬件资源少,人类手些汇编的硬核年代......指令集比较复杂,并且提供一些复杂指令,以便让program的汇编代码量尽量小

RISC:此时硬件资源已经多了,编译器技术也好一些了。因此需要只包括更简单的指令(fixed length,涉及更少的hardware control),以便支持instruction-level parallelism。这样即使需要的指令多了,但总体来看还是快不少。load-store architecture

但其实现在CISC和RISC差距已经没有很大了......像CISC的x86指令集,也加入了很多RISC的特性。比如用RISC Engine来执行microcode(动态解码后的CSIC指令)

RISC pipeline

PPT P14-

我们以Alpha为例来看看一个RISC ISA是怎样设计的吧。

指令种类:可以分为RR、RI、Load/Store、Branch、Jump五种(PPT P14-P16)

为了执行这些指令,我们定义了一个五级的流水线:

  • IF:Fetch 32bit instructions,并送到instruction memory
  • ID:Decode Instruction(通过电路...),然后送到对应的component
  • EX:进行计算
  • MEM:(有可能)涉及到访问内存
  • WB:将结果写回寄存器(Reg Array)

我们分别看看这五种指令各自是如何执行的:

PPT P19-24

......

计算机系统结构总结_Instruction Set Architecture的更多相关文章

  1. 【5分钟+】计算机系统结构:CPU性能公式

    计算机系统结构:CPU性能公式 基础知识 CPU 时间:一个程序在 CPU 上运行的时间.(不包括I/O时间) 主频.时钟频率:CPU 内部主时钟的频率,表示1秒可以完成多少个周期. 例如,主频为 4 ...

  2. 计算机系统结构总结_Multiprocessor & cache coherence

    Textbook:<计算机组成与设计——硬件/软件接口>  HI<计算机体系结构——量化研究方法>          QR 最后一节来看看如何实现parallelism 在多处 ...

  3. 计算机系统结构总结_Branch prediction

    Textbook:<计算机组成与设计——硬件/软件接口>  HI<计算机体系结构——量化研究方法>          QR Branch Prediction 对于下面的指令: ...

  4. 计算机系统结构总结_Scoreboard and Tomasulo

    Textbook:<计算机组成与设计——硬件/软件接口>  HI<计算机体系结构——量化研究方法>          QR 超标量 前面讲过超标量的概念.超标量的目的就是实现指 ...

  5. 计算机系统结构总结_Memory Hierarchy and Memory Performance

    Textbook: <计算机组成与设计——硬件/软件接口>  HI <计算机体系结构——量化研究方法>       QR 这是youtube上一个非常好的memory syst ...

  6. 计算机系统结构总结_Cache Optimization

    Textbook: <计算机组成与设计——硬件/软件接口>  HI <计算机体系结构——量化研究方法>       QR Ch4. Cache Optimization 本章要 ...

  7. 计算机系统结构总结_Memory Review

    这次就边学边总结吧,不等到最后啦 Textbook: <计算机组成与设计——硬件/软件接口>  HI <计算机体系结构——量化研究方法>       QR Ch3. Memor ...

  8. 计算机体系结构——CH1基本概念

    CH1基本概念 右键点击查看图像,查看清晰图像 CH1基本概念 目的与内容 了解计算机系统的完整概念 学习计算机系统的分析方法与设计方法 编写程序所必需了解的计算机属性 计算机系统结构简介 为什么要研 ...

  9. Linux Barrier I/O 实现分析与barrier内存屏蔽 总结

    一直以来.I/O顺序问题一直困扰着我.事实上这个问题是一个比較综合的问题,它涉及的层次比較多,从VFS page cache到I/O调度算法,从i/o子系统到存储外设.而Linux I/O barri ...

随机推荐

  1. BZOJ 4881: [Lydsy1705月赛]线段游戏 动态规划 + 线段树

    Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,. ...

  2. BZOJ 4897: [Thu Summer Camp2016]成绩单 动态规划

    Description 期末考试结束了,班主任L老师要将成绩单分发到每位同学手中.L老师共有n份成绩单,按照编号从1到n的顺序叠 放在桌子上,其中编号为i的成绩单分数为w_i.成绩单是按照批次发放的. ...

  3. sh_03_程序计数

    sh_03_程序计数 # 打印 5 遍 Hello Python # 1. 定义一个整数变量,记录循环次数 i = 0 # 2. 开始循环 while i < 3: # 1> 希望在循环内 ...

  4. mac 的 quickTime Player 设置播放速度

    按住 option 点击 下一个视频的图标每次调整幅度为0.1,大于 1.9 声音会消失. 按住 option+J 调慢播放速度 option+L 调快播放速度 每次调整幅度为0.1

  5. Luogu P5469 [NOI2019]机器人 (DP、多项式)

    不用FFT的多项式(大雾) 题目链接: https://www.luogu.org/problemnew/show/P5469 (这题在洛谷都成绿题了海星) 题解: 首先我们考虑,一个序列位置最右边的 ...

  6. 解决vuex保存的数据刷新页面时清空

    参考文章: vuex中store保存的数据,刷新页面会清空 主要解决代码: 1.更改store文件下index文件state的定义 const store = new Vuex.Store({ sta ...

  7. [python] Pythonic语法笔记

    Pythonic语法笔记 __new__ 在类实例化之前执行的,也就是在init之前执行,可以为这个类写操作.接受的参数不是self而是cls.只有在new方法里返回类才会执行init操作,需要返回父 ...

  8. 6、Shiro之自定义realm

    1.创建一个包存放我们自定义的realm文件: 创建一个类名为CustomRealm继承AuthorizingRealm并实现父类AuthorizingRealm的方法,最后重写: CustomRea ...

  9. FreeBSD上安装Cassandra 3.10

    哈哈,你居然点进来了,来吧,一起吐槽FreeBSD啊,装了一上午Cassandra 3.10都没有装成功, 终于,鄙人一条 shutdown -p now 结束了FreeBSD,默默打开了CentOS ...

  10. Dataframe的索引问题

    1 两个Dataframe相加时,一定要注意索引是否对应再相加,利用这个特点有时可以先用set_index()将某些列置为索引列,再进行相加. import pandas as pd df1 = pd ...