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

cpu如何决定将哪些数据放入哪个内存(ram,cache,register)?

如何解决《cpu如何决定将哪些数据放入哪个内存(ram,cache,register)?》经验,为你挑选了1个好方法。

当cpu正在执行程序时,它是否通过内存管道移动所有数据?然后,任何数据都将从ram-> cache->寄存器中移出,这样所有执行的数据都会在某个时刻进入cpu寄存器.或者它是以某种方式选择它放在那些更快的内存类型中的代码,还是作为程序员选择你想要保留的特定代码,例如,用于优化的缓存?



1> Evil Dog Pie..:

这个问题的答案本身就是一个完整的过程!(通常)发生的非常简短的总结是:

    你,程序员,指定RAM中的内容.好吧,编译器会代表您执行此操作,但您可以通过声明变量的方式来控制它.

    每当您的代码访问变量时,CPU的MMU将检查该值是否在缓存中,如果不是,则它将从RAM中获取包含该变量的"行"到缓存中.某些CPU指令集可能允许您阻止它执行特定的低频操作(导致停顿),但它需要非常低级别的代码才能执行此操作.更新值时,MMU将执行"缓存刷新"操作,将缓存的内存提交到RAM.同样,您可以通过低级代码影响这种情况发生的方式和时间.它还取决于MMU配置,例如缓存是否是直写等.

    如果要对ALU(算术逻辑单元)或类似设备使用的值进行任何类型的操作,则将其从缓存加载到适当的寄存器中.哪个寄存器取决于编译器生成的指令.

某些CPU支持动态内存访问(DMA),它为不需要CPU的操作提供快捷方式.这些包括存储器到存储器的复制以及存储器和存储器映射的外围控制模块(例如UART和其他I/O模块)之间的数据传输.这些将导致数据在RAM中移动,读取或写入,而根本不会实际影响CPU内核.

在更高级别,一些支持多个进程的操作系统将在交换进程时将分配给当前进程的RAM保存到硬盘,并在进程再次运行时再次从磁盘加载.(这就是为什么你可以在C:盘上找到'Page Files'以及限制它们大小的选项.)这允许所有正在运行的进程利用大部分可用的RAM,即使它们实际上不能共享它们同时.分页是另一个值得学习的课程.(感谢Leeor提到这一点.)


1.您指定使用的内容,但操作系统可能决定将其交换到磁盘,因此您无法完全控制它.2.缓存通常以行粒度完成,而不是整页(除少数例外).3.还有scratchpads的概念 - 类似缓存的存储,接近并具有低延迟,但完全由代码控制.
@Leeor好点.1)最初的问题没有提到交换文件或进程内存管理,所以我没有想到这方面,虽然我可能应该考虑O/P的上下文.2)是的,你是对的.在内核模式的ISR期间,缓存未命中的错误导致了我自己的经验,这会导致完全缓存刷新 - 这很糟糕!3)我在工作的(少数)处理器的架构中没有遇到过scratchpads.请随意添加新答案,或编辑我的答案并将其标记为社区维基答案.
推荐阅读
  • 本书详细介绍了在最新Linux 4.0内核环境下进行Java与Linux设备驱动开发的全面指南。内容涵盖设备驱动的基本概念、开发环境的搭建、操作系统对设备驱动的影响以及具体开发步骤和技巧。通过丰富的实例和深入的技术解析,帮助读者掌握设备驱动开发的核心技术和最佳实践。 ... [详细]
  • 探究大数据环境下Kafka实现高性能的几个关键因素
    在大数据环境下,Kafka能够实现高性能的关键因素在于其独特的设计和优化策略。尽管Kafka的消息存储在磁盘上,这通常被认为会降低性能,但通过高效的文件管理和批量处理机制,Kafka能够在高吞吐量和低延迟之间取得平衡。此外,Kafka还利用了零拷贝技术、压缩算法和异步IO等手段,进一步提升了系统的整体性能。这些技术不仅保证了数据的可靠性和持久性,还使得Kafka成为处理大规模实时数据流的理想选择。 ... [详细]
  • 本文深入解析了 FCEUX 源码,并详细介绍了两种制作 DEB 包的方法及其技术细节。首先,DEB 包通常由两部分组成:控制信息(位于 DEBIAN 目录)和安装内容(模拟目录)。通过解压现有的 DEB 包,可以查看其内部结构,进而理解其工作原理。具体操作包括将安装内容释放到指定目录中,以便进行进一步的修改和定制。此外,文章还探讨了如何修改现有的 DEB 包,以满足特定需求,提供了实用的步骤和技巧。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 本文详细探讨了MySQL并发参数的优化与调整方法,旨在帮助读者深入了解如何通过合理配置这些参数来提升数据库性能。文章不仅介绍了常见的并发参数及其作用,还提供了实际操作中的调整策略和最佳实践,适合希望提高数据库管理技能的技术人员阅读。 ... [详细]
  • 深入解析Netty:基础理论与IO模型概述
    深入解析Netty:基础理论与IO模型概述 ... [详细]
  • 在并发编程中,`as-if-serial`原则确保了即使编译器和处理器对指令进行重排序,单线程的执行结果也不会受到影响。这一原则要求编译器、运行时环境和处理器必须严格遵守,以保证程序的正确性。本文深入探讨了`volatile`关键字的内存模型,详细分析了其在多线程环境中的可见性和有序性特性,以及如何通过`as-if-serial`规则来确保数据的一致性和可靠性。 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
  • 深入解析 ELF 文件格式与静态链接技术
    本文详细探讨了ELF文件格式及其在静态链接过程中的应用。在C/C++代码转化为可执行文件的过程中,需经过预处理、编译、汇编和链接等关键步骤。最终生成的可执行文件不仅包含系统可识别的机器码,还遵循了严格的文件结构规范,以确保其在操作系统中的正确加载和执行。 ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • 我正在使用 Ruby on Rails 构建个人网站。总体而言,RoR 是一个非常出色的工具,它提供了丰富的功能和灵活性,使得创建自定义页面变得既高效又便捷。通过利用其强大的框架和模块化设计,我可以轻松实现复杂的功能,同时保持代码的整洁和可维护性。此外,Rails 的社区支持也非常强大,为开发过程中遇到的问题提供了丰富的资源和解决方案。 ... [详细]
  • 为了评估精心优化的模型与策略在实际环境中的表现,Google对其实验框架进行了全面升级,旨在实现更高效、更精准和更快速的在线测试。新的框架支持更多的实验场景,提供更好的数据洞察,并显著缩短了实验周期,从而加速产品迭代和优化过程。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 该算法旨在通过将字符串S与其逆序字符串S'逐字符比较,来生成一个非最小字典序的新字符串T。具体步骤为:从首字符开始,若S的当前字符小于S'的对应字符,则将S的首字符添加到T的末尾;反之则将S'的首字符添加到T的末尾。若两者相等,可任选其一。例如,当输入为"A"时,算法将如何处理?此方法在某些特定情况下可能无法达到预期效果,需进一步探讨其原因及优化方案。 ... [详细]
  • 本文深入探讨了RecyclerView的缓存与视图复用机制,详细解析了不同类型的缓存及其功能。首先,介绍了屏幕内ViewHolder的Scrap缓存,这是一种最轻量级的缓存方式,旨在提高滚动性能并减少不必要的视图创建。通过分析其设计原理,揭示了Scrap缓存为何能有效提升用户体验。此外,还讨论了其他类型的缓存机制,如RecycledViewPool和ViewCacheExtension,进一步优化了视图复用效率。 ... [详细]
author-avatar
傻傻的不敢看结5_749
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有