Jacleklm's Blog

计算机组成原理

2019/10/17

概述篇

计算机发展的四个阶段

  • 1946-1957,电子管计算机
  • 1957-1964, 晶体管计算机
  • 1964-1980, 集成电路计算机(计算机具备进入千家万户的条件;出现操作系统)
  • 1980-至今, 超大规模集成电路计算机

未来可能有:生物计算机, 量子计算机(腾讯量子实验室,阿里达摩院)
微型计算机的发展历史:从集成电路计算机开始,两个特点:受限于性能(单核到多核CPU);摩尔定律(集成电路性能每18-24个月就提升一倍)

计算机的分类

  • 超级计算机,eg. 中大东校区的天河二号。 标记他们运算速度的单位是TFlop/s
  • 大型计算机。IBM占据很大的份额。阿里提出了“去I(IBM)O(Oracle)E(EMC)”行动,因为它们代表了高维护费用的存储系统,并且不够灵活。
  • 迷你计算机。普通服务器。去IOE就是把大型机替换成普通服务器,eg. 阿里云
  • 工作站。高端的通用微型计算机,类似于普通电脑但性能强劲
  • 微型计算机,即个人计算机

从构成的本质上来讲,个人计算机与前面的分类无异

计算机的体系与结构

冯诺伊曼体系

  • 定义: 将程序指令和数据一起存储的计算机设计概念结构。结论: 存储程序指令,设计通用电路(因为早期计算机仅含固定用途程序,改变程序得更改结构、重新设计电路)
  • 冯诺依曼体系建造的计算机一定要有: 存储器、 控制器、 运算器、 输入/输出设备。如下图:
  • 瓶颈:CPU和存储器速率之间的问题无法调和(CPU处理速度很快,经常空转等待数据传输)

现代计算机的结构

在冯诺依曼体系的基础上解决CPU与存储设备之间的性能差异问题

计算机的层次与编程语言

程序翻译与程序解释

程序翻译(编译):使用编译器,把整个程序由高级语言L1(C++等)翻译成计算机语言L0(计算机能执行的,二进制等)
程序解释:把L1语言(Python,JS,PHP)的程序转变成使用L0语言实现另一个程序(翻译器),再L0解释器把目标程序执行。
Java是先编译再解释

计算机的层次与编程语言

  • 硬件逻辑层: 门、触发器等逻辑电路组成。 属于电子工程的领域
  • 微程序机器层: 编程语言是微指令集。 微指令所组成的微程序直接交由硬件执行
  • 传统机器层: 编程语言是CPU指令集(机器指令)。编程语言和硬件是直接相关。
    注: 一条机器指令对应一个微程序, 一个微程序对应一组微指令
  • 操作系统层是在软件和硬件之间的适配层
  • 汇编语言层。 编程语言是汇编语言(一种符号语言,其实可以理解为一种过渡态语言)。 汇编语言可以用汇编器翻译成可直接执行的机器语言
  • 高级语言层。 高级语言(eg. Java等)

计算机的计算单位

容量单位

用8个比特位bit(0或1)表示一个字节(Byte),后面就有kb,MB,GB,TB(都是1024倍关系)等。但是硬盘商是用1000做倍数关系,所以500G硬盘格式化后只有465G。

速度单位

  • 100M宽带,即是网络常用单位(Mbps)。 100M/s = 100Mbps = 100Mbit/s, 而 100Mbit/s=(100/8)MB/s=12.5MB/s。故100M宽带峰值下载速度只有12M/s
  • CPU的速度一般体现为CPU的时钟频率(Hz), 主流CPU是2GHz以上

计算机的字符与编码集

字符编码集的历史

  • ASCII码(读为 ask 2 码:用7个bits就可以完全表示ASCII码。包含了基本的字母,符号等
  • Extended ASCII码:改为8个bits。添加了常见的数学运算符,欧洲字符,表格符等,后来又有了国际化

中文编码集

  • 初始版:GB2312。收录了汉字和中文符号等。
  • GBK: 向下兼容GB2312,向上支持国际ISO标准。支持全部中日韩汉字。但是GBK和GB2312毕竟还是不能全球都用的。
  • 兼容全球的字符集Unicode。 其定义了世界通用的符号集, 用UTF-*实现了编码。eg. UTF-8(编程推荐使用)以字节为单位对Unicode进行编码。

组成篇

计算机的总线

定义

连接计算机不同设备的数据线。eg. 通用串行总线(USB), PCI总线, ISA总线等

分类

片内总线(芯片内部的总线)和系统总线(各设备之间的,分为 数据总线,地址总线和控制总线)

总线的仲裁

原因:需要决定不同设备使用总线的优先顺序
方法:链式查询;计时器定时查询;独立请求(各有优缺点,详情略)

计算机的输入输出设备(I/O设备)

常见的输入输出设备

键盘,鼠标,扫描仪;显示器,打印机,投影仪

输入输出接口的通用设计

数据线, 状态线, 命令线,设备选择线

CPU与IO设备的通信

注意:CPU速度与IO设备速度不一致,CPU快得多
方式:程序中断; DMA(直接存储器访问)

计算机存储器

存储器的分类


存储器的层次结构

读写速度(eg. 5400转)和存储容量(eg.1T)都会影响存储器的价格,所有有每比特位置价格的概念
存储器的层次结构:

  • 缓存。速度快价格高, 解决主存速度不足的问题。是在CPU与驻村之间增加一层速度快(容量小)的Cache。 局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
  • 主存。中等,eg. 内存条
  • 辅存。速度慢价格低, 解决主存容量不足的问题。eg. 硬盘

计算机的主存储器

计算机断电,内存数据丢失。这是因为内存条是用RAM,通过电容存储数据,必须隔一段时间刷新一次(有电才能刷新)
对32位系统,地址总线有32位,支持的内存最大为2^32=4 * 2^30 = 4GB ; 64为则大大提高,为2^34 GB
PS:硬盘有固态硬盘(SSD 盘,新式硬盘)、机械硬盘(HDD 传统硬盘)、混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。SSD采用闪存颗粒来存储,HDD采用磁性碟片来存储,混合硬盘(HHD: Hybrid Hard Disk)是把磁性硬盘和闪存集成到一起的一种硬盘

计算机的辅助存储器

计算机断电, 磁盘数据不会丢失。因为磁盘是盘片( 表面是可磁化的硬磁特性材料)和读写磁头组成( 移动磁头径向运动读取磁道信息)。磁盘的读取算法忽略没记

计算机的高速缓存

对于主存,有:

  • 字: 是指存放在一个存储单元中的二进制代码组合(一个字有32位就是一个字占32个bit的意思)。字的地址包含两个部分: 前m位指定字块的地址(块地址); 后b位指定字在字块中的地址(块内地址),如下图。字块是由字构成的(eg. 一个字块共B个字)
  • 字块: 存储在连续的存储单元中而被看作是一个单元的一组字。主存是由字块构成的(eg. 主存共M个字块)。主存内的总字数为B*M
    有2^m = M ; 2^b = B

问题:假设主存用户空间容量为4G,字块大小为4M,字长为32位,则对于字
地址中的块地址m和块内地址b的位数,至少应该是多少?

高速缓存的工作原理

对于高速缓存,原理类似于主存
衡量高速缓存性能:命中率、访问效率和平均访问时间。具体算法略(大概就是CPU要的数据刚好就在高速缓存中,而不需要高速缓存区主存拿)

高速缓存的替换策略

高速缓存的替换时机,怎么使得CPU要的数据尽可能在高速缓存中,用了几种算法,详情略

计算机的指令系统

机器指令的形式

机器指令主要由两部分组成:

  • 操作码: 操作码指明指令所要完成的操作; 操作码的位数反映了机器的操作种类(eg. 8位则是2^8 = 256 种操作)
  • 地址码: 地址码直接给出操作数或者操作数的地址。 分三地址指令、二地址指令和一地址指令

机器指令的操作类型

数据传输类型: 存在与寄存器之间、寄存器与存储单元、存储单元之间传送。 数据读写、交换地址数据、清零置一等操作
算术逻辑操作: 操作数之间的加减乘除、位运算等
移位操作: 完成数据在算术逻辑单元的必要操作
控制指令: 等待指令、停机指令、空操作指令、中断指令等

机器指令的寻址方式

指令寻址:顺序寻址,跳跃寻址
数据寻址:立即寻址,直接寻址,间接寻址

计算机的控制器和运算器

CPU由控制器,运算器,高速缓存等组成。
控制器是协调和控制计算机运行的。由程序计数器,时序发生器,指令译码器,各种类型的寄存器,总线所组成
运算器是用来进行数据运算加工的。由数据缓冲器,ALU,通用寄存器,状态寄存器,总线所组成

计算机指令的执行过程

  1. 取指令: 从缓存取指令; 送到指令寄存器
  2. 分析指令: 指令译码器译码; 发出控制信号; 程序计数器+1
  3. 执行指令: 装载数据到寄存器; ALU处理数据; 记录运算状态; 送出运算结果

CPU的流水线设计

即可以同时对多条指令进行流水处理,而不是串行处理

参考资料
慕课网
《计算机科学导论》

CATALOG
  1. 1. 概述篇
    1. 1.1. 计算机发展的四个阶段
    2. 1.2. 计算机的分类
    3. 1.3. 计算机的体系与结构
      1. 1.3.1. 冯诺伊曼体系
      2. 1.3.2. 现代计算机的结构
    4. 1.4. 计算机的层次与编程语言
      1. 1.4.1. 程序翻译与程序解释
      2. 1.4.2. 计算机的层次与编程语言
    5. 1.5. 计算机的计算单位
      1. 1.5.1. 容量单位
      2. 1.5.2. 速度单位
    6. 1.6. 计算机的字符与编码集
      1. 1.6.1. 字符编码集的历史
      2. 1.6.2. 中文编码集
  2. 2. 组成篇
    1. 2.1. 计算机的总线
      1. 2.1.1. 定义
      2. 2.1.2. 分类
      3. 2.1.3. 总线的仲裁
    2. 2.2. 计算机的输入输出设备(I/O设备)
      1. 2.2.1. 常见的输入输出设备
      2. 2.2.2. 输入输出接口的通用设计
      3. 2.2.3. CPU与IO设备的通信
    3. 2.3. 计算机存储器
      1. 2.3.1. 存储器的分类
      2. 2.3.2. 存储器的层次结构
      3. 2.3.3. 计算机的主存储器
      4. 2.3.4. 计算机的辅助存储器
      5. 2.3.5. 计算机的高速缓存
        1. 2.3.5.1. 高速缓存的工作原理
        2. 2.3.5.2. 高速缓存的替换策略
    4. 2.4. 计算机的指令系统
      1. 2.4.1. 机器指令的形式
      2. 2.4.2. 机器指令的操作类型
      3. 2.4.3. 机器指令的寻址方式
    5. 2.5. 计算机的控制器和运算器
      1. 2.5.1. 计算机指令的执行过程
      2. 2.5.2. CPU的流水线设计