Reference:

寄存器 是距离CPU最近、访问数据速度最快的存储介质,用来做一些最基本的指令和地址存储。寄存器从内存中获取数据,然后在CPU中进行处理,处理完后又将数据暂时存放在寄存器中,再从寄存器传输到内存中。寄存器不需要很大容量,但是必须有匹配CPU的数据传输速度,所以它被集成在了CPU内部以节省数据传输的时间,是CPU的一部分。寄存器 具有高性能、高耗电的特点,所以造价成本较高。
主存储器 就是我们常说的(狭义的)内存,使用的是 DRAM, Dynamic Random-Access Memory。
DRAM 之所以叫动态,是因为将数据写入 DRAM 后,一段时间过后数据会丢失,需要一个额外的电路不断对其进行刷新操作才行。因为DRAM储存数据利用的是电容中是否有电荷,有代表1,无代表0。但是电容会放电或吸电,刷新操作会对其进行检查。如果电量大于满电量的1/2,则将电充满,否则将电全部放掉。
内存有以下特点:
如果程序要获取的数据刚好在寄存器中,可以直接获得该数据。如果在内存中,则需50-200个周期。可见速度差别非常大。如果每次寄存器都从内存中去读取数据,则耗费时间将会相当多。为了弥补这一速度差异,工程师们设计了缓存这一工作方式。CPU频繁访问的数据被存储在了缓存中。CPU要获取数据时,首先访问缓存,如果命中则得到数据,如果没有命中(cache miss)则再去访问内存。至于缓存怎么判断哪些数据是会被频繁访问的,这就涉及到相关的算法问题了。
缓存使用的是比一般的RAM(Random Access Memory)存取速度更快的SRAM(Static Random Access Memory)。
RAM一般分为静态RAM(static RAM, SRAM)和动态RAM(dynamic RAM, DRAM)。SRAM 的速度虽然比 DRAM 快,但成本高得多,所以不可能将 DRAM 全部替换成 SRAM。CPU访问数据先是在一级缓存(L1 Cache)中找,找不到再到二级缓存(L2 Cache)中找,再没有就去内存中找。
缓存有以下特点:
内存 和 缓存 在广义上整体被称为内(部)存储器(简称内存)或主存储器,而其他外部不依赖电存储数据的设备(如磁盘、光盘、闪存等)统称外存储器或辅助存储器。内存是CPU和外部存储设备之间的桥梁,用来存放那些将要被CPU处理的数据,以及与外部设备交换数据。
一种外部存储器,多用于照相机、音乐播放器、手机等设备,如SD卡。现在的游戏卡一般都是闪存。U盘用的也是快闪技术。另外,快闪存储器也在作为磁盘存储器的替代品越来越多地被使用,即所谓的 固态硬盘(ssd,solid state disk)。不同于内存,它在电源关闭时(或故障时)数据可保存下来。
磁盘存储器就是 磁盘、硬盘 或 机械硬盘。是长期联机存储数据的主要介质。为了能够访问数据,系统必须将数据从 磁盘 移到 内存。完成处理后,数据要写回 磁盘。由于访问 磁盘 非常耗时,而且频繁操作 磁盘 也会造成 磁盘 损伤,所以有了”磁盘缓存“这一设计。
移动硬盘是机械硬盘还是固态硬盘?都有。固态的移动硬盘一般较贵,容量较小。
缓存是CPU的一部分,它存在于CPU中。内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内存快很多。
注意:
缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访问最频繁的。CPU 是负责运算和处理的,内存 是交换数据的。
通常 CPU 找数据或指令的顺序是:先到 一级缓存 中找,找不到再到 二级缓存 中找,如果还找不到就只有到 内存 中找了。一级缓存和二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。
RAM(Random Access Memory) 分为两种:
SRAM 的体积是 DRAM 的
6
6
6 倍)、成本高(同容量的 SRAM 是 DRAM 的
4
4
4 倍)缓存,也可用在某些嵌入式系统中作为主内存DDR(Double Data Rate) 是指 DRAM 的一种改进技术,能够在一个时钟周期内传输两次数据(在时钟信号的上升沿和下降沿各一次)。这使得 DDR 内存比传统的 单倍数据率(SDR,Single Data Rate)内存速度更快。
cache miss, 缓存未命中 指的是当一个程序或系统试图从缓存中读取数据,但所需的数据并不在缓存中,从而需要从较慢的主存储器(如主内存或磁盘)中获取数据的情况。缓存未命中会导致性能下降,因为访问主存储器的速度通常比访问缓存的速度慢得多。
缓存未命中通常可以分为以下几类:
缓存命中和未命中对系统性能有显著影响,设计良好的缓存系统可以通过减少未命中率来显著提升系统性能。这通常通过增加缓存大小、优化缓存替换策略(如LRU、FIFO等)、以及改进缓存映射策略来实现。
L1缓存。L1指令缓存(L1 Instruction Cache)和L1数据缓存(L1 Data Cache),分别用于存储指令和数据。虚拟地址(Virtual Address):程序使用的地址。物理地址(Physical Address):在内存中实际存储数据的地址。虚拟地址(Virtual Address) 和 物理地址(Physical Address) 的存在是为了提高系统的效率和安全性。具体来说,虚拟地址和物理地址的引入有以下几个主要原因:
内存保护:
虚拟地址 使得每个进程都拥有独立的地址空间,防止一个进程无意或恶意地访问另一个进程的内存,从而增强了系统的安全性和稳定性。地址空间扩展:
虚拟地址 空间允许程序使用比实际 物理内存 更大的地址空间。通过 虚拟内存 技术,操作系统可以将不常用的数据暂时存放到硬盘上,从而腾出物理内存供活跃的程序使用。这使得系统能够运行比物理内存更多和更大的应用程序。内存管理的简化:
虚拟地址 空间使得内存分配和回收变得更加灵活。操作系统可以使用 分页(Paging) 或 分段(Segmentation) 技术将虚拟内存映射到物理内存,从而简化内存管理。虚拟内存 允许多个进程共享同一段 物理内存。例如,多个进程可以共享同一个库文件,而不需要为每个进程分别分配一份 物理内存 副本。程序的可移植性:
地址空间的抽象:
操作系统和硬件(如 内存管理单元,MMU,Memory Management Unit)协同工作,将虚拟地址映射到物理地址。常见的机制包括:
虚拟地址空间划分为固定大小的 页(Page),并将这些页映射到物理内存中的 页框(Page Frame)。虚拟地址空间划分为不同大小的 段(Segment),每个段独立映射到物理内存。这些机制使得操作系统可以灵活地管理内存,提高内存使用效率,同时确保系统的安全和稳定。
CPU请求数据
当CPU需要执行一条指令(例如从内存读取数据),它会通过 地址总线(用于传输内存地址) 将所需的数据地址发送到 内存控制器,比如 DDRC, DDR Controller。
内存控制器 接收到地址信息后,负责从 内存 中读取相应的数据。这通常涉及以下几个步骤:
内存控制器 会对接收到的地址进行译码,以确定需要访问的具体 内存单元。内存单元,内存控制器 会将数据从内存中读取出来。数据传输到CPU缓存(可选)
在现代计算机系统中,内存和CPU之间通常有一层或多层高速缓存(Cache)。从内存读取的数据首先会被传输到缓存中。缓存有多个级别(L1、L2、L3等),每一级缓存的访问速度和容量不同。缓存的目的是加速数据访问。
数据传输到寄存器
最后,缓存 中的数据通过数据总线(用于传输实际的数据内容)传输到CPU中的 寄存器 中。寄存器 是CPU中最小但最快的存储单元,CPU可以直接对 寄存器 中的数据进行操作。
上面描述的详细步骤:
地址总线将PC中的地址发送给内存控制器。内存读取数据(如加载指令),指令解码单元将产生相应的内存地址。数据总线传输到CPU中的特定寄存器。示例:
举个具体的例子,假设 CPU 执行一条 MOV A, [B] 指令,即将内存地址B处的数据移动到寄存器A中:
地址总线发送到内存控制器。内存控制器 读取地址B处的数据,返回给CPU。缓存(如果命中缓存)。数据总线传输到寄存器A。