• 计算机组成原理_1


    介绍

    计算机硬件能识别的数据只有二进制0/1,代表高、低电平。

    在这里插入图片描述
    在这里插入图片描述

    硬件发展历程

    发展趋势:更微型、用途更广,或者更巨型、更智能。

    1. 电子管时代

    1946年第一台电子计算机 冯诺依曼(ENIAC)诞生,主要用于二战。其逻辑元件采用电子管,占地面积大,耗电量高,运行慢。并且程序员直接使用纸带0(打孔)1(无孔)编程,格蕾丝·赫伯小姐也是在那段时间提出了 bug 的概念。

    2. 晶体管时代

    贝尔实验室发明了晶体管,体积功耗都降低了,速度上升,也可以用晶体管设计出更复杂的电路。

    高级编程语言 FORTRAN 在这段时期出现。

    操作系统也随之出现,计算机可以连续完成一些任务。

    缺点在于:几十万格晶体管都是手焊的,容易出错。

    摩尔定律:集成电路每18个月,晶体管数、整体性能就会翻倍。

    3. 中小规模集成电路时代

    发明了集成电路,元件都集成在基片上,体积、功耗进一步减小。

    在这段时间高级语言快速发展,也出现了分时操作系统。(当时计算机要同时给多个用户共享使用,轮流切换给各个终端用户的程序。由于时间间隔很短,每个用户都感觉自己好像独占全机一样,这就解决了主机共享问题)

    不过计算机主要还是用于科学计算等专业用途,没有太普及。

    4. 大规模集成电路时代

    出现了微处理器 (CPU),微型计算机,个人计算机等。 Windows Mac Linux 操作系统也都出现了。

    软件发展历程

    最开始机器语言,后来汇编语言(除了要解决的问题,还要考虑及其特性)最后是现在流行的较为高级的编程语言 (FORTRAN, JAVA, PASCAL…)

    操作系统也由只能命令行操作的 DOS 转为更加图形化的 Windows, Android, IOS…

    计算机硬件基本组成

    两大结构:早期冯诺依曼结构,和现代计算机结构。

    ENIAC:手动接线控制运算,并且首次提出了存储程序的想法(将指令以二进制代码的形式事先输入计算机的主储存器即内存中,计算机按顺序执行其中的所有指令直到程序结束),实现了自动化执行代码。

    在这里插入图片描述

    冯诺依曼计算机特点:

    1. 计算机由五大部分组成;
    2. 指令、数据都以二进制形式存储在存储器中,可以按地址寻访
    3. 指令由操作码(±*/)、地址码组成;
    4. 可以存储程序;
    5. 以运算器为中心。

    软件和硬件在逻辑上是等效的。对于同一个功能,两者都能实现。如设计一个乘法电路,可以专门设计一个做乘法的硬件电路,给予一次乘法指令;或者进行多次加法指令。区别在于成本、效率上都是硬件高于软件。

    ENIAC 计算机以运算器为中心,比较低效。

    现代计算机则以存储器为中心。

    在这里插入图片描述

    其中运算器和控制器关系较为紧密,合并为 CPU。
    在这里插入图片描述

    存储器分为主存储器、辅存储器。

    主存储器是运行时的内存,辅存储器是机械硬盘,APP存放在其中,使用时加载到主存中。

    各个硬件工作原理

    主存储器

    包括存储体、MAR( Memory Address Register 存储地址寄存器 )、MDR( Memory Data Register 存储数据寄存器 ),相当于货架、店员、柜台。

    店员根据取件号,去对应的货架找到货物,并放到柜台。

    CPU 将要取的数据地址给 MAR,MAR 去存储体中找到数据放到 MDR,CPU 再取走数据。(CPU 还可以写入数据)

    存储体中每个地址对应一个存储单元,其中存储一串二进制代码,被称为存储字;其长度被称为存储字长,与 MAR 位数相同(MDR 则是和存储地址的位数相同,是地址为8的存储单元);

    存储元是用于存储二进制数据的电子元件,每个1 bit(原理:可存储电荷的电容)。

    运算器

    实现算术运算和逻辑运算。

    其中包括累加器(也是寄存器)、乘商寄存器、通用寄存器、算术逻辑单元。

    累加器 ACC(accumulator) 用于存储操作数和操作结果;

    乘商计算器 MQ(multiple-quotient Regesiter) 用于存放乘除运算的操作数和操作结果。

    通用寄存器 X 也用于存放操作数。

    算术逻辑单元 ALU (Arithmetic and Logic Unit) 用于实现运算。

    控制器

    其中包括指令寄存器、控制单元、程序计数器。

    控制单元 CU ( Control Unit )用于分析当前指令并给出控制信号。

    程序计数器 PC ( Program Counter )用于存放下一条指令的地址,每次 IR 取下一条指令时 PC 自动++。

    指令寄存器 IR ( instruction register )用于存放当前要执行的指令。

    一个完整的程序执行过程

    1. 根据指令地址,从主存储器中取出指令
      1. 控制器中的控制单元读取当前指令地址(读取后程序计数器地址就自动+1,然后通过总线把该指令地址传给 MAR。同时,控制器还会通过控制总线告诉主存储器要进行读还是写操作。
      2. 根据 MAR 中的地址,存储体找到该指令的位置,并传给 MDR。
      3. MDR 把该指令传给指令寄存器 IR。
    2. 分析指令
      1. 指令由操作码(该指令要做什么操作)和地址码(需要操作的数的地址)组成。IR 的操作吗部分传到 CU,CU 分析得知:本指令要进行的操作(如:取出数 a)。
      2. IR 的指令地址码部分传给 MAR,MAR 让存储体取出对应的数据交给 MDR。
      3. MDR 把该数据交给 ACC,等待之后进一步操作。
    3. 运算
      1. 如要计算 a+b,刚才的操作已经取出 a 数,只需要重复相同的步骤取出 b 数,b 数存入通用寄存器 X 中,算术逻辑单元 ALU 再计算 X+ACC 的结果。

    其中 CPU 是通过指令周期,判断取到的是数据还是指令。

    如果过程中发生了停机,直接利用终端机制通知操作系统终止进程。

  • 相关阅读:
    轻断食原理:胰岛素水平
    vue模板语法(上集)
    Spring for Apache Kafka概述和简单入门
    Python unittest 之二: 测试类的执行
    java微服务 Dubbo面试题/SpringCloud面试题
    mybatis 拦截器
    访问 SAP 电商云 Storefront 时遇到的 HTTP 403 错误
    在 Clojure 中,如何实现高效的并发编程以处理大规模数据处理任务?
    蓝桥杯-回文日期[Java]
    3.树莓派4b+ubuntu18.04(ros版本melodic)+arduino mega自制两轮差速小车,实现建图导航功能
  • 原文地址:https://blog.csdn.net/jtwqwq/article/details/125568095