《计算机组成原理》基础概念笔记整理

一、计算机的发展历史

1、计算机发展的四个阶段

第一阶段:电子管计算机(1946~1957) 埃尼阿克ENIAC
第二阶段:晶体管计算机(1957~1964) TX-0,PDP-1
第三阶段:集成电路计算机(1964~1980)
第四阶段:超大规模集成电路计算机(1980~至今)

电子管计算机:

  1. 集成度小,空间占用大
  2. 功耗高,运算速度慢
  3. 操作复杂,更换程序需要接线

晶体管计算机:

  1. 集成度相对较高,空间占用相对较小
  2. 功耗相对较低,运行速度较快
  3. 操作相对简单,交互更加方便

集成电路计算机:

  1. 计算机变得更小
  2. 功耗更低
  3. 计算速度更快
    (计算机具备进入千家万户的条件)

超大规模集成电路计算机:

  1. 一个芯片集成了上百万的晶体管
  2. 速度更快,体积更小,价格更低,更能被大众接受
  3. 用途丰富:文本处理,表格处理,高交互游戏与应用

2、微型计算机的发展历史

单核CPU —>>多核CPU

二、计算机的分类

1、超级计算机

  • 功能最强,运算速度最快,存储容量最大的计算机
  • 多用于国家高科技领域和尖端技术研究
  • 运算速度的单位是TFlop/s(每秒一万亿次浮点计算)

2、大型计算机

  • 大型机,大型主机,主机
  • 具有高性能,可处理大量数据与复杂的运算

3、迷你计算机

  • 也称为小型机,普通服务器
  • 不需要特殊的空调场所
  • 具备不错的算力,可以完成较复杂的运算

4、工作站

  • 高端的通用微型计算机,提供比个人计算机更强大的性能
  • 类似普通台式电脑,体积较大,但性能强劲

5、微型计算机

  • 个人计算机,功能齐全
  • 分为台式机,笔记本电脑,一体机

三、计算机的体系与结构

摩尔定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。

1、冯诺伊曼体系

定义:将程序指令和数据一起存储的计算机设计概念结构
早期计算机仅包含固定用途程序,改变程序需要更改结构、重新设计电路,冯诺伊曼把程序存储起来,在设计底层硬件的时候,设计成通用电路。当运行某个程序的时候,先翻译成电路理解的语言,然后让通用电路去执行相应的逻辑。它的核心是存储程序指令,设计通用电路。现代计算机都是冯诺伊曼机。

有五个重要组件

  1. 必须有一个存储器用于存储运行的程序以及运行所需要的数据
  2. 必须有一个控制器来控制程序的执行
  3. 必须有一个运算器负责运算的操作
  4. 必须有输入设备
  5. 必须有输出设备

所必须完成的四点工作内容

  1. 能够把需要的程序和数据送至计算机中,依赖输入设备
  2. 能够长期记忆程序、数据、中间结果以及最终运算结果的能力,依赖存储器实现
  3. 必须具备算术、逻辑运算和数据传送等数据加工处理的能力,由运算器和控制器完成
  4. 能够按照要求把处理结果输出给用户,需要输出设备实现

冯诺伊曼体系结构示意图
冯诺伊曼体系结构
图片来源:慕课网实战课程《编程必备基础 计算机组成原理+操作系统+计算机网络》

冯诺伊曼瓶颈
是指CPU和存储速率之间的问题无法调和。可以看到上图存储器是和CPU分开的,CPU处理速度很快,而到存储设备的传输速度却很慢,会导致CPU经常空转等待数据传输,非常浪费资源。

2、现代计算机的结构

现代计算机的结构是以存储器为核心的结构,本质上讲还是冯诺伊曼体系计算机,在原有结构进行改变,来解决冯诺伊曼瓶颈问题。

  1. 现代计算机在冯诺伊曼体系结构基础上进行修改
  2. 解决CPU与存储设备之间的性能差异问题

现代计算机体系结构示意图
现代计算机体系结构图片来源:慕课网实战课程《编程必备基础 计算机组成原理+操作系统+计算机网络》

四、计算机的层次与编程语言

1、程序翻译与程序解析

较为高级的计算机语言L1
较为低级的计算机语言L0

程序翻译
L1编写程序,在执行的时候先会生成一个逻辑等价的L0由计算机执行,L0为计算机实际执行的语言,L1生成L0的过程被成为程序翻译,生成的东西被称为编译器,整个过程是程序翻译的过程。

程序解析
使用L1进行逻辑描述,为了执行L1,还要使用L0语言实现另外一个程序,它将L1作为输入进行执行,每一个L1语句都会在L0里进行等价的逻辑转换,这个过程被称为程序解析,使用L0语言生成的另外一个程序被称为解释器。

区别:

  1. 计算机执行的指令都是L0
  2. 翻译过程生成新的L0程序,解析过程不生成新的L0
  3. 解析的过程由L0编写的解释器去解析L1程序

翻译型语言:C/C++,Object-C,Golang
解析型语言:Python,Php,Javascript
翻译+解释型语言:Java,C#

2、计算机的层次与编程语言

按照层次来划分计算机系统,大致划分为七个层次:
计算机系统的七个层次
图片来源:慕课网实战课程《编程必备基础 计算机组成原理+操作系统+计算机网络》

硬件逻辑层

  • 门、触发器等逻辑电路组成
  • 属于电子工程领域

微程序机器层

  • 编程语言是微指令集
  • 微指令所组成的微程序直接交由硬件执行

传统机器层

  • 编程语言是CPU指令集(机器指令)
  • 编程语言和硬件直接相关
  • 不同架构的CPU使用不同的CPU指令集

#一条机器指令对应一个微程序
#一个微程序对应一组微指令

操作系统层

  • 向上提供简易的操作界面
  • 向下对接了指令系统,管理硬件资源
  • 是在软件和硬件之间的适配层

汇编语言层

  • 编程语言是汇编语言
  • 汇编语言可以翻译成可直接执行的机器语言
  • 完成翻译的过程的程序是汇编器

高级语言层

  • 编程语言为广大程序员所接受的高级语言
  • 高级语言类别有两百多种
  • 常见有Python,Java,C/C++等

应用层

  • 满足计算机对某种用途而专门设计。office,Adobe等
  • 面向问题的应用程序

五、计算机的计算单位

1、容量单位

  • 物理层面,高低电平记录信息
  • 高电平表示1,低电平表示0,理论上只认识0/1两种状态,0/1称为bit(比特位)
  • 0/1表示的内容太少,需要更大的容量的表示方法,催生了早期字节单位
bit Byte KB MB GB TB PB EB
名字 比特位 字节 千字节 兆字节 吉字节 太字节 拍字节 艾字节
比例 - 8bits 1024B 1024KB 1024MB 1024GB 1024TB 1024EB
常见设备 门电路 - 寄存器 高速缓存 内存/硬盘 硬盘 云硬盘 数据仓库

1024=2^10
硬盘商家一般用10进位标记容量,所以买到的U盘容量偏小

2、速度单位

网络速度
网络中常用单位为(Mbps),所以在进行运算的时候要除以8得到实际的网络速度
1M/s=1Mbps=1Mbit/s
100M/s=100Mbps=100Mbit/s
100Mbit/s=(100/8)MB/s=12.5M/s

CPU速度

  • CPU的速度一般体现为CPU的时钟频率,单位一般用赫兹(Hz)表示,目前主流的CPU时钟频率都在2GHz以上
  • Hz是指秒分之一,是指每秒钟周期性变动重复次数的计量,并不是描述计算机领域所专有的单位,但并不妨碍描述CPU的速度
  • 对于CPU的频率实际上是指每秒钟高低电平变换的次数,2GHz=2*1000^3Hz=每秒20亿次

六、计算机的字符与编码集

1、字符编码集的历史

ASCII码

  • 使用7个bits就可以完全表示
  • 包含95个可打印字符
  • 包含33个不可打印字符(包括控制字符)

33+95=128=2^7,7个bits就可以表示ASCII码,由于很多应用或者国家中的符号都无法表示,第一次对ASCII码进行扩充,由7bits变成8bits,原来的128个字符扩充为256个字符,变为可拓展的ASCII码

Extended ASCII码

  • 常见的数学运算符
  • 带音标的欧洲字符
  • 其他常用符,表格符等

随着计算机的进一步发展,越来越多国家加入计算机使用行列当中,对计算机的字符要求越来越高

字符编码集的国际化

  • 欧洲,中亚,东亚,拉丁美洲国家语言的多样性
  • 语言体系不一样,不以有限字符组合的语言
  • 中国,韩国,日本等的语言最为复杂

2、中文编码集

GB2312

  • 1980年发明,我国最早最完备的编码集
  • 全称为《信息交换用汉字编码字符集——基本集》
  • 一共收录了7445个字符
  • 其中包括6763个汉字和682个其他符号

GB2312不符合国际标准,中国科学家在1995年推出了第二套比较完备的编码集GBK

GBK

  • 全称为《汉字内码扩展规范》
  • 向下兼容GB2312,向上支持国际ISO标准
  • 收录了21003个汉字,支持全部中日韩汉字

尽管GBK比较完备,但只是本地化的编码,跨国使用出现不兼容问题

Unicode

  • 兼容全球的字符集
  • 统一码,万国码,单一码
  • 定义了世界通用的符号集,规定了符号的二进制代码,使用UTF-*实现相关的编码
  • 常用的UTF-8是以字节为单位对Unicode进行编码

七、计算机的总线

连接计算机不同设备的数据线,为了解决不同设备之间的通信问题

1、总线是什么

USB通用串行总线

  • 提供了计算机对外连接的接口
  • 不同的设备可以通过USB接口进行连接
  • 可以作为连接的标准,促使外围设备的统一

PCI 总线
ISA总线
Thunderbolt总线

2、总线的分类

片内总线
高集成度芯片内部的信息传输线,大大简化芯片内部的电路结构

  • 主要是在芯片内部的总线
  • 连接芯片内部的寄存器与寄存器
  • 寄存器与控制器,运算器之间

系统总线
连接计算机外围各组件之间的信息传输线,包括CPU、主存、硬盘、IO设备、USB插槽、PCI插槽、显卡、声卡等设备
大致分为三类:

  1. 数据总线(位数一般和cpu位数想同,双向传输各个部件的数据信息;数据总线的卫视(总线宽度)是数据总线的重要参数)
  2. 地址总线(数据寻址,地址总线位数 =n 寻址范围0~2^n;指定源数据或目的数据在内存中的地址;位数与存储单元的位数有关)
  3. 控制总线(发出各种控制信号;控制信号一般由控制总线从一个组件发给另一个组件;可以监视不同组件之间的状态)

2、总线的仲裁

为什么需要总线的仲裁?
假设主存需要跟硬盘和IO设备交换数据,这时硬盘和IO设备已经就绪,没有仲裁会引起设备冲突。总线的仲裁是为了解决总线使用权的冲突问题。

总线仲的裁方法

  1. 链式查询
    好处:电路复杂度低,仲裁方式简单
    坏处:优先级低的设备难以获得总线的使用权,对电路故障敏感

  2. 计时器定时查询
    仲裁控制器对设备编号并使用计数器累计计数
    控制器接收到仲裁信号以后,会往所有设备发射出当前计数值
    计数值与设备编号一致的话则获得总线使用权

  3. 独立请求
    每个设备均有总线独立连接仲裁器
    设备可以单独向仲裁器发送请求和接受请求
    当同时收到多个请求信号的时候,仲裁器有权按优先级分配使用权
    好处:响应速度快,优先顺序可以动态改变
    坏处:设备连线多,总线控制相对较为复杂

八、I/O设备

1、常见输入输出设备

常见输入设备

  1. 字符输入设备
    薄膜键盘
    机械键盘(段落感,声音,压力,键程)
    电容键盘
  2. 图像输入设备
    鼠标
    数位板
    扫描仪(将图形信息转换为数字信号)
  3. 图像输出设备
    显示器
    打印机
    投影仪

2、输入输出接口的通用设计

设计输入输出接口的需求
支持读取数据
允许向设备发送数据
接口需要判断设备是否被占用
判断设备是否已经连接
判断设备是否正常启动

接口

  1. 数据线
    I/O设备与主机之间进行数据交换的信息传送线
    数据线可以分为单向传输数据线和双向传输数据线
  2. 状态线
    I/O设备状态向主机报告的信号线
    通过状态线主机可以查询I/O设备是否已经正常连接并就绪
    可以查询设备是否被进程占用
  3. 命令线
    CPU向设备发送命令的信号线
    发送读写信号
    发送启动停止信号
  4. 设备选择线
    主机选择I/O设备进行操作的信号线
    对连在总线上的设备进行选择

3、CPU与I/O设备的通讯方法

CPU速度与I/O设备不一致

程序中断
当外围设备准备就绪的时候就会向CPU发送中断信号,CPU内部有专门的电路响应中断信号,当CPU收到中断信号时会暂停当前工作转为处理外围I/O设备的工作等外围设备的事件,处理完成后CPU才会重新加载之前的工作。
提供低速设备通知的一种异步的方式(低速设备发出一个中断,让CPU来响应中断)
有了程序中断,CPU可以高速运转的同时可以兼顾低速设备的响应

DMA(直接存储器访问)
硬盘,外置显卡都有DMA设备

  1. DMA直接连接主存与I/O设备
  2. 在需要进行通讯的时候,DMA不需要CPU的参与
  3. 可以大大提高CPU效率,IO设备就绪的时候再也不需要打断CPU的工作

九、计算机存储器

1、存储器的分类

按照存储介质分为半导体存储器(内存,U盘,固态硬盘)、磁存储器(磁带,磁盘)

按照存取方式分为随机存储器RAM(可以随机读取,与存取的位置无关)、串行存储器(与位置有关,按顺序查找)、只读存储器ROM(只读不写)

2、存储器的层次结构

存储器要考虑的三个因素:读写速度、存储容量、价格
使用位价客观描述存储器的性价比
容量+价格=>位价:每比特位价格
依据位价和读写速度将存储器分为缓存(CPU里的寄存器和高速缓存),主存(计算机内存),辅存(计算机外部存储U盘等)三个层次
图示
图片来源:慕课网实战课程《编程必备基础 计算机组成原理+操作系统+计算机网络》

缓存-主存层次
原理:局部性原理
实现:在CPU与主存之间增加一层速度快(容量小)的Cache(高速缓存)
目的:解决主存速度不足的问题

局部性原理
CPU访问存储器时,无论是存取指令还是存取数据,所访问存储单元都趋于聚集在一个较小的连续区域中。

主存-辅存层次
原理:局部性原理
实现:在主存之外增加辅助存储器
目的:解决主存容量不够的问题

3、主存储器-内存

为什么主存因为断电会丢失数据?
RAM通过电容来存储数据,必须每隔一段时间时间刷新一次,如果断电,隔一段时间后将会丢失所有数据

主存储器与CPU如何交互?
在这里插入图片描述
图片来源:慕课网实战课程《编程必备基础 计算机组成原理+操作系统+计算机网络》

操作系统位数与主存的关系
32位:232 =4x220 =4GB (地址总线32位,寻址范围4GB大小)
64位:264 =234 x230 =234 GB (地址总线64位,寻址范围234 GB大小)

4、辅助存储器-磁盘

磁盘的物理结构

  • 表面是可磁化的硬磁特性材料
  • 通过磁头的径向运动读取磁道信息

磁盘的调度算法

  1. 先来先服务算法
    对于多个读写磁盘的请求都会将它排成一个队,谁先来读写谁
  2. 最短寻道时间优先算法
    调度的顺序与磁头当前的位置有关
    会优先访问距离磁头最近的磁道
    每次读取找到当前磁道最近的磁道读取
  3. 扫描算法(电梯算法)
    磁头每次只往一个方向运动
    到达一个方向需要服务的尽头再反方向运动
  4. 循环扫描算法
    在扫描算法的基础上
    只往一个方向读取,由内而外或者由外而内

5、计算机的高速缓存

高速缓存位于缓存-主存层次,在CPU与主存中间
目的是为了解决CPU与主存速度不匹配的问题

主存内部存储结构
:存放在一个存储单元当中二进制代码的组合,可以表示一个数据,一个指令,一个字符串,是内存当中存储单元的最小单位
字块:连续的字,一组字;存储在连续的存储单元中而被看作是一个单元的一组字

主存关于字,字块的简单运算
一个字有32位,一个字块共B个字,主存共M个字块,B x M=主存总字数,B x M x 32=主存总容量(bits)

字的寻址,字的地址包括两个部分
字块的部分用来指示当前的需要寻找的字属于哪个字块(字属于哪个字块)
字的部分用来寻找字块里面哪一个字是地址所指定的字(地址指定的字是字块中的哪个字)
前m位指定字块的地址 2m = M(主存共M个字块)
后b位指定字在字块中的地址 2b = B(一个字块B个字)

主存存储数据的方法计算例子
假设主存用户容量为4G,字块大小为4M,字长为32位,则对于字地址中的块地址m和块内地址b的位数,至少应该是多少?
4G=4096M
字块数:4096/4 = 1024
字块地址m:log21024 = 10 (在地址里至少需要10位来表示1024个字块)
块内字数:4M/32bit = 1048576 (每一个字块里有这么多字)
块内地址b:log21048576 = 20 (至少需要20位块内地址来表示块内所有的字)
m>=10,b>=20

高速缓存内部存储结构与主存非常类似
缓存的运算与主存运算类似
主存容量 >(远大于)缓存容量
缓存里存储的数据其实是主存里数据的一个备份,缓存每一个数据来自主存

  1. 存储的逻辑结构类似
  2. 缓存的容量较小
  3. 缓存的速度更快

高速缓存的工作原理
CPU需要的数据在缓存里,CPU可以高速的拿到数据
需要数据不再缓存里,CPU需要去主存里拿
CPU需要尽可能的从高速缓存中取数据,用量化的指标命中率来量化CPU从高速缓存取数据成功的几率
命中率是衡量缓存的重要性指标
理论上CPU每次都能从高速缓存取数据的时候,命中率为1高速缓存容量不及主存,命中率永远不可能为1

命中率如何计算?
假设访问主存次数:Nm
访问高速缓存次数:Nc
命中率: h = Nc/(Nc+Nm) (缓存次数占总次数比)

访问效率:e
假设访问主存时间:tm
访问缓存时间:tc
访问Cache-主存系统平均时间:ta = htc+(1-h)tm
访问效率:e = tc/ta(缓存时间/平均时间)

高速缓存的替换策略
良好的策略使得缓存里的数据都为CPU所用
高速缓存的替换时机:当CPU所需要的数据不再Cache内时,需要从主存里载入所需要的数据

  1. 随机算法
    每一次发生替换时随机选取高速缓存中的一个位置
  2. 先进先出算法(FIFO)
    把Cache看作是一个先进先出的队列
    优先替换掉最先进入队列里的字块
  3. 最不经常使用算法(LFU)
    优先淘汰最不经常使用的字块
    需要额外的空间去记录字块的使用频率
  4. 最近最少使用算法(LRU)
    优先淘汰一段时间内没有使用的字块
    有多种实现方法,一般使用双向链表
    把当前访问节点置于链表前面(保证链表头部节点是最近使用的)
    淘汰的时候淘汰链表尾部的节点
    最近最少使用算法图示
    图片来源:慕课网实战课程《编程必备基础 计算机组成原理+操作系统+计算机网络》

十、计算机的指令系统

1、机器指令的形式

机器指令主要由两个部分组成:操作码、地址码
机器指令本质上还是对数据进行操作

操作码:

  1. 操作码指明指令所要完成的操作
  2. 操作码的位数反映了机器的操作种类(假设位数8位,最多可以有28 = 256种操作)

地址码:

  1. 地址码直接给出操作数或者操作数的地址(指定数据或者数据地址)
  2. 分三地址指令(地址码字段有三个地址)、二地址指令和一地址指令

三地址指令: 操作码(OP)|addr1|addr2|addr3
(addr1)OP(addr2)=》(addr3) 地址1OP地址2 结果放在地址3

二地址指令:操作码(OP)|addr1|addr2
(addr1)OP(addr2)=》(addr1)或(addr2) 地址1OP地址2 结果放在地址1或地址2

一地址指令:操作码(OP)|addr1
(addr1)OP=》(addr1)自己对自己的操作
(addr1)OP(ACC)=》(addr1)一个操作数做默认行为 自增

零地址指令

  • 在机器指令中无地址码
  • 通常为空操作、停机操作、中断返回操作等

2、机器指令的操作类型

数据传输类型
发生在寄存器之间、寄存器与存储单元、存储单元之间的传送
包括数据读写、交换地址数据、清零置一等操作
算术逻辑类型
操作数之间的加减乘除运算
操作数之间的与或非等逻辑位运算
移位操作
数据左移(相当于乘2),数据右移(除以2)
完成数据在算术逻辑单元的必要操作
控制指令
等待指令、停机指令、空操作指令、中断指令等

3、寻址方式

指令寻址(数据寻址、跳跃寻址)

地址 指令
101 MOV R0,R1
102 LAD R1,6
103 ADD R1,R2
104 AND R1,R3
105 JMP 102

执行顺序:101—(顺序寻址)—102—(顺序寻址)—103—(顺序寻址)—104—(顺序寻址)—105—(跳跃寻址)—102

数据寻址(立即寻址、直接寻址、间接寻址)

  1. 立即寻址
    指令直接获得操作数
    运行指令时无需访问存储器
  2. 直接寻址
    机器指令里直接给出操作数在主存里的地址,所给出的地址指向主存,指向的位置是指令的操作数
    寻找操作数简单、不需要计算数据地址
  3. 间接寻址
    指令地址码给出的是操作数地址的地址(首先指向主存的一个位置,这个位置存放操作数的地址,主存中操作数的地址指向另一片区域,这片区域存储的是真正需要的操作数)
    需要访问一次或多次主存里获取操作数
寻址方式 优点 缺点
立即寻址 速度快 地址码位数限制操作数表示范围
直接寻址 寻找操作数简单 地址码位数限制操作数寻址范围
间接寻址 操作数寻址范围大 速度较慢

十一、计算机的控制器

控制器是协调和控制计算机运行的
控制器的组成

  1. 程序计数器
    主要用来提供给其他控制单元当前需要执行的指令的地址的
    用来存储下一条指令的地址
    CPU工作时,会循环不断从程序计数器里拿出指令
    当指令被拿出时,程序计数器会指向下一条指令
  2. 时序发生器
    属于电气工程领域,用于发送时序脉冲
    CPU依据不同的时序脉冲有节奏的进行工作
  3. 指令译码器
    控制器主要部件之一
    翻译操作码对应的操作以及控制传输地址码对应的数据
  4. 各种寄存器
    指令寄存器(控制器主要部件之一,从主存或Cache存取计算机指令)
    主存地址寄存器(保存当前CPU正要访问的内存单元的地址,使用地址总线与主存进行相关通信)
    主存数据寄存器(保存当前CPU正要读或写的主存数据)
    通用寄存器(暂时存放或传送数据和指令,可以用来保存ALU算术逻辑单元运算的中间结果,容量比一般专用寄存器要大)
  5. 总线
发布了20 篇原创文章 · 获赞 18 · 访问量 8347

猜你喜欢

转载自blog.csdn.net/wankcn/article/details/103555959