这个非科班的博主懂得蛮多的 也太厉害了
原文地址 www.cnblogs.com
目录
一、计算机系统概论 1. 冯诺依曼计算机组成
主机(cpu+内存),外设(输入设备+输出设备+外存),总线(地址总线+数据总线+控制总线) 2. 计算机层次结构
应用程序-高级语言-汇编语言-操作系统-指令集架构层-微代码层-硬件逻辑层 3. 计算机性能指标
非时间指标 【字长】机器一次能处理的二进制位数 ,常见的有32位或64位 【总线宽度】数据总线一次能并行处理的最大信息位数,一般指运算器与存储器之间的数据总线的位数 【主存容量】主存的大小 【存储带宽】单位时间内与主存交换的二进制位数 B/s 时间指标 【主频f】时钟震荡的频率 Hz;【时钟周期T】时钟震荡一次的时间 t 【外频】cpu与主板之间同步的时钟频率,系统总线的工作频率;【倍频】主频与外频的倍数 =主频/外频 【CPI】clock cycles per instruction,执行一条指令需要的周期数(平均) 【MIPS】million instructions per second,每秒执行的指令总条数 MIPS= f / CPI (忽略单位) 二、数据表示 1. 基本概念
真值 :+0101,-0100机器数 : [x]原=01012. 几种机器数
原码 :x = -0101,[x]原 = 1101反码 :x = -0101,[x]反 = 1010补码 :x = -0101,[x]补 = 1011移码 :x = -0101,[x]移 = 2^n + x = 0011 PS:这里说说对补码与移码自己的理解。补码是为了化减法为加法方便计算机设计运算,移码是为了方便比较大小,用在浮点数的阶码中。
补码——任何一个有模的系统中,减法都可以通过加其补码来表示 。最简单的例子就是以12为模的钟表,比如现在是3点,那么**-5个小时就等于 +7个小时**,都是10点。这里7就是5的补码。
移码——数据对应关系一次挪动一下位置,使得看起来小的数真值也小。比如原本0000表示0,现在表示-128,然后0001表示-127,一直到1111表示+127,这样就方便比较了。
3. 定点数与浮点数
定点数 :小数点固定 x.xxxxxx,表示范围受限,忘掉它吧
浮点数 :数的范围和精度分别表示。
一般格式 :EEEE…EMMM…M,E部分是阶码 (数的范围i),M部分是尾数 (数的精度)。缺点:阶码和尾数位数不固定,太灵活了
IEEE754格式 :跟我背下来----
32位的是(单精度):1位符号位S + 8位偏指数E + 23位有效尾数M,偏移值为127。
64位的是(双精度):1位符号位S + 11位偏指数E + 52位有效尾数M,偏移值为1023。
真值就是(32位为例) N = (-1)^S * 2^(E-127) * 1.M
浮点数的特殊情况 :
E=0,M=0:机器零
E=255,M=0:无穷大,对应于x/0
E=255,M!=0:非数值NaN,对应0/0
ps:附上一份IEEE754文档:https://files.cnblogs.com/files/flashsun/7542008-2008.pdf
4. 数据校验
基本原理 :增加冗余码码距 :合法编码之间不同二进制位数的最小值码距与检错、纠错能力 : 码距 d>=e+1:检查e个错误 码距 d>=2t+1:纠正t个错误 码距 d>=e+t+1:同时检查e个错误,并纠正t个错误。(e>=t) PS:这里说下我的理解,增加码距就是增加非法编码的数量,看到非法编码就算检查出错误了 ,而非法编码距离哪个合法编码比较进就认为正确的应该是什么(简单理解,可参考下面的图),也就是可以纠正错误 。这里看到过一个好的几何理解图,仔细品味下:
举个例子:比如一共有8位,码距为1则检查不出任何错误,因为所有编码都是合法编码。如果码距为2,那合法编码应该像 00000000,00000011,00001100,00001111这样,那如果出现00000001这样的非法编码就出错了,可检查一位错,但如果两位同时错了,则有可能又跳到另一个合法编码上了,就检查不出2位错。
那如果码距是3,那合法编码应该像 00000000,00000111,00111000,00111111 这样,那如果出现一位错 00000001,或者两位错00000011,都是非法编码,都能检查出错误,并且此时可以纠正00000001为00000000,纠正00000011为00000111。但是三位同时错就检查不出了。
常见校验策略 :奇偶校验,CRC校验,海明校验
ps:海明编码最强视频演示教程:https://www.youtube.com/watch?v=373FUw-2U2k
三、运算方法与运算器 1. 定点数运算及溢出
定点数加减法 :减法化加法,用补码直接相加,忽略进位
溢出 :运算结果超出了某种数据类型的表示范围
溢出检测方法 :统一思想概括为正正得负或负负得正则溢出 ,正负或负正不可能溢出
方法1 :V = XYS + XYS(XY为两个加数的符号位,S为结果的符号位,_表示非),那么V = 1则为溢出
方法2 :V = C0 ⊕ C1(C0是最高数据位产生的进位,C1是符号位产生的进位),那么V = 1则为溢出
方法3 :V = Xf1 ⊕ Xf2(数据采用变型补码 Xf1Xf2 X0X1X2X3… )
PS:以上方法都是利用正正得负负负得正则溢出为出发点的电路设计
2. 补码一位乘法——Booth算法
[x·y]补 = [x]补·( -y0+∑ yi2-i )
= [x ]补·[ - _y_0 + _y_12-1 + _y_22-2 + … + _yn_2-n ]
= [x ]补·[ - _y_0 + (_y_1 - _y_12-1) + (_y_22-1 - _y_22-2) + … + (_yn_2-(n -1) - _yn_2-n )]
= [x ]补·[(_y_1 - _y_0) + (_y_2 - _y_1) 2-1 + … + (yn - yn -1) 2-(n -1) + (0 - yn )2-n ]
总结起来设计数字电路的规则就是:
为00或者为11的时候,直接右移一位 为01的时候,加x的补,然后右移一位 为10的时候,加-x的补,然后右移一位 PS:其实第一行和最后一行都能设计数字电路,为什么要从第一个式子推到最后一个式子呢?原因有两点:
1)二进制中如果有0,可以不进行运算
2)如果有连续的1可以减少计算次数,比如 a * 001111100 = a * (010000000 - 0000000100)
所以每次判断 yn+1 - yn就可以减少计算次数了
参考:https://www.cnblogs.com/xisheng/p/9260861.html
3. 定点数除法 — 略,没找到好的资料
4. 浮点数加减法
(1)求阶差,阶码小的对齐大的
(2)尾数加减
(3)结果规格化
四、存储系统 1. 存储系统层次结构
主存速度缓慢的原因 :主存增速与CPU不同步,执行指令期间多次访问主存
主存容量不足的原因 :
存在制约主存容量的技术因素:如由CPU、主板等相关技术指标规定了主存容量 应用对主存容量需求不断扩大:window98 – 8M,windows 8 – 1G -----> 存储体系结构化层次 : CPU – Cache1 – Cache2(解决速度) – 主存 – 辅存(解决容量)
存储体系结构化层次理论基础 :
时间局部性 :程序体现为循环结构空间局部性 :程序体现为顺序结构2. 主存中的数据组织
存储字长 :主存的一个存储单元所包含的二进制位数,目前大多数计算机主存按字节编址,主要由32为和64位
数据存储与边界的关系 :
按边界对齐的数据存储,未按边界对齐的数据存储 边界对齐与存储地址的关系:(32位为例) 双字长 边界对齐:起始地址最末三位为000(8字节整数倍)单字长 边界对齐:起始地址最末二位为00(4字节整数倍)半字长 边界对齐:起始地址最末一位为0(2字节整数倍)大端与小端存储方式 :
大端 :最高字节地址是数据地址(0123存成0123)小端 :最低字节地址是数据地址(0123存成3210)3. 存储器分类
SRAM存储器 :存取速度快,但集成度低,功耗大,做缓存DRAM存储器 :存取速度慢,但集成度高,功耗低,做主存DRAM刷新方式:集中刷新、分散刷新、异步刷新
4. 主存容量的扩展
位扩展法 :8K * 8位 --> 8K * 32位字扩展法 :8K * 8位 --> 32K * 8位字位同时扩展法 :8K * 8位 --> 32K * 32位5. Cache的基本原理
cache的工作过程
数据 :cpu与cache交换字,cache与内存交换块读 :命中,不命中写 :写穿策略,写回策略 写策略
写穿策略 (write through):同时写缓存和内存,好像穿过缓存 一样。若不命中,先写到主存中,并选择性地同时分配到缓存中(写分配/非写分配)写回策略 (write back):写到缓存后不管了,只有当缓存的内容替换回主存时再管,需有脏位。好像隔段时间后再写回 到主存中一样 地址映射机制
相联存储器 :地址本身包含着位置啊可比较的信息啊等内容信息,可根据区分地址内容进行寻址主存地址 = 块地址 + 块内偏移地址 = (Tag + Index) + 块内偏移地址cache结构 好多行,每行与主存块大小相等 每行 = tag + data + valid + dirty 三种映射方式 **全相联:**cache行号 = random(内存块号) **直接相联:**cache行号 = 内存块号 % cache行数 **组相联:**两者结合。8行1路组相联就是全相联,8行8路组相联就是直接相联 替换算法
先进先出法-FIFO
最近最不经常使用法-LFU
近期最少使用法-LRU
随机替换法
6. 虚拟存储器
解决问题 :主存容量不足。希望向程序员提供更大(比主存大)的编程空间分类 :页式,段式,段页式页式实现方式 :MMU(Memory Management Unit) + 页表 + TLB(Transaction Lookaside Buffer:地址转换后备缓冲器)页式转换过程 :虚拟地址 = 虚拟页号 + 页内偏移 ==> 物理页号 + 页内偏移7. RAID
概念 :独立磁盘构成的具有冗余能力的阵列(Redundant Arrays Independent Disks)核心技术 :使用异或运算恢复数据 (x⊕y = z --> x = y⊕z)分类 : RAID0 :条带均匀分布 磁盘0磁盘1磁盘2磁盘3D0D1D2D3D4D5D6D7D8D9D10D11RAID1 :以镜像为冗余方式 磁盘0磁盘1D0D0D1D1D2D2RAID3/4 :有校验盘 磁盘0磁盘1磁盘2校验磁盘D0D1D2P0D3D4D5P1D6D7D8P2RAID5 :校验信息分布式 磁盘0磁盘1磁盘2磁盘3D0D1D2P0D3D4P1P5D6P2D7D8P3D9D10D11 RAID10/01 :10是先镜像再条带化,01是先条带化再镜像RAID50 :先RAID5,再条带化五、指令系统 1. 指令系统基本概念
指令集 :一台机器所有指令的集合。系列机 (同一公司不同时期生产);兼容机 (不同公司生产)指令字长 :指令中包含的二进制位数,有等长指令 、变长指令 。指令分类 根据层次结构 :高级、汇编、机器、微指令根据地址码字段个数 :零、一、二、三地址指令根据操作数物理位置 存储器-存储器(SS) 寄存器-寄存器(RR) 寄存器-存储器(RS) 根据指令功能 :传送、算术运算、位运算、控制转移指令格式 :操作码+数据源+寻址方式2. 寻址方式
**指令寻址方式:**顺序寻址,跳跃寻址 操作数寻址方式 : 立即数寻址 :地址码字段是操作数本身 MOV AX, 200H寄存器寻址 :地址码字段是寄存器地址 MOV AX, BX直接寻址 :地址码字段是内存地址 MOV AX, [200H]间接寻址 :地址码字段是内存地址的地址 MOV AX, I[200H]寄存器间接寻址 :地址码字段是存内存地址的寄存器地址 MOV AX, [BX]相对寻址 :操作数地址 + 当前PC的值基址寻址 :操作数地址 + 基址寄存器的值(一段程序中不变) MOV AX, 32[B]变址寻址 :操作数地址 + 变址寄存器的值(随程序不断变化) MOV AX, 32[SI]3. MIPS
三种指令格式 R型指令: 6bits5bits5bits5bits5bits6bits000000RsRtRdshamtfunctI型指令: 6bits5bits5bits16bitsOPRsRt立即数J型指令: 6bits26bitsOP立即数六、中央处理器 1. CPU的组成与功能
2. 数据通路
概念 :执行部件间传送信息的路径,分共享通路(总线)和专用通路抽象模型 :时钟驱动下,A --> 组合逻辑 --> BD触发器定时模型 : 时钟触发前要稳定一段时间:建立时间(Setup Time) 时钟触发后要稳定一段时间:保持时间(Hold Time) 时钟触发到输出稳定的时间:触发器延迟(Clk_to_Q) 与时钟周期的关系 : 时钟周期 > Clk_to_Q + 关键路径时延 + Setup Time Clk_to_Q + 最短路径时延 > Hold Time 3. 指令周期
基本概念 时钟周期 = 节拍脉冲 = 震荡周期机器周期 = CPU周期 = 从主存读取一条指令的最短时间指令周期 = 从主存读指令并执行指令的时间4. CPU设计
略,详情请参见《自制CPU系列》
七、总线 1. 系统总线的特性及应用
总线概念 :将计算机系统中各部件连接起来总线分类 :(外部/内部,系统/非系统,串行/并行,同步/异步…) 按用途分类 : 存储总线 :cpu与存储器系统总线 :连接存储总线和IO总线的中间总线IO总线 :连接外部设备按位置分类 : 外部总线 :USB,火线(IEEE1394)内部总线 :PCI(连网卡),AGB(连显卡)(芯)片内总线 :AMBA(ARM处理器) 按组成分类 数据总线 :传数据,双向三态地址总线 :传地址,单向三态控制总线 :控制信号和时序信号电源线和地线 :略2. 总线性能和总线事物
总线的性能参数 总线频率 :总线工作速率f,单位是MHz总线宽度 :数据总线的宽度w,单位是bit总线传输速率 :总线传输数据量BW,单位是MB/s。BW = w / 8 * f总线事务 概念 :从请求总线到完成使用的操作序列(请求 - 裁决 - 地址传输 - 数据传输 - 总线释放)角色 :主设备(CPU,DMA)和从设备四个阶段 :请求与仲裁 - 传输 - 寻址 - 结束常见总线操作 :读,写,读修改写,写后读,块操作3. 总线连接方式
总线桥 :不同速率总线之间的连接,起速度缓冲、电平转换、控制协议转换的作用 4. 总线仲裁和数据传输方式
菊花链式串行总线仲裁 :简单,只要有一个主设备占用总线,其他就占不了集中式并行总线仲裁 : 固定优先级策略 :优先级高的主设备,总会优先控制总线权轮叫式策略 :皇帝轮流做LRG策略 :最近获得控制权的,再获得控制权的优先级高(经常用的就更容易获得总线控制权)5. 总线标准
概念 :计算机各部件之间利用总线传输信息应遵守的协议和规范,包括硬件和软件两部分常见的总线标准 机箱内部总线: ISA - EISA - VESA ISA(Industrial Standard Architecture) :最早指定的总线技术标准,总线宽度8/16位,频率5-8MHz,带宽5-8MB/sEISA :宽度变成32位VESA :宽度变成64位PCI(PCIe) - AGP 主要用于系统总线和IO总线,取代ISA 地址总线和数据总线分时复用,支持即插即用(自动寻找驱动程序) 32/64位,133/264MB/s 机箱外部总线: 八、输入输出系统 1. 输入输出系统概述
组成 :外设、接口、总线、管理软件基本功能 完成计算机内外的信息传递 保证CPU正确选择输出设备 利用缓冲等,实现主机与外设的速度匹配 **特点:**异步性、实时性、设备无关性 **输入过程:**CPU把地址值放入总线 --> CPU等候设备数据有效 --> CPU从总线读入数据存入寄存器 **输出过程:**CPU把地址值放入总线 --> CPU把数据值放入总线 --> 设备等数据有效取走数据 IO系统性能 :存储IO、通信IO 连接特性 :哪些设备可以和IO相连IO系统容量 :IO系统可以容纳的设备数响应时间 :从用户输入命令到得到结果所花的时间(s)吞吐率 :单位时间完成的IO操作次数(用IOP表示)2. 输入输出方式
无条件IO方式 :执行IO指令时,CPU默认外设已经准备就绪,外设很难满足这一点程序控制IO方式 :执行IO指令时,先获取设备状态(设备状态寄存器),决定下一步操作(程序决定) 数据要经过CPU,CPU还要浪费大量时间查询设备状态 中断IO方式 :外设主动通知CPU接收或输出数据,有实时性DMA方式 :由硬件执行IO,外设准备好后通知DMA,DMA接管总线,完成数据交换 通道和IO处理机方式 :外设种类很多速度差别很大,将外设管理工作从CPU总分离出来 通道本身就是个简单的CPU,执行IO指令的处理机 IO处理机是通道的进一步发展,更像一个CPU了 3. 中断请求与响应
概念 :CPU由内部外部事件引起CPU中断正在运行的程序,具有随机性(符合输入输出系统特性)作用 :主机与外设并行;故障处理;实时处理类型 : 内部中断 (软件、异常)外部中断 (可屏蔽中断INTR、不可屏蔽中断NMI)基本功能 : 中断信号的保持与清除 :通过寄存器存起来,处理完清零中断优先级 :硬件响应优先序、软件服务优先序(中断服务程序开头,设置自己的中断屏蔽位)中断源识别 :系统分配给每个中断源的代号(中断号),中断号获取可以用硬件或软件方式中断处理 : 响应 :每执行完一条指令,就会判断是否有中断请求处理 :保存断点(返回地址)、执行中断程序、返回断点中断控制 : 中断触发方式 :指外设以什么逻辑信号去申请中断(边沿触发、电平触发)中断排队方式 :按优先级、循环轮流排队中断嵌套 :中断正在执行的中断程序,不可屏蔽中断不能嵌套中断屏蔽 :处理器内部有个触发器,“1”时才会响应外部中断4. DMA方式
原理 :数据传送不经过CPU,由DMA控制器实现内存和外设、外设和外设之间的直接快速传递系统构成 : DMA的两种工作状态 :被动态(未获得总线控制权,受CPU控制)、主动态(获得总线控制权)传输步骤 : 申请 :一个设备接口试图通过总线向另一个设备发送数据,先向CPU发送DMA信号响应 :CPU收到DMA信号,当前总线周期结束后,按DMA信号优先级响应相应的DMA控制器数据传送 :DMA收到CPU响应,获得总线控制权,开始直接数据传送传送结束 :设备向CPU发送DMA结束信号,交换总线控制权DMA操作类型 : 数据传送 :源地址数据传到目的地址数据校验 :不传输,只校验某数据块内部的每个字节数据检索 :不传输,只在制定内存区域内查找某个关键字或某几个数据位是否存在DMA操作方式 : 单字节传输模式 :每次DMA操作传送一个字节块传输模式 :每次传送多个字节,有个当前字节计数器,+1 +1 +1请求传输模式 :DMA控制器询问外设,当外设请求信号无效时,暂停传输(不释放总线);再次有效再继续传输级联传输模式 :多个DMA级联,分布式DMA传输模式 : 停止CPU访问内存 :传输速率高的设备传输时有优势周期挪用 :DMA挪用一个或几个内存周期。若此时CPU不需要访存则不冲突,若冲突则DMA优先DMA与CPU交替访存 :直接交替访存,不需要浪费时间