概述篇
计算机发展的四个阶段
- 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
- 执行指令: 装载数据到寄存器; ALU处理数据; 记录运算状态; 送出运算结果
CPU的流水线设计
即可以同时对多条指令进行流水处理,而不是串行处理
参考资料
慕课网
《计算机科学导论》