zoukankan      html  css  js  c++  java
  • 【转载】CPU架构、指令集与指令集体系结构(ISA)

    最近学习计算机系统基础,了解到指令集体系结构。

    对CPU架构、指令集和指令集体系结构的关系不清楚,特此记录。

    指令集体系结构(ISA)包括 指令集、指令集编码、基本数据类型等。

    CPU架构 实现了 指令集

    ------------------------------------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------------

    下文转自http://blog.csdn.net/u010297957/article/details/49950643

    作者:有且仅有

    1. 指令集体系结构(Instruction-Set Architecture, ISA)


    1.1 定义

    一个处理器支持的指令和指令的字节级编码就是这个处理器的ISA,包括很多个部分:

    • 指令集
    • 指令集编码
    • 基本数据类型
    • 一组编程规范
    • 寄存器
    • 寻址模式
    • 存储体系
    • 异常事件处理
    • 中断
    • 外部I/O

    不同的处理器家族,例如Intel IA32、IBM/Freescale PowerPC和ARM,都有不同的ISA。维基百科 - Architecture list

    1.2 作用

    1. ISA在编译器编写者(CPU软件)和处理器设计人员(CPU硬件)之间提供了一个抽象层
      • 处理器设计者:依据ISA来设计处理器
      • 处理器使用者(如:写编译器的牛*程序员):依据ISA就知道CPU选用的指令集,就知道自己可以使用哪些指令以及遵循哪些规范
    2. 定义处理器上的软件如何构建,这是ISA的最重要内涵,现代处理器都是支持高级语言编程、操作系统等等特性,ISA要定义出指令集内的指令是如何支撑起C语言里堆栈、过程调用,操作系统里异常、中断,多媒体平台里数字图像处理、3D加速等等。

    1.3 TIPS

    1. 常见的一个误解的答案:指令集并不存储于CPU中,应该这样说:CPU本身是指令集(结构)的一个实现/实例;
    2. 一个ISA可能包含多个指令集;



    2. ISA与微体系结构

    ISA只是描述了CPU应该支持的每条指令是做什么事的,即指令的功能。而微体系结构是描述处理器实际上是怎么实现的。

    2.1 微体系结构

    微体系结构是计算机体系结构中偏向硬件的部分,它可以理解成数字电路如何实现处理器中的各个功能,通常关心的内容包括,指令的流水线结构,计算单元的电路(加法器等等),存储器的结构(寄存器堆、Cache的结构)等等 ;

    一个实例如下:
    1. 拿Intel来说,(其ISA是IA-32等)其pentium 4处理器的微体系结构是NetBurst,现代,其Core(酷睿)系列CPU的微体系结构已经经历了好几代:Bloomfield(2008年)、Lynnfield(2009年)、Clarksfield(2009年)、Ar randale(2010年)、Gulftown(2010年)、Sandy Bridge(2011年)、Ivy Bridge(2012年)、Haswell(2013年)、Haswell Devil’s Canyon(2014年)、Broadwell(2015年)、Skylake(2015年)。
    2. 拿ARM来说,(其ISA是ARMv7等)其微体系结构是ARM11等从11往后叫cortex系列,其中cortex-A系列有32位的A7、A9、A15,64位的A53、A57。




    3. 指令集(Instruction set)

    3.1 定义

    通常会把CPU的扩展指令集称为”CPU的指令集”(因为基本的,类似加减的指令似乎是必须被CPU所支持的指令)。每款CPU在设计时就规定了一系列与其硬件电路相配合的指令集。

    指令集可分为复杂指令集(CISC:sisk)和精简指令集(RISC:risk)两部分,这部分暂不继续讨论了。

    Intel的MMX(Multi Media Extended)、SSE、 SSE2(Streaming-Single instruction multiple data-Extensions 2)、SEE3和AMD的3DNow!等都是CPU的扩展指令集,分别增强了CPU的多媒体、图形图象和Internet等的处理能力。维基百科 - Comparison instruction set

    3.2 指令

    一条二进制机器指令由:指令码(操作码)+操作数组成。

    1. 操作码用来说明:指令的功能和执行的操作;
    2. 操作数说明:操作所涉及的源和目的数据的位置;
      • 源:立即数(即指令中包含的常亮)、寄存器、存储器、I/O端口等;



    一个流程

    一个我思考出来的可能的流程是这样:

      • CPU开发商
        1. 一个CPU厂商决定开发一个CPU,他们先要决定/选定一种指令集体系结构,他们当然不想自己开发,好了他们选用ARM的ARMv7;
        2. 那么该如何实现ARMv7呢?我们还是不去自己设计微体系结构了,还是用ARM公司配套的cortex吧,这样我们就能在硅晶片上做出一个CPU了;(当然中间省去了很多步骤)
      • CPU使用者(开发一个C编译器)
        1. 这颗CPU可以运行什么样的指令呢?发现使用CPU使用的是ARMv7,那么就查看ARMv7的文档就好了,这是RISC的一种
        2. 编译器完成了,它的功能是:将C源代码编译为可以在ARMv7上执行的二进制命令代码,即目标文件
        3. 此时一个小程序员写了一段简单C程序test.c,我们调用编译器将test.c编译为ARMv7上的可执行文件test.o
        4. 目标文件中包含了程序怎么开始和结束执行、需要操作的数据、如何与操作系统交互等等。只要运行这个目标程序,CPU就能执行其中的指令了
  • 相关阅读:
    SQL Server 附加数据库,报只读文件,无权修改其中某些文件
    NLog.config 配置
    系统架构设计师论文可靠性设计
    二、软件设计原则
    JavaScript 判断数组是否含有重复值
    mysql 添加索引 mysql 如何创建和删除索引
    利用pandas,BytesIO,zipfile打包csv文件,生成压缩文件
    不良人mysql索引
    转mysql数据库允许空值索引问题
    多线程中ThreadPoolExecutor.map()中传递多个参数
  • 原文地址:https://www.cnblogs.com/tanglizi/p/7695835.html
Copyright © 2011-2022 走看看