这篇文章是教程《计算机系统基础 - 基于IA-32体系结构》的第一章 - 计算机系统概述的解析,建议配合书看,当然,不用书也行。

一. 计算机的发展历程

1. 第一台通用计算机

世界上的第一台通用计算机是由莫克莱 (Mauchly) 以及他的学生约翰·埃克特 (Eckert) 在1946年在美国创造,叫做ENIAC

书里写它是世界上第一台电子计算机这是错的,准确来说第一台电子计算机是ABC,ENIAC是第二台电子计算机,不过它确实是第一台通用计算机。在这里争谁是第一台计算机还有一场官司,有兴趣的自己可以查查。

自这台计算机出现后,人类社会进入了一个崭新的信息化时代。

2. 历史进程

由于计算机硬件早期的发展受电子开关器件的影响极大,为此,人们以元器件的更新作为计算机技术的进步和划分时代的主要标志。

(1) 第一代计算机 - 电子管计算机

在 20世纪40年代中期 - 20世纪50年代末 出现了第一代计算机,即电子管计算机

特点:

  • 逻辑元件: 电子管
  • 存储器件: 声延迟线 | 磁鼓
  • 典型逻辑结构: 定点运算

这是书里写的电子管计算机的存储器件是声延迟线或者是磁鼓,磁鼓是真的,延迟线用的是水银延迟线,声延迟线是啥玩意儿。不过自己知道就行了,考试按书里来。

典型例子:

  • ENIAC
  • EDVAC
  • EDSAC
  • UMVAC-1
  • IBM 704

这里你要是查的话,发现时间又乱套了。

(2) 第二代计算机 - 晶体管计算机

在 20世纪50年代中后期 - 20世纪60年代中期 出现了第二代计算机,即晶体管计算机

特点:

  • 逻辑元件: 晶体管
  • 主存: 磁芯储存器
  • 外存: 磁鼓和磁带存储器
  • 实现浮点运算
  • 系统结构提出变址,中断,I/O处理器等新概念

这里的变址是寻址的一个过程,可以用变址寄存器的内容。而寻址是数据恢复的基础,不过现在不用管这些是啥玩意儿,往下看就行了,不用管他。

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

I/O处理器,I指的是input,即输入,O指的是output,即输出,I/O就是输入输出,I/O处理器……不用管它是啥。

典型例子:

  • 全晶体管计算机7070
  • 全晶体管计算机7090
  • IBM 1401

(3) 第三代计算机 - 集成电路计算机

在 20世纪60年代中期 - 20世纪70年代中后期 出现了第三代计算机,即集成电路计算机

系统特点:

  • 微程序控制
  • 高速缓存
  • 虚拟存储器
  • 流水线技术
  • ……

软件特点:

  • 操作系统
  • 资源调度
  • 人机通信
  • 输入输出控制
  • ……

典型例子:

  • IBM 360

(4) 第四代计算机 - 大规模/超大规模集成电路计算机

在 20世纪70年代后期开始,出LSI(大规模集成电路)和VLSI(超大规模集成电路计算机)成为计算机的主要器件,大规模/超大规模集成电路计算机的时代来临。

微型计算机是第四代计算机的典型代表,1971年,Intel公司成功在一块芯片上实现中央处理器功能,制成了世界上第一片微处理器Intel 4004,并用它组成了世界上的第一台微计算机MCS-4,从此拉开了微型计算机的帷幕。

书下面介绍了一下微型计算机的发展,可以自行了解,没啥用。

微型计算机的发展历程

二. 计算机系统的基本组成

1. 冯·诺依曼计算机的基本结构

随着第一台计算机ENIAC诞生,人类进入计算机时代。后来,美籍匈牙利数学家,冯.诺依曼提出了计算机“存储程序”的计算机设计理念。即将运算的指令程序和数据都存储于计算机的内部,需要的时候可以顺序地执行程序代码,从而控制计算机运行。

这就是冯.诺依曼计算机体系的开端。而冯·诺依曼架构则确立了我们今天使用的计算机硬件基础架构,可谓是现代计算机的鼻祖。因为在这之前的计算机程序是这样的:

2.冯.诺依曼结构的灵魂

早期的计算机是由各种门电路组成的,这些门电路通过组装出一个固定的电路板,来执行一个特定的程序。一旦需要修改程序功能,就要重新组装电路板,所以早期的计算机程序是硬件化的

然而,祖师爷的出现将最初的硬件化程序变为可编程、可存储编码,放在存储器中,随意使用。下面大体介绍一下冯.诺依曼结构的灵魂。

要知道,早期的计算机设计中,程序和数据是两个截然不同的概念。数据放在存储器中,而程序作为控制器的一部分,这样的计算机计算效率低,灵活性较差。

冯.诺依曼结构中,将程序和数据一样看待,将程序编码为数据,然后与数据一同存放在存储器中。这样计算机就可以调用存储器中的程序来处理数据了。意味着,无论什么程序,最终都是会转换为数据的形式存储在存储器中,要执行相应的程序只需要从存储器中依次取出指令、执行。

冯.诺依曼结构的灵魂所在正是这里:减少了硬件的连接,这种设计思想导致了硬件和软件的分离,即硬件设计和程序设计可以分开执行,这就催生了程序员这个职业的诞生

概括的来讲,冯.诺依曼结构消除了原始计算机体系中,只能依靠硬件控制程序的状况(程序作为控制器的一部分,作为硬件存在),将程序编码存储在存储器中,实现了可编程的计算机功能,实现了硬件设计和程序设计的分离,大大促进了计算机的发展。

3. 冯.诺依曼结构的核心设计思想

核心设计思想主要体现在如下三个方面:

  • 程序、数据的最终形态都是二进制编码,程序和数据都是以二进制方式存储在存储器中的,二进制编码也是计算机能够所识别和执行的编码。(可执行二进制文件:.bin文件)

  • 程序、数据和指令序列,都是事先存在主(内)存储器中,以便于计算机在工作时能够高速地从存储器中提取指令并加以分析和执行。

  • 确定了计算机的五个基本组成部分:运算器、控制器、存储器、输入设备、输出设备

4. 现代计算机的基本组成

冯.诺依曼在秘密开发的 EDVAC 写了一篇报告《First Draft of a Report on the EDVAC》,描述了他心目中的一台计算机应该长什么样。这篇报告在历史上有个很特殊的简称,叫First Draft,翻译成中文,其实就是《第一份草案》。这样,现代计算机的发展就从祖师爷写的一份草案开始了。

First Draft里面说了一台计算机应该有哪些部分组成。

冯.诺依曼确定了 “计算机结构” 中的5大部件:

  • 运算器
  • 控制器
  • 存储器
  • 输入设备
  • 输出设备

现在看来,运算器和控制器单元集成在CPU中实现,存储器的容量不断扩大、输入输出设备不断更新,这些部件构成了当代计算机硬件系统的基本组成。

(1) CPU

CPU是整个计算机的核心部件,主要用于指令的执行。

上面说了一下,运算器和控制器单元集成在CPU中实现,我们稍微具体的讲一下

I. 运算器

首先计算机要有运算处理数据的能力,所以需要一个处理单元来完成各种算数运算和逻辑运算,这就是算术逻辑单元(Arithmetic Logic Unit,ALU)。

ALU的主要功能就是在控制信号的作用下,完成加、减、乘、除等算术运算以及与、或、非、异或等逻辑运算以及移位、补位等运算。

运算器的主要部件就是ALU,运算器的处理对象是数据,所以数据的长度以及数据的表示方法,对运算器的影响很大。大多数通用计算机是以16、32、64位数据作为运算器一次处理数据的长度。

能够对一个数据的所有位同时处理的运算器称为并行运算器,一次只能对数据的一个位处理的运算器称为串行运算器

运算器与其他部分的关系:计算机运算时,运算器的操作对象和操作种类由控制器决定。运算器操作的数据从内存中读取,处理的结果再写入内存(或者暂时存放在内部寄存器中),而且运算器对内存数据的读写是由控制器来进行的。

II. 控制器

控制器又称为控制单元(Control Unit),是计算机的神经中枢和指挥中心,只有在控制器的控制下,整个计算机才能够有条不紊地工作、自动执行程序。

控制器的工作流程为:从内存中取指令、翻译指令、分析指令,然后根据指令的内存向有关部件发送控制命令,控制相关部件执行指令所包含的操作。

控制器和运算器共同组成中央处理器(Central Processing Unit),CPU是一块超大规模集成电路,是计算机运算核心和控制核心,CPU的主要功能是解释计算机指令以及处理数据。

(2) 存储器

存储器的主要功能是存储程序和各种数据,并且能够在计算机运行过程高速、自动地完成程序或者数据的存储,存储器是有记忆的设备,而且采用两种稳定状态的物理器件来记录存储信息,所以计算机中的程序和数据都要转换为二进制代码才可以存储和操作。

存储器可以分为:

  • 主存储器(MM),又叫内部储存器(内存)
  • 辅助存储器(AM),又叫外部存储器(外存)
    这俩在计算机系统中各有用处,下面大概介绍一下俩种存储器的特点:
Ⅰ.主存储器(MM)

主存储器称为内存或者主存,是用来存放欲执行的程序和数据。

在计算机内部,程序和数据都是以二进制代码的形式存储的,它们均以字节为单位(8位)存储在存储器中,一个字节占用一个存储单元,并且每个存储单元都有唯一的地址号。

这里以字节(8位)为存储单元,就与上面运算器的操作数据的大小联系起来了,16、32、64都是8的倍数

CPU可以直接使用指令对内部存储器按照地址进行读写两种操作:

  • :将内存中某个存储单元的内容读出,送入CPU的某个寄存器中;
  • :在控制器的控制下,将CPU中某寄存器内容传到某个存储单元中。

寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果

要注意,内存中的数据和地址码都是二进制数,但是俩者是不同的。

  • 一个地址可以指向一个存储单元
  • 地址是存储单元的位置
  • 数据是存储单元的内容

数据可以是操作码、可以是CPU要处理的数据、也可以是数据的地址。这里地址码的长度由内存单元的个数确定。

内存的存取速度会直接影响计算机的运算速度,由于CPU是高速器件,但是CPU的速度是受制于内存的存取速度的,所以为了解决CPU和内存速度不匹配的问题,在CPU和内存直接设置了一种高速缓冲存储器Cache。

Cache是计算机中的一个高速小容量存储器,其中存放的是CPU近期要执行的指令和数据,其存取速度可以和CPU的速度匹配,一般采用静态RAM充当Cache

内存按工作方式的不同又可以分为俩部分:

RAM:随机存储器,可以被CPU随机读取,一般存放CPU将要执行的程序、数据。如果断电会丢失数据

ROM:只读存储器,只能被CPU读,不能轻易被CPU写,用来存放永久性的程序和数据。比如:系统引导程序、监控程序等。具有掉电非易失性,即突然断点数据也不会没了

Ⅱ.辅助存储器(AM)

辅助存储器主要来存放”暂时“用不着的程序和数据,可以和内存交换数据。

一般是磁盘、光盘、U盘、硬盘等。

CPU无法直接访问AM,需要的时候和MM成批交换,CPU访问MM

(3) 总线

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束

如果说主板是一座城市,那么总线就像是城市里的公共汽车,能按照固定行车路线,传输来回不停运作的比特(bit)

一条线路在同一时间内都仅能负责传输一个比特。因此,必须同时采用多条线路才能传送更多数据,而总线可同时传输的数据数就称为宽度,以比特为单位,总线宽度愈大,传输性能就愈佳

总线按功能和规范可分为五大类型:

  • 数据总线(Data Bus, DB):在CPU与RAM之间来回传送需要处理或是需要储存的数据,这意味着他是双向的,可以从CPU传到其他地方,也可以从其他地方传到CPU

  • 地址总线(Address Bus, AB):用来指定在RAM(Random Access Memory)之中储存的数据的地址。他是单向的,只能从CPU传到其他地方。

  • 控制总线(Control Bus, CB):将微处理器控制单元(Control Unit)的信号,传送到周边设备。这里的信号有两种,一种是从CPU发出去的,一种是发往CPU的

  • 扩展总线(Expansion Bus, EB):外部设备和计算机主机进行数据通信的总线,例如ISA总线,PCI总线。

  • 局部总线(Local Bus, LB):取代更高速数据传输的扩展总线。

其中的数据总线DB(Data Bus)地址总线AB(Address Bus)控制总线CB(Control Bus),也统称为系统总线,即通常意义上所说的总线。

(4) I/O接口

I/O接口的功能是负责实现CPU通过系统总线把I/O电路和外围设备联系在一起,按照电路和设备的复杂程度,I/O接口的硬件主要分为两大类:

  • I/O接口芯片
    这些芯片大都是集成电路,通过CPU输入不同的命令和参数,并控制相关的I/O电路和简单的外设作相应的操作,常见的接口芯片如: 定时计数器、中断控制器、DMA控制器、并行接口等。

  • I/O接口控制卡
    由若干个集成电路按一定的逻辑组成为一个部件,或者直接与CPU同在主板上,或是一个插件插在系统总线插槽上。
    按照接口的连接对象来分,又可以将他们分为串行接口、并行接口、键盘接口和磁盘接口等。

(5) I/0设备

输入/输出(Input /Output ,简称I/O),指的是一切操作、程序或设备与计算机之间发生的数据传输过程。

输入/输出系统(Input/Output System) ,指控制计算机数据流动的体制,包括程序、硬件。

输入/输出设备,就是指可以与计算机进行数据传输的硬件。

最常见的I/O设备有打印机、硬盘、键盘和鼠标。从严格意义上来讲,它们中有一些只能算是输入设备(比如说键盘和鼠标);有一些只是输出设备(如打印机)。

所有储存器也可以算是输入/输出设备。如硬盘、软盘、光盘等。

三. 计算机的工作过程

1. 指令与程序

指令是用来指挥和控制计算机执行某种操作的命令。通常一个计算机有一堆指令。通常把计算机能够识别和执行的全部指令称为该机的指令系统

一条指令,通常包括两方面内容:操作码地址码。其中,操作码用来表征一条指令的操作特性和功能;地址码给出参与操作的数据在存储器中的地址。

指令系统决定了一台计算机硬件主要性能和基本功能。指令系统一般都包括以下几大类指令:

  • (1)数据传送类指令。
  • (2)运算类指令 包括算术运算指令和逻辑运算指令。
  • (3)程序控制类指令 主要用于控制程序的流向。
  • (4)输入/输出类指令 简称I/O指令,这类指令用于主 机与外设之间交换信息。

我们知道,我们所有的指令都是以二进制的方式储存在存储器中,他们叫做机器指令,但是二进制对我们来说极不方便,于是,人们用一些助记符来代替机器指令,形成助记符指令。比如我们想要用加法,就可以用ADD来代替机器指令。

为了让计算机解决一个问题,我们需要把问题拆成一个一个的步骤,第一步这样做,第二步这样做,有一定的顺序,形成指令序列,然后再让计算机完成。这个指令序列就是程序,通常把二进制代码形成的指令序列称为计算机语言程序,又称目标程序。计算机能够直接识别目标程序并进行运行。

在这里,有一种是由助记符指令组成的指令序列我们叫做汇编语言程序或符号程序,对于计算机来说,汇编比目标程序更加易懂。

2. 计算机的基本工作过程

我们这里进行两个操作,’读’和’写’

(1) 读

读指的是从主存中读取数据,也就是读取内存条里的内容。

首先通过外部I/O设备进行了不知道啥的操作,通过I/O接口进入设备内部,传到CPU,CPU即将开始进行读的操作。

首先想要读取数据,我们要知道一个东西,进行读和读数据时俩回事。

我们想要执行读的指令,需要知道这个指令在主存里的位置,也就是所谓的地址,CPU可以通过地址找到数据位置。

CPU会先将数据地址发给一个叫做PC的寄存器,这个PC可不是电脑主机的意思,他是一个程序计数器,它是专门用于在CPU取指令期间的寻址程序存储器

PC老是保留着下一条要实施的指令的16位地址。通常程序是顺序实施的,在一样平常情形下,当掏出一个指令(更切当地说为一个指令字节)字节后,PC自动加1。若是在实施转移指令、子程序调用/返回指令或中断时,要把转向的地址赋给PC。

交给PC后,他会把这个地址交给MAR,MAR是地址储存器,顾名思义,他是专门储存地址的。MAR得到地址后,会根据这个地址,从内存中找对应地址的数据,即这个读指令。找到数据后,会讲数据交给MDR,MDR是数据储存器。用来储存数据的。之后MDR会将数据交给IR,IR是指令寄存器,然后IR发现这个是读的指令,开始进行数据读取的操作。

读取的操作和上面差不多,这里不用管读取辅存还是主存,因为辅存也得先把数据整到主存中,同样的,向PC然后MAR然后MDR然后读取到数据。

其实这里还有操作码,ALU那些东西,那些玩应得专门用例子讲,会单独写一篇文章。

(2) 写

写和读差不多

向主存写入数据的话,他需要两个东西,数据内容数据在主存中的地址

所以这里分两条路,第一条是CPU发送地址,通过PC传到MAR,MAR在传到主存中,选中相应内存单元。

第二条是CPU将待写的数据传到MDR中,在写控制信号控制下,结合地址,将MDR中的数据写入内存。

写完后,该地址的单元内容发生改变。

四. 计算机系统的层次机构

不用管书上写的那玩意

计算机系统的五大层次结构:微指令机器、机器语言机器、操作系统机器、汇编语言机器、高级语言机器

三种级别的语言和对应程序:高级语言、汇编语言、机器语言(编译程序和解释程序)

1. 层次结构

自上而下,计算机系统的层次结构分为

  1. 高级语言机器 M4(软件)
      用编译程序翻译成汇编语言程序
  2. 汇编语言机器 M3(软件)
      用汇编程序翻译成机器语言程序
  3. 操作系统机器 M2(软件)
      向上提供“广义指令”(系统调用)
  4. 用机器语言的机器 M1(硬件)
      执行二进制机器指令
  5. 微程序机器 M0(硬件)
      由硬件直接执行微指令

2. 三种级别的语言

上面出现了高级语言,汇编语言,机器语言

我们编写的高级语言需要被编译程序解释程序翻译成汇编语言机器语言

  • 编译程序:一次性将高级语言翻译成机器语言程序,如整体翻译(编译语言:C、C++)
  • 解释程序:一句一句将高级语言翻译成机器语言程序,如同声传译(解释语言:JavaScript、Python、Shell)

注:编译、汇编、解释程序,可统称为”翻译程序”

五. 计算机系统的性能评价指标

    1. 字长: 字长是 CPU 能够直接处理的二进制数据位数, 它直接关系到计算机的计算精度、功能和速度。字长越长处理能力就越强。常见的微机字长有8位、16位和32位。
    1. 运算速度: 运算速度是指计算机每秒中所能执行的指令条数, 一般用 MIPS 为单位。
    1. 主频: 主频是指计算机的时钟频率, 单位用 MHz 表示。
    1. 内存储器的容量: 内存储器是 CPU 可以直接访问的存储器, 需要执行的程序与需要处理的数据就是存放在主存中的。内存的性能指标主要包括存储容量和存取速度
    1. 外设配置: 外设是指计算机的输入/输出设备。
    1. CPU主频: CPU是决定电脑的性能的最主要因素, 计算机运算速度是指计算机在每秒钟所能执行的指令条数, 即中央处理器在单位时间内平均运行的次数。

其他的如果是在学书的话,自己看书就行,如果是想了解的话,了解到这里就行,后面的内容没啥玩应。