热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

CPU与Cache、内存以及硬盘之间的数据交换

今天一个同学问我一个问题,CPU与Cache、内存、以及硬盘之间是如何进行数据传输?我给同学了一个笼统的解释。当我再细想这个问题的时候,我

今天一个同学问我一个问题,CPU与Cache、内存、以及硬盘之间是如何进行数据传输?我给同学了一个笼统的解释。当我再细想这个问题的时候,我发现这个问题并不是想的那么简单,而且想地越深会感觉细节的东西会越来越多的盲点。我开始查阅一些资料,来试图更好地回答这个问题(本人可能在很多地方理解有误,希望大家指出错误共同进步!)。

从宏观的角度看并不难理解其工作方式。下图是他们之间的结构关系图。




从上图可以看出,CPU与硬盘之间不直接进行数据的交换,他们之间数据的交换中介为内存,换句话说,需要的CPU处理的数据全部存放在内存里面(也就是平时所说的主存储器),也就是说当硬盘里的数据需要做处理的时候,数据首先需要被放到内存里面,然后CPU再去读取内存里的数据并进行处理处理完之后存回内存。(例如当你在用word 写一个文档时,你在写的时候底层的CPU也在不断的处理着数据,当然它在处理是01串,有些人会说我在写文档又没有进行实际的计算,怎么CPU会在运转呢?其实你想一个简单的问题,为什么你在写的时候为什么光标在不断的移动?至少它在计算你的位置对吧。可能这比喻并不严谨,但是这个简单问题却说明了处理器确实是在做着各种运算,此时的数据是在内存里面的,如果你不保存掉电之后你会发现之前写的东西都没了,而当你保存之后数据会被存放到硬盘里面,掉电之后数据还在!)

咱们再来看Cache,Cache的工作原理是由于程序访问的局部性。那有人可能会问什么是程序访问的局部性?对大量典型的程序运行情况分析表明,在一个较短时间间隔内,由程序产生的地址往往集中在存储器逻辑空间地址的很小范围内。依据局部性原理原理,可以在主存和CPU之间设置一个高速而容量相对较小的存储器(Cache),把正在执行的指令地址附近的一部分指令或数据从主存调入到这个存储器,供CPU在一段时间内使用。这对提高程序的运行速度有很大的作用。

CPU对存储器进行数据请求时,通常会先去访问Cache。由于局部性并不能保证所请求的数据百分百在Cache中,这里就出现了一个描述可能性的名词,那就是命中率,当CPU访问的数据在Cache里面时,我们说Hit(命中),这时就会直接把Cache里的数据读到CPU里面(路线2)。当需要的数据没有在Cache里时,这时我们说Miss。CPU会去主存里面找,找到之后把数据从主存读到CPU寄存器里同时也会把数据写到Cache中,也就是上图的路线1(写到Cache)和路线3。当然我这里话的Cache是一个简单的图示,现在大多数为多级Cache,而且现在大多数Cache都会在CPU中。


推荐阅读
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 在很多数据库中都存在一个自动增长的列,如果现在要想在oracle中完成自动增长的功能,则只能依靠序列完成,所有的自动增长操作,需要用户手工完成处理。语法:CREAT ... [详细]
  • 在编写业务代码时,常常会遇到复杂的业务逻辑导致代码冗长混乱的情况。为了解决这个问题,可以利用中间件模式来简化代码逻辑。中间件模式可以帮助我们更好地设计架构和代码,提高代码质量。本文介绍了中间件模式的基本概念和用法。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • DSP中cmd文件的命令文件组成及其作用
    本文介绍了DSP中cmd文件的命令文件的组成和作用,包括链接器配置文件的存放链接器配置信息、命令文件的组成、MEMORY和SECTIONS两个伪指令的使用、CMD分配ROM和RAM空间的目的以及MEMORY指定芯片的ROM和RAM大小和划分区间的方法。同时强调了根据不同芯片进行修改的必要性,以适应不同芯片的存储用户程序的需求。 ... [详细]
author-avatar
陈爱梅志杰力凯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有