zoukankan      html  css  js  c++  java
  • 计算机系统结构总结_Instruction Set Architecture

    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)。比如下面的一段程序:

     1 void foo(){
     2     ....
     3 }
     4 
     5 void bar(){
     6     int a,b;
     7     a=233;
     8     foo();
     9     printf("%d
    ", a);
    10 }

    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

    ......

  • 相关阅读:
    [转]Hamcrest使用方法实例
    Maven配置浅析
    Guava API
    awk排序作业
    [转]awk使用手册
    Vue源码探究-全局API
    vue 组件间传值
    在2018年如何优雅的开发一个typescript语言的npm包?
    PHP四种序列化方案
    从 0 到 1 再到 100, 搭建、编写、构建一个前端项目
  • 原文地址:https://www.cnblogs.com/pdev/p/11736014.html
Copyright © 2011-2022 走看看