计算机组成 -- 知识地图
|Word Count:15|Reading Time:1mins
参考资料
Author: zhongmingmao
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2020-01-18
计算机组成 -- 冒险
冒险 流水线架构的CPU,是主动进行的冒险选择,期望通过冒险带来更高的回报 对于各种冒险可能造成的问题,都准备好了应对方案 分类 结构冒险(Structural Hazard) 数据冒险(Data Hazard) 控制冒险(Control Hazard) 结构冒险 结构冒险,本质上是一个硬件层面的资源竞争问题 CPU在同一个时钟周期,同时在运行两条计算机指令的不同阶段,但这两个不同的阶段可能会用到同样的硬件电路 内存的数据访问 第1条指令执行到访存(MEM)阶段的时候,流水线的第4条指令,在执行取指令(Fetch)操作 访存和取指令,都是要进行内存数据的读取,而内存只有一个地址译码器,只能在一个时钟周期内读取一条数据 无法同时执行第1条指令的读取内存数据和第4条指令的读取指令代码 解决方案 解决方案:增加资源 哈佛架构 把内存分成两部分,它们有各自的地址译码器,这两部分分别是存放指令的程序内存和存放数据的数据内存 缺点:无法根据实际情况去动态调整 普林斯顿架构 – 冯.诺依曼体系架构 今天使用的CPU,仍然是冯.诺依曼体系架构,并没有把内存拆成程序内存和数据内存两部分 ...

2020-01-15
计算机组成 -- 定点数 + 浮点数
浮点数的不精确性12>>> 0.3 + 0.60.8999999999999999 32bit是无法表达所有实数的,只能表达2^32次方不同的数字,差不多40亿 40亿个数字比起无限多的实数集合只是沧海一粟,应该让这40亿个数映射到实数集合上的哪些数字,在实际应用中才最划算 定点数 用4个bit表示0~9的整数,那么32个bit就可以表示8个这样的整数 然后把最右边的2个0~9的整数,当成小数部分;把最左边6个0~9的整数,当成整数部分 这样用32bit可以表示0.00~999999.99这1亿个实数 这种用二进制表示十进制的编码方式,称为BCD编码(Binary-Coded Decimal) 应用非常广泛:超市、银行 缺点 浪费 本来32bit可以表示40亿个不同的数字,但在BCD编码下,只能表示1亿个数 如果精确到分,能够表达的最大金额为100W,非常有限 无法同时表示很大的数字和很小的数字 浮点数 浮点数的科学计数法的表示,有一个IEEE的标准,定义了两个基本的格式 一个是用32bit表示单精度的浮点数,即float 一个是用64bit表示双精度的浮点数,即do...

2020-01-28
计算机组成 -- 内存
程序装载 在Linux或Windows下,程序并不能直接访问物理内存 内存需要被分成固定大小的页,然后通过虚拟内存地址到物理内存地址的地址转换,才能到达实际存放数据的物理内存位置 程序看到的内存地址,都是虚拟内存地址 地址转换简单页表 页表(Page Table,一一映射):<**虚拟**内存的页, **物理**内存的页> 页表:把一个内存地址分成页号(Directory)和偏移量(Offset)两部分 前面的高位,是内存地址的页号;后面的低位,是内存地址的偏移量 页表只需要保留虚拟内存地址的页号和物理内存地址的页号之间的映射关系即可 同一个页里面的内存,在物理层面是连续的 对于32位的内存地址,4KB大小的页,需要保留20位的高位,12位的低位 内存地址转换步骤 把虚拟内存地址,切分成页号和偏移量 从页表里面,查询出虚拟页号对应的物理页号 直接拿到物理页号,加上前面的偏移量,得到物理内存地址 空间问题 32位的内存地址空间,页表一共需要记录2^20个到物理页号的映射关系 一个页号是完整的32位的4 Bytes,一个页表就需要4MB的空间(2^20 * 4 Byt...

2020-02-01
计算机组成 -- HDD
物理构造一块机械硬盘由盘面、磁头、悬臂三个部件组成 盘面 盘面(Disk Platter)是我们实际存储数据的盘片 盘面本身通常是用铝、玻璃或者陶瓷这样的材质去做成光滑盘片,然后在盘面上有一层磁性的涂层,数据就存储在磁性的涂层上 盘面中间有一个受电机控制的转轴(控制盘面去旋转),转速:RPM(Rotations Per Minute) 磁头 通过磁头(Drive Head),从盘面上读取数据,然后再通过电路信号传输给控制电路和接口,再到总线上 通常,一个盘面上会有两个磁头,分别是盘面的正反面,盘面在正反面都有对应的磁性涂层来存储数据 一块硬盘不会只有一个盘面,而且上下堆叠了很多个盘面,各个盘面之间是平行的,每个盘面的正反两面都有对应的磁头 悬臂 悬臂(Actutor Arm)链接在磁头上,并且在一定范围内去把磁头定位到盘面的某个特定磁道(Track)上 一个盘面通常是圆形的,由很多同心圆组成,每个同心圆都是一个磁道,每个磁道都有编号 随机读写 一个磁道,会分成多个扇区(Sector),上下平行的盘面的相同扇区,组成一个柱面(Cylinder) 数据读取的步骤 把盘面旋转到某个位置,在这个位...

2020-01-20
计算机组成 -- 超线程 + SIMD
超线程 – 线程级并行Pentium 4 Pentium 4失败的原因:CPU的流水线级数太深 超长的流水线,使得之前很多解决冒险、提升并发的方案都用不上 解决冒险、提升并发的方案,本质上是一种指令级并行的技术方案,即CPU希望在同一个时间,去并行执行两条指令 但这两条指令,原本在代码里是有先后顺序的 无论是流水线架构、分支预测以及乱序执行,还是超标量和超长指令字 都是想通过在同一时间执行两条指令,来提升CPU的吞吐率 但在Pentium 4上,上面这些方法都可能因为流水线太深,而起不到效果 更深的流水线意味着同时在流水线里面的指令就很多,相互的依赖关系就多 因此,很多时候不得不把流水线停顿下来,插入很多NOP操作,来解决这些依赖带来的冒险问题 超线程 无论是多个CPU核心运行不同的程序,还是单个CPU核心里切换运行不同线程的任务 在同一时间点上,一个物理的CPU核心只会运行一个线程的指令,其实并没有做到真正的指令级并行 超线程的CPU,把一个物理层面的CPU核心,伪装成两个逻辑层面的CPU核心 这个CPU会在硬件层面增加很多电路,使得可以在一个CPU核心内部,维护两个不同线程的指...

2020-02-03
计算机组成 -- DMA
背景 无论IO速度如何提升,比起CPU,还是太慢,SSD的IOPS可以达到2W,但CPU的主频有2GHz 对于IO操作,都是由CPU发出对应的指令,然后等待IO设备完成操作后返回,CPU有大量的时间都是在等待IO设备完成操作 在很多时候,CPU的等待是没有太多的实际意义的 对于IO设备的大量操作,其实都只是把内存里面的数据,传输到IO设备而已,此时CPU只是在傻等 当传输的数据量比较大的时候,如大文件复制,如果所有数据都要经过CPU,实在有点太浪费时间 因此发明了DMA技术,即直接内存访问(Direct Memory Access),来减少CPU等待的时间 协处理器 本质上,DMA技术就是在主板上一块独立的芯片 在进行内存和IO设备的数据传输的时候,不再通过CPU来传输数据 而直接通过DMA控制器(DMA Controller,DMAC),其实是一个协处理器(Co-Processor) DMAC最有价值的地方:当要传输的数据特别大,速度特别快,或者传输的数据特别小、速度特别慢的时候 用千兆网卡或者硬盘传输大量数据的时候,如果都用CPU来搬运的话,肯定忙不过来,可以选择DMAC 当数据传...
Announcement
Things are always unexpected!





