热门标签 | 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中。


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 本文介绍了如何通过配置 Android Studio 和 Gradle 来显著提高构建性能,涵盖内存分配优化、并行构建和性能分析等实用技巧。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文详细介绍了在企业级项目中如何优化 Webpack 配置,特别是在 React 移动端项目中的最佳实践。涵盖资源压缩、代码分割、构建范围缩小、缓存机制以及性能优化等多个方面。 ... [详细]
  • npm run dev后报错 ... [详细]
  • 解决SVN图标显示异常问题的综合指南
    本文详细探讨了SVN图标无法正常显示的问题,并提供了多种有效的解决方案,涵盖不同环境下的具体操作步骤。通过本文,您将了解如何排查和修复这些常见的SVN图标显示故障。 ... [详细]
  • 探讨了如何解决Ajax请求响应时间过长的问题。本文分析了一个从服务器获取少量数据的Ajax请求,尽管服务器已经对JSON响应进行了缓存,但实际响应时间仍然不稳定。 ... [详细]
  • MySQL PMM:MyISAM 和 Aria 存储引擎的性能优化
    本文探讨了 MyISAM 和 Aria 存储引擎在 MySQL 中的关键性能指标,包括密钥缓冲区效率、页面缓存读写性能以及事务日志同步策略。通过优化这些参数,可以显著提升数据库的整体性能。 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 本文详细介绍了SDCMS中的全局标签和循环标签。全局标签是在任何模板页面中均可调用的标签,而循环标签用于数据查询和展示。文章解释了这些标签的功能、使用方法及参数配置。 ... [详细]
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社区 版权所有