• 1.1 计算机组成原理----概述



    前言

      本章主要介绍计算机的发展史以及CPU的功能。


    一、计算机发展历史

    • 第0代:机械计算器、算盘、计算尺、手摇机械计算器
    • 第1代(1946~1954):电子管计算机、电子管、电磁继电器,机器语言编程 如:ENIAC、IBM 701
    • 第2代(1955~1964):晶体管计算机、晶体管、磁芯,监控程序,高级语言 如:IBM 7030、Univac LARC
    • 第3代(1965~1974):中小规模集成电路计算机
    • 第4代(1975~1990):超大规模集成电路计算机
    • 第5代(1991~?):高性能智能计算机

    一开始是的机器是晶体管

    二、冯诺依曼机器

    存储程序的概念:将指令以二进制代码的形式事先输入计算机的主存储器,然后按照其在存储器中的首地址执行程序的第一条指令,以后就按照该程序的规定顺序执行其他指令,直至程序执行结束。

    1.早期冯诺依曼机器

    • 将计算机要处理的问题用指令编成程序。
    • 指令和数据以同等地位存放在存储器中,并可按地址访问。
    • 以二进制形式表示指令和数据。
    • 在控制器的控制下,指令被逐条从存储器中取出来执行,产生控制流,在控制流的驱动下完成指令的功能。
    • 早期的冯·诺依曼机以运算器为中心,输入/输出设备通过运算器与存储器传送数据。

    2.现在冯诺依曼机器

    存储器为核心 CPU = 运算器 + 控制器
    在这里插入图片描述
    在这里插入图片描述

    CPU分成了运算器(ALU)+控制器,存储器包括主存+辅存(外设)+输入+输出。
    在这里插入图片描述
    解释图中的每一个线路:红色的是控制线路,通过控制器操作ALU进行加减乘除运算,操作存储器进行读写操作;绿色的线路是操作指令使用,从存储器将数据传递到MDR中,然后传递到IR寄存器中,进行译码;
    根据冯·诺依曼结构基本思想,可以给出一个模型计算机的基本硬件结构。
    在这里插入图片描述
    模型机中主要包括:

    • 用来存放指令和数据的主存储器,简称主存内存
    • 用来进行算术逻辑运算的部件,即算术逻辑部件(Arithmetic Logic Unit,简称ALU),在ALU操作控制信号ALUop的控制下,ALU可以对输人端A和B进行不同的运算,得到结果F;
    • 用于自动逐条取出指令并进行译码的部件,即控制部件(Control Unit,简称CU),也称控制器;
    • 用来和用户交互的输入设备和输出设备
    • 为了临时存放从主存取来的数据或运算的结果,还需要若干通用寄存器(General Purpose Register),组成通用寄存器组(GPRs),ALU两个输入端A和B的数据来自通用寄存器或者内存(add ax,[2000]);
    • ALU运算的结果会产生标志信息,例如,结果是否为0(零标志ZF)、是否为负数(符号标志SF)等,这些标志信息需要记录在专门的标志寄存器中;
    • 从主存取来的指令需要临时保存在指令寄存器(Instruction Register,简称IR)中;
    • CPU为了自动按序读取主存中的指令,还需要有一个**程序计数器(**Program Counter,简称PC),在执行当前指令过程中,自动计算出下一条指令的地址并送到PC中保存。通常把控制部件、运算部件和各类寄存器互连组成的电路称为中央处理器(Central Processing Unit,简称CPU),简称处理器。
    • CPU为了从主存取指令和存取数据,需要通过传输介质与主存相连,通常把连接不同部件进行信息传输的介质称为总线,其中,包含了用于传输地址信息、数据信息和控制信息的地址线、数据线和控制线
    • CPU访问主存时,需先将主存地址、读/写命令分别送到总线的地址线、控制线,然后通过数据线发送或接收数据。CPU送到地址线的主存地址应先存放在主存地址寄存器(Memory Address Register,简称MAR)中,发送到或从数据线取来的信息存放在主存数据寄存器(Memory Data Register,简称MDR)中。

    3. 程序和指令的执行过程

      冯·诺依曼结构计算机的功能通过执行程序实现,程序的执行过程就是所包含的指令的执行过程。指令(instruetion)是用0和1表示的一串0/1序列,用来指示CPU完成一个特定的原子操作。例如,取数指令(load)从主存单元中取出数据存放到通用寄存器中;存数指令(store)将通用寄存器的内容写入主存单元;加法指令(add)将两个通用寄存器内容相加后送入结果寄存器;传送指令(mov)将一个通用寄存器的内容送到另一个通用寄存器;如此等等。
      指令通常被划分为若干个字段,有操作码、地址码等字段。操作码字段指出指令的操作类型,如取数、存数、加、减、传送、跳转等;地址码字段指出指令所处理的操作数的地址,如寄存器编号、主存单元编号等。

    三、系统层次

    1.分层结构

      系统可以分成软件+硬件,一般的软件通过编译变成汇编语言,然后汇编语言通过汇编变成机器码,机器码在硬件上运行。
    在这里插入图片描述
    在这里插入图片描述
      Hello程序被启动后,计算机的动作过程如下:

    • Shell程序读取字符串“./hello”中各字符到寄存器,然后存放到主存;
    • “Enter”键输入后,操作系统内核(载入程序)根据主存中的字符串“hello”到磁盘上找到特定的hello目标文件,将其包含的指令代码和数据(“hello, world\n”)从磁盘读到主存,并将控制权转交给hello程序,即将hello程序的第一条指令的地址送到PC中;处理器从hello主程序的指令代码开始执行;Hello程序将“hello, world\n”串中的字节从主存读到寄存器,再从寄存器输出到显示器上。
    • CPU能够和内存+外设(低速外设,一般采用中断的方式)直接交互;主存和硬盘直接交互(DMA的方式)

    2.用户分层

      计算机系统所完成的所有任务都是通过执行程序所包含的指令来实现。计算机系统由硬件和软件两部分组成。

    • 使用应用软件完成特定任务的计算机用户称为最终用户。大多数计算机使用者 都属于最终用户。例如,使用炒股软件的股民、玩计算机游戏的人、进行会计电算化处理的财 会人员等。
    • 系统管理员 (system administrator) 是指利用操作系统、数据库管理系统等软件提供的功能对系统进行配置、管理和维护,以建立高效合理的系统环境供计算机用户使用的操作人员。
    • 应用程序员 (application programmer) 是指使用高级编程语言编制应用软件的程序员;
    • 系统程序员 (system programmer) 则是指设计和开发系统软件的程序员,如开发操作系统、编译器、数据库管理系统等系统软件的程序员。
      在这里插入图片描述

    3.ISA指令集

      ISA指Instruction Set Architecture,即指令集体系结构,有时简称为指令系统。ISA是一种规约(Specification),它规定了如何使用硬件。

    • 可执行的指令的集合,包括指令格式、操作种类以及每种操作对应的
      操作数的相应规定;
    • 指令可以接受的操作数的类型;
    • 操作数所能存放的寄存器组的结构,包括每个寄存器的名称、编号、长度和用途;
    • 操作数所能存放的存储空间的大小和编址方式;
    • 操作数在存储空间存放时按照大端还是小端方式存放;
    • 指令获取操作数的方式,即寻址方式;
    • 指令执行过程的控制方式,包括程序计数器(PC)、条件码定义等。

    四、计算机性能指标

    1. CPU的性能指标

      在这里插入图片描述
    在这里插入图片描述
      比较计算机的性能时,用执行时间来衡量完成同样工作量所需时间最短的那台计算机就是性能最好的处理器时间往往被多个程序共享使用,因此,用户感觉到的程序执行时间并不是程序真正的执行时间(从hello程序执行过程可知)
      通常把用户感觉到的响应时间分成以下两个时间:
      CPU时间:指CPU真正花在程序执行上的时间。又包括两部分:
      1.用户CPU时间:用来运行用户代码的时间
      2.系统CPU时间:为了执行用户程序而需要运行操作系统程序的时间
      3.其他时间:指等待I/O操作完成或CPU花在其他用户程序的  时间CPU性能(CPU performance):用户CPU时间
      本文主要讨论CPU性能,即:CPU真正用在用户程序执行上的时间

    2. CPU性能到底与谁有关系

    在这里插入图片描述
    **从上图可以看到CPU性能和指令条数、CPI、时钟周期有关系,并不和某一个值有关。怎么证明呢?我们看几个例子:

    程序P在机器A上运行需10s,机器A的时钟频率为400MHz。 现在要设计一台机器B,希望该程序在B上运行只需6s.机器B时钟频率的提高导致了其CPI的增加,使得程序P在机器B上时钟周期数是在机器A上的1.2倍。机器B的时钟频率达到A的多少倍才能使程序P在B上执行速度是A上的10/6=1.67倍?
    Answer:
    时钟周期总数A = 10 sec x 400MHz = 4000M个
    时钟频率B = 时钟周期总数B / CPU时间B
    = 1.2 x 4000M / 6 sec = 800 MHz

    机器B的频率是A的两倍,但机器B的速度并不是A的两倍!

    所以证明指令条数、CPI、时钟周期他们之间是息息相关的。
    **那么与MIPS有关系吗?**计算公式1s/CPI*时钟周期

    在这里插入图片描述

    假定某程序P编译后生成的目标代码由A 、B 、C 、D 四类指令组成,它们在程序中所占的比例分别为43%、21%、12%、24%,已知它们的CPI 分别为1、2、2、2。现重新对程序P进行编译优化,生成的新目标代码中A 类指令条数减少了50%,其他类指令的条数没有变。请回答下列问题。
    ① 编译优化前后程序的CPI各是多少?
    ② 假定程序在一台主频为50MHz 的计算机上运行,则优化前后的MIPS各是多少? 解优化后A类指令的条数减少了50%,因而各类指令所占比例分别计算下。
    A 类指令:21.5/(21.5+21+12+24)=27%
    B类指令:21/(21.5+21+12+24)=27%
    C类指令:12/(21.5+21+12+24)=15%
    D类指令:24/(21.5+21+12+24)=31%
    ① 优化前后程序的CPI 分别计算如下。
    优化前:43%×1+21%×2+12%×2+24%×2=1.57
    优化后:27%×1+27%×2+15%×2+31%×2=1.73
    ② 优化前后程序的MIPS 分别计算如下。
    优化前:50M/1.57=31.8MIPS
    优化后:50M/1.73=28.9MIPS
    从 MIPS数来看,优化后程序执行速度反而变慢了。 这显然是错误的,因为优化后只减少了A 类指令条数而其他指令数没变,所以程序执行时间一定减少了。从这个例子可以看出,用 MIPS 数来进行性能估计是不可靠的。

    总结:本文主要介绍了计算机组成原理概述,本人会定时发布底层知识供大家学习。

  • 相关阅读:
    hive表中连续N天问题的实现
    ​LeetCode解法汇总2342. 数位和相等数对的最大和
    00. 这里整理了最全的爬虫框架(Java + Python)
    深层次安全定义剖析及加密技术
    超详细spring boot笔记
    web3 React dapp进行事件订阅
    LocalDateTime、LocalDate、Date、String相互转化大全及其注意事项
    js对象和原型、原型链的关系
    ai批量剪辑矩阵无人直播一站式托管系统源头技术开发
    mysql场景题:最近7天连续3天登陆用户,字段,id,date(已去重)
  • 原文地址:https://blog.csdn.net/chen371522/article/details/132634858