计算机硬件基本组成
冯诺依曼结构
在计算机系统中,软件和硬件在逻辑上时等效的
Eg:对于乘法运算,可以设计一个专门的硬件电路来实现,效率高,但是成本也高,也可以用软件的方式,执行多次加法运算来实现,只不过效率会比较低
特点:
- 有I/O,运算器,存储器,控制器组成
- 指令和数据在同一个存储器中,可按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成
- 已运算器为中心: 数据传输通过运算器完成
现代计算机结构
以存储器 为中心
总结
各硬件部件
主存储器
运算器
控制器
总结
存储系统
RAM-易失性存储器
Random Access Memory,随机访问存储器,其内部存储单元的数据可以随意的取出或存储。但是这种存储器在断电后会丢失其存储的内容。
SDRAM: 同步动态随机存储器,需要同步时钟。
DDR: Double Data SDRAM,双倍速率传输的SDRAM,在时钟上升沿和下降沿都可以进行数据传输。电脑的内存条都是DDR
DRAM-动态随机存储器
利用电容来存储信息,由于晶体管存在漏电电流,电容会放电(通常只能维持2ms),所以需要周期性的刷新,给电容充电。速度慢,成本高,集成度高,常用作主存(SDRAM)。
SRAM-静态随机存储器
利用触发器存储信息,只要供电数据就会保存,不需要刷新,但是断电后数据会消失。速度快,成本高,集成度低,常用作高速缓存。
总结
ROM-非易失性
只读存储器,掉电后数据不会消失,即非易失性。
类型
总结
提高存储系统的工作速度
局部性原理
- 空间局部性:如果某个数据被访问,那么与它相邻的数据很快可能也将被访问。
- 时间局部性:如果某个数据被访问,那么在不久的将来它可能再次被访问。(比如说循环结构)
高速缓冲存储器Cache
利用局部性原理,改善存储器结构。
性能分析
Cache Hit命中:需要的数据存放在Cache中
Cache Miss错失:需要的数据没有在Cache中
Hit-Rate命中率:CPU想要访问的数据已经在Cache中的比率
平均访问时间:T_a = Ht_c +(1-H)\t_m,t_c:命中时的Cache访问时间,t_m:未命中时的访问时间
由上面的例题可知,有两种方式:
- 同时访问Cache和主存
- 先访问Cache,再访问主存
地址映射
地址映射主要是用来决定主存中的块放到Cache中哪个位置。
1. full associative Cache 全相联映射
主存块可以放到任意一个Cache Line中。需要存储主存字块标记
2. Direct Mapped Cache直接映射
主存中的某一块固定的映射到某一个Cache Line,不需要存储Cache字块地址,因为是一一对应的。对应主存字块的地址除以Cache Line的块数所得的余数
3. n-way associative Cache组相联映射
结合了上面两种方式,将主存块映射到一个Cache Set
三种方式比较:
(a) full associative Cache: 命中率高,但是需要存储的容量大,并且结构会比较复杂
(b) direct mapped Cache: 简单,但是低命中率,可能会发生替换
(c) n-way associative Cache: 结合了上述两者的优点
替换算法
替换算法主要是为了处理Cache满了的情况。
先进先出算法(FIFO)
选择最早调入的行进行替换。
近期最少使用(LRU)
选择近期内长久未访问过的存储行进行替换。通常设置一个计数器,Cache每命中一次,命中行计数器清零,其它各行加1,替换最后计数值最大的行。
写策略-命中
脏位 (dirty bit):用来表示某块数据是否已经被修改
写回法 (write-back):当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存。减少访存次数
全写法 (write-through):当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓存 (write buffer)
写策略-未命中
写分配法 (write-allocate):把主存中的块调入Cache,在Cache中修改。搭配写回法使用。
非写分配法 (not-write-allocate):只写入主存,不调入Cache。搭配全写法使用。
写策略小结:
多级Cache
第一级和第二级之间使用全写法,第二级和主存之间使用写回法。
提高存储系统的容量
虚拟存储器
虚拟存储器是一个逻辑模型,用户给出一个虚拟地址,虚拟存储器要给出该地址对应的数据。
实现:由辅助硬件将虚拟地址映射到主存当中的某个单元,主存单元地址称为物理地址。
页式虚拟存储器
虚拟空间与主存空间都被划分为同样大小的页,主存的页称为实页,虚存的页称为虚页。
为了增加虚实地址转换的速度,引入了快表TLB结构,而慢表Page是在主存中的。
中央处理器CPU
指令流水线
将一条指令的执行过程分成不同的阶段,占用不同的资源,就能使多条指令同时执行。
流水线的表示方法
流水线的性能指标
- 吞吐率:单位时间内流水线所完成的任务数量(输出结果的数量)
- 加速比
- 效率
指令流水线的影响因素
机器周期的设置:
结构冲突(资源冲突)
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关,例如两条指令同时向一个寄存器进行写操作,而且只有一个输入端口
解决方法:
- 后一条相关指令暂停一周期
- 资源重复配置:数据和指令分开存储,这样上图第一条指令访问的是数据存储器,而第三条指令取指阶段访问的是指令存储器
数据冲突
数据之间存在依赖关系,前一条指令执行完后才能执行后一条指令。
解决方法:
- 硬件阻塞(stall)(动态方法)和软件插入NOP(静态方法)
- 数据旁路技术,将ALU输出值连线到需要的硬件上
- 编译优化:通过编译器调整指令顺序,instruction scheduling
控制冲突
当流水线遇到转移指令和其它改变PC值的指令而造成断流时,会引起控制冲突。
第一条指令是跳转指令,当条件满足时直接跳到了最后一条指令。
解决办法:
- 预取两个方向的指令
- 分支预测:判断转移的概率是多少,按照概率预取两个方向的指令
总结
流水线的多发技术
超标量技术superscalar
在单个周期内可以执行多个独立指令。找到互相没有依赖关系的指令,将其并行执行。使用动态调度
超流水技术
在一个时钟周期内再分段。不能调整指令的顺序,靠编译器优化。
超长指令字VLIW
将多条能并行操作的指令组合成一条指令,通过静态调度实现,即通过编译器实现,而不是再运行期间完成。