![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
计算机组成原理【完结】
文章平均质量分 94
计算机组成原理汇总
明如正午
梦想若缺少爱和信仰,终将成为生命的圈套!
展开
-
【计算机组成原理】学习笔记——总目录【已完结!】
【计算机组成原理 】学习笔记--总目录原创 2022-07-19 15:30:37 · 2579 阅读 · 1 评论 -
【52】设计大型DMP系统(上):MongoDB并不是什么灵丹妙药
所有的软件系统,都有它的适用场景,想通过一种解决方案适用多个差异非常大的应用场景,显然既不合理,又不现实。 在实际开发应用中,需要更多地从底层的特性和原理去考虑问题。原创 2022-12-16 21:00:00 · 499 阅读 · 1 评论 -
【50】数据完整性(下):如何还原犯罪现场?
海明码:是一种纠错码。由海明发明。海明码纠错能力有限:在 7-4 海明码里面,我们只能纠正某 1 位的错误。海明距离理解:在有了纠错功能(1位纠错)后,不同的数据球(数据位+校验位)之间至少要有 3 个单位的距离,这样,当数据(数据位+校验位)错误时,就可以找到海明码距离最近(海明距离为1)的那个数据,即为正确要传输的数据。原创 2022-12-12 21:00:00 · 387 阅读 · 0 评论 -
【48】DMA:为什么Kafka这么快?
DMA:Direct Memory Access直接内存访问,DMAC(DMA Controller)是一个协处理器DMA可以协助CPU来传输数据,减轻CPU的负担,从而提升吞吐率。计算机外设硬件越来越多,各个外设上都加上了 DMAC 芯片,使得 CPU 很少再需要关心数据传输的工作了。原创 2022-11-21 21:00:00 · 323 阅读 · 0 评论 -
【47】SSD硬盘(下):如何完成性能优化的KPI?
针对硬件特性设计的软件,才能最大化发挥硬件性能。完成SSD性能优化的解决方案:磨损均衡(FTL闪存转换层)、TRIM、写入放大(空闲时提前进行垃圾回收)原创 2022-11-18 21:00:00 · 498 阅读 · 0 评论 -
【46】SSD硬盘(上):如何完成性能优化的KPI?
对于 SSD 硬盘,我们也可以先简单地认为,它是由一个电容加上一个电压计组合在一起,记录了一个或者多个比特。SSD读写的基本单位:一个页(Page)。SSD擦除的基本单位:一个块(Block)。生产 SSD 硬盘的厂商,其实是预留了一部分空间,专门用来做“磁盘碎片整理”的工作。【转移数据到预留空间,然后就可以腾出更多的空间供使用】“磁盘碎片整理”或者“内存垃圾回收”的工作,我们不能太主动、太频繁地去做。因为 SSD 的擦除次数是有限的。原创 2022-11-17 21:00:00 · 360 阅读 · 0 评论 -
【51】分布式计算:如果所有人的大脑都联网会怎样?
数据中心的服务器会遇到三个核心问题【对应解决:分布式计算】: 垂直扩展和水平扩展的选择问题 如何保持高可用性(High Availability)【尽可能排除单点故障+自动化故障转移策略】 一致性问题(Consistency)【本节没讲】原创 2022-11-15 21:00:00 · 449 阅读 · 0 评论 -
【49】数据完整性(上):硬件坏了怎么办?
我给你介绍了我自己亲身经历的一个硬件错误带来的 Bug。由于没有采用 ECC 内存,导致我们的数据处理中,出现了大量的单比特数据翻转的错误。这些硬件带来的错误,其实我们没有办法在软件层面解决。如果对于硬件以及硬件本身的原理不够熟悉,恐怕这个问题的解决方案还是遥遥无期。如果你对计算机组成原理有所了解,并能够意识到,在硬件的存储层有着数据验证和纠错的需求,那你就能在有限的时间内定位到问题所在。进一步地,我为你简单介绍了奇偶校验,也就是如何通过冗余的一位数据,发现在硬件层面出现的位错误。原创 2022-11-14 21:00:00 · 766 阅读 · 0 评论 -
【45】机械硬盘:Google早期用过的“黑科技”
机械硬盘的物理构造:盘面+磁头+悬臂机械硬盘读取数据的两个步骤:把盘面旋转到某一个位置。【找到“几何扇区”】把我们的悬臂移动到特定磁道的特定扇区。【找到最终的“实际扇区”】一次硬盘上的随机访问时间=平均延时+平均寻道时间缩短行程(Partial Stroking 或者 Short Stroking)【“空间换时间”的解决方案】:把所有数据都放在一个磁道上只用最外面 1/4 或者 1/2 的磁道,缩短“寻道时间”,以提升IOPS原创 2022-10-28 21:00:00 · 291 阅读 · 0 评论 -
【44】理解IO_WAIT:I/O性能到底是怎么回事儿?
AS SSD测算关键参数: seq:顺序读写 【数据传输率(吞吐率)】 4k:随机读写【IOPS:每秒输入输出操作的次数】 acc.time:响应时间IOPS 和 DTR(Data Transfer Rate,数据传输率)才是输入输出性能的核心指标。对于数据的访问,更多的是随机读写,而不是顺序读写。随机读写的 IOPS 才是服务器性能的核心指标。在应用开发的时候往往会说“性能瓶颈在 I/O 上”。原创 2022-10-28 21:00:00 · 358 阅读 · 0 评论 -
【43】输入输出设备:我们并不是只能用灯泡显示“0”和“1”
CPU 并不是发送一个特定的操作指令来操作不同的 I/O 设备。【否则,随着新的 I/O 设备的发明,我们就要去扩展 CPU 的指令集了。】CPU 和 I/O 设备之间的通信解决方案如下:在 I/O 设备这一侧,我们把 I/O 设备拆分成,能和 CPU 通信的接口电路,以及实际的 I/O 设备本身。在 CPU 这一侧,对 CPU 来说,它看到的并不是一个个特定的设备,而是一个个内存地址或者端口地址。原创 2022-10-26 21:00:00 · 581 阅读 · 0 评论 -
【42】总线:计算机内部的高速公路
总线的设计思路,核心是为了减少多个模块之间交互的复杂性和耦合度。 在实际的硬件层面,总线其实就是一组连接电路的线路。因为不同设备之间的速度有差异,所以一台计算机里面往往会有多个总线。常见的就有在 CPU 内部和高速缓存通信的本地总线,以及和外部 I/O 设备以及内存通信的前端总线。 前端总线通常也被叫作系统总线。它可以通过一个 I/O 桥接器,拆分成两个总线,分别来和 I/O 设备以及内存通信。自然,这样拆开的两个总线,就叫作 I/O 总线和内存总线。原创 2022-10-26 21:00:00 · 1070 阅读 · 0 评论 -
【41】理解内存(下):解析TLB和内存保护
多级页表带来新的问题:多级页表是“时间换空间”的策略。内存访问次数增多,花费时间延长。引入TLB,即地址变换高速缓冲(Translation-Lookaside Buffer),以解决多级页表带来的时间延长问题。内存保护:可执行空间保护【控制执行范围】地址空间布局随机化:【随机化地址空间布局,让人猜不着什么是什么】原创 2022-10-24 21:00:00 · 1102 阅读 · 0 评论 -
【40】理解内存(上):虚拟内存和内存保护是什么?★★★★★
虚拟内存 和 物理内存 的区别。页表(Page Table):能够实现虚拟内存里面的页,到物理内存里面的页的一一映射。简单页表:多级页表:1.整个进程内存空间分配:两头空,中间实2.实例分析【32位:一个1级页表可以映射128KB大小的物理内存,一个填满的2级页表可以映射4MB大小的物理内存】3. 一个程序的实际测算【8M程序:多级页表:需要9KB内存空间;简单页表:需要4MB 内存空间;相差近500倍】4.多级页表增加了查询时间【时间换空间的策略:4级页表需要4次内存访问】原创 2022-10-21 21:00:00 · 1454 阅读 · 0 评论 -
【39】MESI协议:如何让多核CPU的高速缓存保持一致?
实现缓存一致性,要满足两点:写传播+事务的串行化总线嗅探机制:写失效协议+写广播协议MESI协议【一种基于写失效的缓存一致性协议】:已修改(Modified)、独占(Exclusive)、共享(Shared)、已失效(Invalidated)的合称。优势:不需要在总线上传输数据内容,而只需要传输操作信号和地址信号就好了,不会那么占总线带宽。原创 2022-10-20 21:00:00 · 899 阅读 · 0 评论 -
【38】高速缓存(下):你确定你的数据更新了么?
volatile 这个关键字可以保障我们对于数据的读写都会到达主内存。Java 内存模型和 CPU、CPU Cache 以及主内存的组织结构非常相似。数据写入到 CPU Cache 的两种方案: 1.写直达(Write-Through):把所有的数据都直接写入到主内存里面,简单直观,但是性能就会受限于内存的访问速度。2.写回(Write-Back):通常只更新缓存,只有在需要把缓存里面的脏数据交换出去的时候,才把数据同步到主内存里。在缓存经常会命中的情况下,性能更好。【重点在 脏数据 的理解】原创 2022-10-19 15:23:43 · 398 阅读 · 0 评论 -
【37】高速缓存(上):“4毫秒”究竟值多少钱?
内存和CPU的访问速度相差太大—>不能充分发挥CPU的性能—>加入CacheCache和内存需要建立联系—>直接映射:缓存块(Cache Line)和内存Block建立映射。 内存的访问地址包括:索引 + 组标记 + 偏移量 Cache 的数据结构:索引 + 有效位 + 组标记 + 数据访问内存数据的步骤:4步。整体过程:先看Cache是否有,没有则把内存中的数据首先读取到Cache,然后CPU再读取。CPU Cache 的命中率通常能达到 95% 以上。原创 2022-10-15 21:30:00 · 382 阅读 · 0 评论 -
【36】局部性原理:数据库性能跟不上,加个缓存就好了?
应用程序访问数据库遇性能瓶颈:在数据库前面提供一层缓存数据(Redis 或者 Memcache )计算机存储器层次结构中最重要的一个优化思路:局部性原理新的挑战:如何既享受Cache 的速度,又享受内存、硬盘的大容量和低价? 1.时间局部性【数据被访问,短时间会被再次访问】 2.空间局部性【数据被访问,其相邻数据被访问】原创 2022-10-14 21:00:00 · 190 阅读 · 0 评论 -
【35】存储器层次结构全景:数据存储的大金字塔长什么样?
SRAM【Cache(L1/L2/L3缓冲)使用SRAM】:通电,数据在;断电,数据丢失。DRAM【内存使用DRAM】:DRAM 需要靠不断地“刷新”,才能保持数据被存储起来(数据是存储在电容里的,电容会不断漏电,所以需要定时刷新充电,才能保持数据不丢失)。三个“越来越”特性:从寄存器、CPU Cache,到内存、硬盘,这样一层层下来的存储器,速度越来越慢,空间越来越大,价格也越来越便宜。原创 2022-10-09 21:00:00 · 667 阅读 · 0 评论 -
【34】理解虚拟机:你在云上拿到的计算机是什么样的?
分时系统 解释型虚拟机(和模拟器有关) Type-1 和 Type-2【全虚拟化虚拟机】 Docker(一种资源隔离技术)【操作系统级虚拟机】原创 2022-09-28 21:00:00 · 1337 阅读 · 0 评论 -
【33】解读TPU:设计和拆解一块ASIC芯片
最知名、最具有实用价值的 ASIC : TPU 第一代TPU设计目标:TPU模型推断需要满足:用时要少(响应时间)、耗电要少【能效比】;TPU要向前兼容,开发时间要短。开发 ASIC 的核心原因:用特制的硬件,最大化特定任务的运行效率。原创 2022-09-26 17:07:09 · 1013 阅读 · 0 评论 -
【32】FPGA和ASIC:计算机体系结构的黄金时代
FPGA:1.硬件可编辑;2.LUT(查表法)—>CLB(LUT和寄存器的组合)—>可编程逻辑布线(连接CLB,实现芯片功能)ASIC【专用芯片:摄像头,音频芯片】 :1.一次性研发成本(NRE)高;2.量大时值得开发TCO:总体拥有成本(Total Cost of Ownership)【生产成本+研发成本】NRE:(Non-Recuring Engineering Cost,一次性工程费用)【研发投入】原创 2022-09-21 21:30:00 · 298 阅读 · 0 评论 -
【31】GPU(下):为什么深度学习需要使用GPU?
GPU发展历史:1.加速卡(顶点处理仍在CPU完成,图像渲染受制于CPU的性能);2.带有顶点处理功能的显卡:NVidia推出GeForce 256 显卡;3.可编程管线(Programable Function Pipeline)的引入:2001年的Direct3D 8.0【微软第一次引入】;4. 可编程管线出现;5.统一着色器架构原创 2022-09-09 21:00:00 · 24976 阅读 · 9 评论 -
【30】GPU(上):为什么玩游戏需要使用GPU?
图形渲染的5个流程: 顶点处理(Vertex Processing) 图元处理(Primitive Processing) 栅格化(Rasterization) 片段处理(Fragment Processing) 像素操作(Pixel Operations)原创 2022-09-05 21:00:00 · 1388 阅读 · 0 评论 -
【29】CISC和RISC:为什么手机芯片都是ARM?
Intel不使用RISC的原因:指令集的向前兼容Intel在CISC和RISC融合上做的努力:微指令架构—>译码器电路更复杂+译码时间增加—>引入L0缓冲器(减少频繁译码的工作)未来的趋势:开源CPU RISC-VARM(Advanced RISC Machines)在移动端称霸的原因(并非RISC架构):1、功耗优先的设计(功耗低);2、价格低。Intel CPU(电脑端):使用CISC架构ARM CPU(手机端):使用RISC架构原创 2022-09-05 21:00:00 · 2453 阅读 · 1 评论 -
【28】异常和中断:程序出错了怎么办?
异常的处理:硬件和软件组合到一起的处理过程异常的分类: 中断(Interrupt):键盘输入、鼠标点击触发 陷阱(Trap):Debug时打的断点;触发一段程序【程序刻意触发】 故障(Fault):加法溢出、除0【程序执行出错】 中止(Abort):故障无法恢复时中止原创 2022-09-05 21:00:00 · 567 阅读 · 0 评论 -
【27】SIMD:如何加速矩阵乘法?
CPU并行计算方案:超线程+SIMD超线程:其实是一个“线程级并行”的解决方案。它通过让一个物理 CPU 核心,“装作”两个逻辑层面的 CPU 核心,使得 CPU 可以同时运行两个不同线程的指令。【这样的运行仍然有着种种的限制,很多场景下超线程并不一定能带来 CPU 的性能提升】SIMD 技术:是一种“指令级并行”的加速方案,或者我们可以说,它是一种“数据并行”的加速方案。在处理向量计算的情况下,同一个向量的不同维度之间的计算是相互独立的。原创 2022-09-02 21:00:00 · 1310 阅读 · 0 评论 -
【26】Superscalar和VLIW:如何让CPU的吞吐率超过1?
- 提升CPU性能新的挑战:让 CPU 的吞吐率,也就是 IPC 能够超过 1。- 超标量(多发射):让 CPU 不仅在指令执行阶段是并行的,在取指令和指令译码的时候,也是并行的。通过超标量技术,可以使得你所使用的 CPU 的 IPC 超过 1。- 超标量技术的难点:(1)硬件层面难度增加;(2)解决指令依赖关系。CPU的电路更加复杂了。原创 2022-09-02 21:00:00 · 635 阅读 · 0 评论 -
【25】 冒险和预测(四):今天下雨了,明天还会下雨么?
控制冒险:为了确保能取到正确的指令,而不得不进行等待延迟的情况【if…else/for/wihile等】 应对控制冒险的三种方式: 缩短分支延迟:本质上和数据冒险的操作数前推类似,将计算结果更早反馈到流水线中。 静态分支预测:假装分支不发生,50%成功率【丢弃操作:Zap / Flush】 动态分支预测: 1比特饱和计数(一级分支预测) :根据前一次结果预测下次结果 2比特饱和计数(双模态预测器.....原创 2022-08-31 21:00:00 · 555 阅读 · 0 评论 -
【24】冒险和预测(三):CPU里的“线程池”
顺序执行:按指令顺序依次执行。 乱序执行:后边的指令不依赖前边指令的执行结果时,可使用乱序执行,可以充分利用 CPU 的性能,提升吞吐率。 计算顺序是乱序的【内部是乱序的】,对应保留站RS(Reservation Stations) 计算结果的提交顺序是指令顺序【外部看起来井井有条】,对应重排序缓冲区ROB(Re-Order Buffer)...原创 2022-08-31 21:00:00 · 373 阅读 · 0 评论 -
【23】冒险和预测(二):流水线里的接力赛
更高级的解决数据冒险问题的方案:操作数前推/操作数旁路。 操作数前推,就是通过在硬件层面制造一条旁路,让一条指令的计算结果,可以直接传输给下一条指令,而不再需要“指令 1 写回寄存器,指令 2 再读取寄存器“这样多此一举的操作。 操作数前推带来的好处:这样直接传输带来的好处就是,后面的指令可以减少,甚至消除原本需要通过流水线停顿,才能解决的数据冒险问题。 这个前推的解决方案,不仅可以单独使用,还可以和前面讲解过的流水线冒泡结合在一起使用。因为有些时候,我们的操作数前原创 2022-08-24 21:00:00 · 298 阅读 · 0 评论 -
【22】冒险和预测(一):hazard是“危”也是“机”
通过流水线设计来提升 CPU 的吞吐率,需要冒风险:结构冒险(Structural Hazard)、数据冒险(Data Hazard)、控制冒险(Control Hazard) 结构冒险的解决方案:增加硬件资源【高速缓冲:指令缓冲(Instruction Cache) 和 数据缓冲(Data Cache)】 计算机体系结构:哈佛架构(Harvard Architecture)、冯·诺依曼体系结构/普林斯顿架构(Princeton Architecture) 数据冒险原创 2022-08-23 20:00:00 · 340 阅读 · 0 评论 -
【21】面向流水线的指令设计(下):奔腾4是怎么失败的?
奔腾4是失败的原因: 1)提升流水线深度(20级、31级)—>增大主频(10G)—>晶体管增加—>功耗变大,用户使用时间变短; 2)由于有指令 依赖问题【数据冒险、结构冒险、控制冒险】的存在—>流水线深度的增加,会使解决依赖问题又会是一个大问题—>超长流水线的 执行效率降低,性能更差了。 CPU 乃至计算机整机的性能: 不能简单地通过 CPU 的主频来衡量。因为不同的 CPU 实际的体系架构和实现都不一样。同样的 CPU 主频,实际的性能可能差别很大。原创 2022-08-23 20:00:00 · 503 阅读 · 0 评论 -
【20】面向流水线的指令设计(上):一心多用的现代CPU
单指令周期处理器:程序的 CPU 执行时间 =指令数×CPI×时钟周期时间 中的CPI为1【每条指令的平均时钟周期数(Cycles Per Instruction,简称 CPI)】,即 在一个时钟周期内,处理器正好能处理一条指令。 现代的手机和电脑CPU都不使用 单指令周期处理器。 现代处理器的流水线设计:指令流水线(Instruction Pipeline),可提升 CPU 的吞吐率;类似产线的流水线;现代的 ARM 或者 Intel 的 CPU,流水线级数都已经到了14原创 2022-08-23 20:00:00 · 341 阅读 · 0 评论 -
【17】建立数据通路(上):指令+运算=CPU
指令周期【Instruction Cycle】>CPU 周期/机器周期【Machine Cycle】>时钟周期【Clock Cycle】 指令周期【Instruction Cycle】:一个永不停歇的“Fetch(取指令) - Decode(指令译码) - Execute(执行)”的循环 CPU 周期/机器周期【Machine Cycle】:从内存里面读取一条指令的最短时间。 时钟周期【Clock Cycle】:对应计算机的主频(2.4GHz) ......原创 2022-07-27 20:00:00 · 1395 阅读 · 1 评论 -
【13】加法器:如何像搭乐高一样搭电路(上)?
半加器:由 一个异或门 和 一个与门 组成。异或门【计算“和”】,与门【计算“进位”】 全加器:由 两个半加器 和 一个或门 组成。三个输入【输入1、输入2、进位】,两个输出【和、进位】 全加器溢出的进位:可以作为 是否溢出 的标志位。 软硬件设计分层思想:层层封装,只看当前层的下一层,不用关注下一层的下一层【最底层】。......原创 2022-07-27 20:00:00 · 754 阅读 · 0 评论 -
【12】理解电路:从电报机到门电路,我们如何做到“千里传信”?
了解二进制信息传输的演变: 人送信【跑腿】—>击鼓传声【声信号】—>灯塔、烽火台【光信号】—>电报机【电信号】—>现代的计算机【逻辑电路】 继电器(Relay)的引入:又叫 电驿,起到中继的作用。由“螺旋线圈 + 磁性开关”开关组成。 摩尔斯电码:“点“(代表0)和” 划 “(代表1)信号的组合。SOS的摩尔斯电码:点点点划划划点点点(• • •- - - • • • )............原创 2022-07-26 20:00:00 · 1126 阅读 · 0 评论 -
【11】二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?
乱码的原因原创 2022-07-26 20:00:00 · 380 阅读 · 0 评论 -
【10】动态链接:程序内部的“共享单车”
我们之前讲过,程序的链接,是把对应的不同文件内的代码段,合并到一起,成为最后的可执行文件。这个链接的方式,让我们在写代码的时候做到了“复用”。同样的功能代码只要写一次,然后提供给很多不同的程序进行链接就行了。但是,如果我们有很多个程序都要通过装载器装载到内存里面,那里面链接好的同样的功能代码,也都需要再装载一遍,再占一遍内存空间。.........原创 2022-07-25 20:00:00 · 304 阅读 · 0 评论 -
【09】程序装载:“640K内存”真的不够用么?
失败预测:比尔·盖茨在上世纪 80 年代说的“640K ought to be enough for anyone”,也就是“640K 内存对哪个人来说都够用了”。那个年代,微软开发的还是 DOS 操作系统,程序员们还在绞尽脑汁,想要用好这极为有限的 640K 内存。而现在,我手头的开发机已经是 16G 内存了,上升了一万倍还不止。那比尔·盖茨这句话在当时也是完全的无稽之谈么?有没有哪怕一点点的道理呢?这一讲里,我就和你一起来看一看。.........原创 2022-07-22 15:34:53 · 245 阅读 · 0 评论