概述
发展简史
计算机发展的四个阶段
- 电子管计算机
- 晶体管计算机
- 集成电路计算机
- 超大规模集成电路计算机
- (未来)生物计算机、量子计算机
微型计算机的发展历史
单核CPU -> 多核CPU
摩尔定律:集成电路的性能,每18~24个月就会提升一倍。
计算机的分类
超级计算机
标记超级计算机运算速度的单位是TFlop/s:1TFlop/s=每秒一万亿次浮点运算。
大型计算机
具有高性能,可处理大量数据与复杂的运算。
迷你计算机(服务器)
也称为小型机、普通服务器,具有不错的算力,可以完成较复杂的运算。
工作站
高端的通用微型计算机,提供比个人计算机更强大的性能。
微型计算机
又称为个人计算机,包括:台式机、笔记本电脑、一体机。
计算机的体系与机构
冯诺依曼体系
是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。包含:存储器、控制器、运算器、输入设备和输出设备。
计算机的层次与编程语言
程序翻译与程序解释
编译器是用于将高级编程语言转换为低级编程语言的翻译器。它在一个会话中转换整个程序并报告转换后检测到的错误。
解释器是一种计算机程序,能够把解释型语言解释执行。解释器就像一位“中间人”。解释器边解释边执行,因此依赖于解释器的程序运行速度比较缓慢。
计算机的层次
应用层:满足计算机针对某种用途而专门设计。
高级语言层:常见的高级语言有:C、Python、Golang、Java等。
汇编语言层:编程语言是汇编语言,通过汇编器翻译成可直接执行的机器语言。
操作系统层:向上提供了简易的操作界面,向下对接指令系统,管理硬件资源,是软硬件之间的适配层。
传统机器层:编程语言是CPU指令集(机器指令),和硬件直接相关。
微程序机器层:编程语言是微指令集。
硬件逻辑层:门、触发器等逻辑电路组成。
计算机的计算单位
容量单位
在物理层面,高低电平记录信息,理论上只认识0/1两种状态,称为bit(比特位)。
字节:1Byte=8bits
bit | Byte | KB | MB | GB | TB | PB | EB | |
---|---|---|---|---|---|---|---|---|
名称 | 比特位 | 字节 | 千字节 | 兆字节 | 吉字节 | 太字节 | 拍字节 | 艾字节 |
比例 | - | 8bits | 1024B | 1024KB | 1024MB | 1024GB | 1024TB | 1024PB |
常见设备 | 门电路 | - | 寄存器 | 高速缓存 | 内存/硬盘 | 硬盘 | 云硬盘 | 数据仓库 |
速度单位
网络速度
网络速度常用单位是Mbps:
100M/s=100Mbps=100Mbit/s
100Mbit/s=(100/8)MB/s=12.5MB/s
CPU速度
CPU的速度一般体现为CPU的时钟频率,时钟频率的单位一般是赫兹(Hz),主流CPU的时钟频率都在2GHz以上。
赫兹是频率的国际单位,表示每一秒周期性事件发生的次数。
计算机的字符与编码集
字符编码集的历史
ASCII码,美国信息交换标准代码。
使用7个bits就可以完全表示ASCII码,包含95个可打印字符,33个不可打印字符(包括控制字符)。
Extended ASCII码,是将ASCII码由7位扩充为8位而成。EASCII码比ASCII码扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号。
中文编码集
GB2312,《信息交换用汉字编码字符集·基本集》,GB/T 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。
GBK,《汉字内码扩展规范》, GBK共收录21886个汉字和图形符号,其中汉字(包括部首和构件)21003个,图形符号883个。GBK向下完全兼容GB2312-80编码,向上支持国际ISO标准。
Unicode,全称Unicode标准,又称为统一码,万国码。Unicode最普遍的编码格式是UTF-8和UTF-16。UTF-8以字节为单位对Unicode进行编码。
组成
计算机的总线
总线是指计算机设备和设备之间传输信息的公共数据通道。总线是连接计算机硬件系统内多种设备的通信线路,它的一个重要特征是由总线上的所有设备共享,因此可以将计算机系统内的多种设备连接到总线上。
总线是指计算机组件间规范化的交换数据的方式,即以一种通用的方式为各个组件提供数据传送和控制逻辑。
总线的分类
数据总线(Data Bus)在CPU和RAM之间来回传送需要处理或是需要存储的数据。DB的宽度决定了CPU和RAM每次交换数据的位数。
地址总线(Address Bus)用来指定在RAM中存储的数据的地址,地址总线的宽度决定了CPU的最大寻址能力。如访问1MB存储器中的任一单元,需要给出2^20个地址,即需要20位地址(2^20=1M)。
控制总线(Control Bus)用来传送控制信息、时序信号和状态信息等。
常见总线
PCI总线,是目前微型机上广泛采用的内总线,采用并行传输方式。
SATA(Serial ATA),主要用于主板和大量存储设备之间的数据传输。
USB,通用串行总线,USB由4条信号线组成,其中两条用以传送数据,另外两条传送+5V容量为500mA的电源。
计算机的输入输出设备
常见的输入输出设备
字符输入设备:键盘(薄膜键盘、机械键盘、电容键盘)。
图形输入设备:鼠标、数位板(输入板和压感笔)、扫描仪。
图像输出设备:显示器(CRT显示器、液晶显示器)、打印机、投影仪。
输入输出接口的通用设计
数据线是I/O设备与主机之间进行数据交换的传送线。
状态线是I/O设备向主机报告状态的信号线,查询设备是否已经被占用。
命令线是CPU向设备发送命令的信号线,发送读/写、启用/停止信号。
设备选择线是主机选择I/O设备进行操作的信号线,对连在总线上的设备进行选择。
CPU与IO设备的通信
程序中断:当外围I/O设备就绪时,向CPU发送中断信号,CPU有专门的电路响应中断信号。
DMA(直接存储器访问):DMA直接连接主存和I/O设备,当主存和I/O设备交换信息时,不需要中断CPU。
计算机存储器概念
存储器分类
按存储介质分类:半导体存储器(:内存、U盘、固态硬盘)、磁存储器(:磁带、磁盘)。
按存取方式分类:随机存储器(RAM)、串行存储器、只读存储器(ROM)。
存储器层次结构
寄存器(Register)
高速缓存(Cache)
主存(Primary Storage)
外存(Secondary Storage)
主存储器与辅助存储器
内存
RAM(随机存取存储器:Random Access Memory)通过电容存储数据,必须隔一段时间刷新一次,如果掉电,那么一段时间后将丢失所有数据。
磁盘
表面是可磁化的硬磁特性材料,移动磁头径向运动读取磁道信息。
磁盘调度算法
磁盘调度分为移臂调度和旋转调度两类,并且是先进行移臂调度,然后进行旋转调度。
先来先服务:按顺序访问进程的磁道读写需求。
最短寻道时间优先:优先访问离磁头最近的磁道。
扫描算法(电梯调度算法):每次只往一个方向移动,到达一个方向的尽头再反方向移动。
单向扫描调度算法:规定磁头只做单向运动。
计算机的高速缓存
工作原理
字:指存放在一个存储单元的二进制代码组合。
字块:存储在连续的存储单元中而被看作是一个单元的一组字。
假设:一个字有32位、一个字块共B个字、主存共有M个字块,那么:B*M=主存总字数;B*M*32=主存总容量(bits)。
例子:假设主存用户空间容量为4G,字块大小为4M、字长为32位,则对于字地址中的块地址m和块内地址b的位数,至少应该是多少?
字块数:4GB/4M=4*1024M/4M=1024=2^10
地址数:4M/32b=4*1024K/32b=4*1024*1024B/32b=4*2^10*2^10*8b/32b=2^20
缓存命中率 h:命中次数$N_c$/总次数N = 命中次数$N_c$ / (命中次数$N_c$ + 未命中次数$N_m$) $$ h=\frac{N_c}{N_c+N_m} $$ 访问主存时间:$t_m$、访问缓存时间:$t_c$
访问Cache-主存系统平均时间:$t_a=ht_c+(1-h)t_m$
访问效率 e $$ e=\frac{t_c}{t_a}=\frac{t_c}{ht_c+(1-h)t_m} $$ 例子:假设CPU在执行某段程序时,共访问了Cache命中2000次,访问主存50此,已知Cache的存取时间为50ns,主存的存取时间为200ns,求Cache-主存系统的命中率、访问效率和平均访问时间? $$ 命中率:h=\frac{N_c}{N_c+N_m}=\frac{2000}{2000+50}=\frac{40}{41} $$
$$ 平均访问时间:t_a=ht_c+(1-h)t_m=\frac{40}{41}*50+(1-\frac{40}{41})*200=\frac{2200}{41} $$
$$ 访问效率:e=\frac{t_c}{t_a}=\frac{50}{\frac{2200}{41}}=\frac{41}{44} $$
替换策略
随机算法。
先进先出算法(FIFO):把高速缓存看作队列,优先替换先进入队列的字块。
最不经常使用算法(LFU):优先淘汰最不经常使用的字块,需要额外的空间记录字块使用的频率。
最近最少使用算法(LRU):优先淘汰一段时间内没有使用的字块,一般用双向链表实现。
计算机的指令系统
机器指令的形式
机器指令主要由两个部分组成:操作码、地址码。
操作码指明指令要完成的操作,操作码的位数反映了机器的操作种类。
地址码直接给出操作数或操作数的地址,分为三地址码指令、二地址码指令和一地址码指令。
零地址指令是在机器指令中无地址码,一般有空操作、停机操作、中断返回操作等。
机器指令的操作类型
数据传输:寄存器之间、寄存器与存储单元、存储单元之间传送。
算术逻辑操作:操作数之间的加减乘除运算、操作数的与或非等逻辑位运算。
移位操作:数据左移、数据右移操作。
控制指令:等待指令、停止指令、空操作指令、中断指令等。
机器指令的寻址方式
指令寻址:顺序寻址、跳跃寻址。
数据寻址:立即寻址、直接寻址、间接寻址。
计算机的控制器
控制器是协调和控制计算机运行的,主要有以下部分:
程序计数器,用来存储下一条指令的地址。
时序发生器,用于发送时序脉冲,CPU依据不同的时序脉冲有节奏的进行工作。
指令译码器,翻译操作码对应的操作以及控制传输地址码对应的数据。
各种寄存器:指令寄存器、主存地址寄存器、主存数据寄存器、通用寄存器。
总线
计算机的运算器
运算器是用来进行数据运算加工的,主要有以下部分:
数据缓冲器,分为输入缓冲和输出缓冲。
ALU,算术逻辑单元,完成常见的位运算、算术运算。
通用寄存器,用于暂时存放或传送数据或指令,可保存ALU的运算中间结果。
状态字寄存器,存放运算状态(条件码、进位、溢出、结果正负),存放运算控制信息(调试跟踪标记位、允许中断位)。
总线
计算机指令的执行过程
指令执行过程
取指令 –> 分析指令 –> 执行指令
CPU的流水线设计
串行执行m条指令:$T_1=3t*m$
流水线执行m条指令:$T_2=t*(m+2)$
$$ H=\frac{T_2}{T1}=\frac{t*(m+2)}{3t*m}=\frac{1}{3}+\frac{1}{3*m} $$
假设指令的各个阶段耗时为 $t_1$……$t_k$,流水线执行时长的计算有如下公式:
$$ 理论公式:(t_1 + t_2 + ... + t_k)+(n - 1)*\Delta t \\ \\ 实践公式:(k + n - 1)* \Delta t $$
计算
进制运算的基础
进制的定义
进位制是一种记数方式,亦称为进位计数法或位值计数法。是用有限种数字符号来表示无限的数值,使用的数字符号的数目称为这种进位制的基数或底数。
正整数N,基础为r,可以表示为:
$$
N = d_{n-1}d_{n-2}…d_1d_0=d_{n-1}r^{n-1}+d_{n-2}r^{n-2}+…+d_1r+d0
$$
十进制 N = 1024:$N=1*10^3+2*10^1+4$
。
二进制N = 10000000000:$N=1*2^{10}$。
二进制运算的基础
整数二进制转十进制,按权展开法:
$$ N=(01100101)=1*2^6+1*2^5+1*2^2+1=101 $$
$$ N=(11101101)=1*2^7+1*2^6+1*2^5+1*2^3+1*2^2+1=237 $$
整数十进制(101)转二进制,重复相除法:
重复除以2 | 得商 | 取余数 |
---|---|---|
101/2 | 50 | 1 |
50/2 | 25 | 0 |
25/2 | 12 | 1 |
12/2 | 6 | 0 |
6/2 | 3 | 0 |
3/2 | 1 | 1 |
1/2 | 0 | 1 |
将“取余数”列从下往上排列即可得到十进制101的二进制表示。
小数二进制转十进制,按权展开法:
$$ N=(0.11001)=1*2^{-1}+1*2^{-2}+1*2^{-5}=\frac{25}{32}=0.78125 $$
$$ N=(0.01011)=1*2^{-2}+1*2^{-4}+1*2^{-5}=\frac{11}{32}=0.34375 $$
小数十进制(0.78125)转二进制,重复相乘法:
重复乘以2 | 得积 | 取1 |
---|---|---|
25/32 | 50/32=1+18/32 | 1 |
18/32 | 36/32=1+4/32 | 1 |
4/32 | 8/32=0+8/32 | 0 |
8/32 | 16/32=0+16/32 | 0 |
16/32 | 1=1+0 | 1 |
将“取1”列从上往下排列即可得到十进制0.78125的二进制表示。
有符号数和无符号数
使用0表示正数,使用1表示负数。
原码表示法
原码是指一个二进制数左边加上符号位后得到的码,在原码表示法中,最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值。数值0的原码表示有两种形式:[+0]原=0 0000000,[-0]原= 1 0000000。
反码表示法
在反码表示法中,最高位是符号位,0表示正号,1表示负号,正数的反码与原码相同,负数的反码则是其绝对值按位求反。数值0的反码表示有两种形式:[+0]反=0 0000000,[-0]反=1 1111111。
补码表示法
在补码表示法中,最高位是符号位,0表示正号,1表示负号,正数的补码与其原码和反码相同,负数的补码则等于其反码的末位加1.在补码表示中,0有唯一的编码:[+0]补=0 0000000,[-0]补=0 0000000。
定点数与浮点数
定点数的表示方法
小数点固定在某个位置的数称之为定点数。小数点固定在符号位之后表示纯小数,小数点固定在数值位末尾表示纯整数。
浮点数的表示方法
浮点数的表示格式
S:尾数(尾数规定使用纯小数)、r:基数、j:阶码
浮点数的表示范围
假设阶码数值取m位,尾数数值取n位。阶码能够表示的范围:$[-(2^m-1),2^m-1]$,尾数能够表示的范围:$[-(1-2^{-n}),-2^{-n}]$ 和$[2^{-n}, 1-2^{-n}]$。
使用4字节,32位来表示浮点数称为单精度浮点数,使用8字节,64位来表示浮点数称为双精度浮点数。
浮点数的规格化
例子:设浮点数字长位16位,阶码为5位,尾数为11位,将十进制数13/128表示为二进制浮点数。
定点数的加减法运算
补码运算:
数值位与符号位一同运算,并将符号位产生的进位自然丢掉。
例子:A=-110010,B=001101,求A+B
A[补]=1,001110
B[补]=0,001101
(A+B)[补]=1,011011,换算成二进制为:A+B=-100101
例子:A=-0.1010010,B=0.0110100,求A+B
A[补]=1,1.0101110
B[补]=0,0.0110100
(A+B)[补]=1,1.1100010,换成二进制为:A+B=-0.0011110
减法通常转化为加法进行运算,将减数与被减数的补码进行加法运算,即可得出差。-B[补]等于B[补]连同符号位按位取反,末位加一。
浮点数运算
浮点数的加减法运算
对阶,保持两个浮点数阶码一致,使得尾数可以进行运算。
尾数求和,使用补码进行运算,减法转换为加法进行运算。
尾数规格化,若运算结果所得的尾数不是规格化的数,则需要进行规格化处理。当尾数溢出时,需要调整阶码。
舍入,“0舍1入”,右移时,阶码加一。
溢出判断,通过阶码的双符号位判断是否溢出。
浮点数的乘数法运算
浮点数相乘,其积的阶码等于两乘数的阶码相加,积的尾数等于两乘数的尾数相乘。浮点数相除,其商的阶码等于被除数的阶码减去除数的阶码,商的尾数等于被除数的尾数除以除数的尾数。乘除运算的结果都需要进行规格化处理并判断阶码是否溢出。