当前位置: 首页 > news >正文

C++ 并发编程指南(11)原子操作 | 11.6、计算机内存结构

文章目录

  • 一、计算机内存结构
    • 1、内存的基本组成
    • 2、内存的类型
    • 3、内存的结构层次
    • 4、CPU架构
    • 5、局部性原理
    • 6、总结

前言

在探讨计算机的运行效率和数据处理能力时,内存结构无疑是一个至关重要的部分。内存,作为计算机系统中的关键组件,承担着存储数据和指令以供处理器(CPU)快速访问的重要任务。

一、计算机内存结构

1、内存的基本组成

计算机内存的基本组成单元是存储单元。每个存储单元由一个电容和一个晶体管组成,其中电容用于存储数据,而晶体管则负责控制数据的读取和写入。这种设计使得内存能够在计算机运行时快速、准确地存取数据。

2、内存的类型

  • 静态随机存取存储器(SRAM):SRAM使用触发器来存储数据,因此具有较快的读写速度。然而,由于其制造成本较高,SRAM通常被用于高速缓存(Cache)等需要快速访问的场景。
  • 动态随机存取存储器(DRAM):DRAM使用电容来存储数据,虽然读写速度稍慢于SRAM,但其制造成本较低,因此被广泛应用于主存储器(内存条)中。DRAM需要周期性地进行刷新以保持数据的稳定性。

3、内存的结构层次

计算机内存结构通常呈现出一种层次化的特点,从高到低依次为:寄存器、高速缓存(Cache)、主存储器(内存条)和辅助存储器(如硬盘、固态硬盘等)。

  • 寄存器:寄存器是离CPU最近的存储单元,其读写速度最快。CPU可以直接访问寄存器中的数据,无需经过其他存储层次。寄存器通常用于存储CPU正在处理的数据和指令。
  • 高速缓存(Cache):高速缓存位于CPU和主存储器之间,用于缓存主存储器中常用的数据和指令。当CPU需要访问数据时,首先会检查高速缓存中是否存在所需数据。如果存在,则直接从高速缓存中读取数据,从而提高了数据的访问速度。高速缓存通常分为多个层次,如L1 Cache、L2 Cache和L3 Cache等。
  • 主存储器(内存条):主存储器是计算机系统中的主要内存,用于存储正在运行的程序和数据。主存储器通常由多个存储体组成,每个存储体中有许多存储单元。每个存储单元可以存储一个二进制数或一串二进制代码(称为存储字)。存储字的长度可以是8位、16位、32位等。主存储器通过地址线、数据线和控制线等接口与CPU相连,实现数据的快速读写。
  • 辅助存储器:辅助存储器包括硬盘、固态硬盘等存储介质,用于存储大量数据和程序。与主存储器相比,辅助存储器的读写速度较慢,但容量较大且价格相对较低。辅助存储器中的数据在需要时会被加载到主存储器中供CPU处理。

4、CPU架构

下面是一个的多核CPU架构图,如下:

在这里插入图片描述

  • Core:每个Core独享SB与L1
  • SB(Store Buffer):Store Buffer是一个缓冲区,用于暂存CPU的写操作,它允许CPU把数据先写入Store Buffer,然后继续执行其他操作,而不是等待数据被写入缓存或内存后再进行下一步。这样设计的好处是显著降低了内存写延迟对CPU性能的影响。
  • L1 Cache:存储了CPU近期可能访问的数据和指令,且两个L1 Cache独享一个L2 Cache

注意:上面的CPU架构只是部分CPU采用的架构,并不能代表全部。

为什么需要使用Cache?

如果没有Cache,CPU每执行一条指令就要到内存中取数据。执行一条指令只需要几个时钟周期,而取指令需要上百个时钟周期,这就将导致CPU大部分时间都处于等待状态,进而导致执行效率低下,引入了Cache主要解决CPU等待问题。

使用Cache会引入一些新的问题,例如:Cache的一致性、Cache的缺失等,为了解决这些问题,各CPU平台(ARM/X86/IA64)都有自己的解决方案。软件层面(编译器)也会有对应的优化,这导致了CPU执行的程序并不是你写的那个版本,只是从结果上看不出差异而已。

5、局部性原理

在计算机存储结构中,局部性原理是一个重要的概念。局部性原理包括时间局部性和空间局部性两个方面。时间局部性指的是如果一个数据项被访问了,那么它在不久的将来很可能还会被再次访问;空间局部性指的是如果一个数据项被访问了,那么与其相邻的数据项也很可能被访问。基于局部性原理,计算机内存结构通常采用缓存机制来提高数据的访问速度。

6、总结

计算机内存结构是计算机系统中的核心组成部分,其性能直接影响到计算机的运行效率和数据处理能力。通过对内存的基本组成、类型、结构层次以及局部性原理等概念的深入剖析,可以更好地理解计算机内存的工作原理和重要性。

http://www.lryc.cn/news/349396.html

相关文章:

  • 正则表达式教程
  • SEO之为什么研究关键词(二)
  • Mysql 创建索引
  • vaspkit 画 Charge-Density Difference
  • FreeRTOS缩小bss段的处理
  • STM32数字示波器+详细注释+上位机程序+硬件
  • 【平衡二叉树】AVL树(双旋)
  • 【保姆级介绍自动化的讲解】
  • 【大数据面试题】27 讲下Doris的物化视图
  • kylin 使用心得
  • 在线音乐系统
  • LeetCode算法题:49. 字母异位词分组(Java)
  • 第五课,输入函数、布尔类型、比较运算和if判断
  • 数学建模——线性回归模型
  • 景源畅信:抖音小店比较冷门的品类分享?
  • java项目之企业资产管理系统(springboot+vue+mysql)
  • [ardunio ide导入blinker库]
  • Llama 3 超级课堂 -笔记
  • Leetcode 第 129 场双周赛题解
  • 队列的讲解
  • 算法学习笔记(LCA)
  • 记一次苹果appstore提审拒审问题1.2
  • 在做题中学习(59):除自身以为数组的乘积
  • centos 把nginx更新到最新版本
  • 01.认识HTML及常用标签
  • 从零开始:C++ String类的模拟实现
  • 银河麒麟服务器操作系统V10-SP2部署gitlab服务
  • 【计算机毕业设计】基于SSM+Vue的线上旅行信息管理系统【源码+lw+部署文档+讲解】
  • 链表CPP简单示例
  • 智能EDM邮件群发工具哪个好?