CSAPP番外:计算机的存储架构

文章为大一学生原创,创作是学习之中而高于学习的过程,恳请批评指正!

本文适合初接触计算机、计算机硬件的技术者阅读(同时也恳请大佬指教)

CSAPP(Computer Science A Programmer's Perspective):与本文宗旨一样,旨在从计算机程序员的角度解析计算机原理,以获得更佳的编程能力和体验。

计算机的存储架构

CPU访问RE,cache,main memory,disk的速度递减,即最容易访问到寄存器;但是它们的存储空间自上而下递增 

(一)寄存器

1.何为寄存器?

寄存器是一种高速存储单元,通常由触发器或锁存器等数字电路元件组成,用于在计算机运行过程中临时存储数据、指令或地址等信息。它们位于 CPU 内部,与 CPU 的其他组件紧密协作,以实现高效的数据处理和指令执行

2.寄存器的作用

下面我们从功能的角度介绍寄存器:

(1)数据暂存

        存数据,计算机的本职工作,这很好理解。但是寄存器的数量有限(例如,一个x86-64的中央处理单元包含一组16个存储64位值的通用目的寄存器),存储空间更为有限,所以,在数据处理过程中,寄存器用于暂时存放正在被处理的数据,这样数据的访问速度就会加快,性能得到提升。

        例如,在进行两个数的加法运算时,这两个数会先被分别加载到不同的寄存器中,然后 CPU 从寄存器中读取数据进行加法操作,运算结果也会暂存于某个寄存器中,直到被存储到主存储器或用于后续的操作。

(2)指令存储与解码

        寄存器可以存储从内存中读取的指令。当 CPU 执行指令时,首先会将指令从内存加载到指令寄存器(IR)中,然后对指令进行解码,分解成各种控制信号和操作数信息,以指导 CPU 的各个部件完成相应的操作。

(3)地址存储

        地址寄存器用于存储内存地址。比如,程序计数器(PC)就是一种特殊的地址寄存器,它始终指向下一条要执行的指令在内存中的地址。当一条指令执行完毕后,PC 会自动更新,指向下一条指令的地址,从而保证程序能够按照顺序依次执行。        

        此外,还有其他一些地址寄存器用于在数据访问时指定内存中的数据存储位置。

3.寄存器按功能分类

(1)通用寄存器

        通用寄存器是 CPU 中最常用的寄存器,可用于存储各种类型的数据和地址,能被程序员灵活使用,执行多种不同的操作。在数据处理过程中,它们可以作为操作数的存储位置,也可以用于存储中间结果。例如,在进行算术运算(如加法、减法)、逻辑运算(如与、或、非)时,通用寄存器可以存储参与运算的数据。

        例如,在 x86 架构的 CPU 中,EAX、EBX、ECX、EDX 等都是通用寄存器。其中,EAX 寄存器常被用作累加器,在乘法和除法运算中有着特殊的用途;ECX 寄存器通常作为计数器,用于循环操作。

(2)专用寄存器 
  • 程序计数器(PC,Program Counter)
  • 也称为指令指针寄存器(IP,Instruction Pointer),它存储着下一条要执行的指令在内存中的地址。CPU 根据程序计数器的值从内存中读取指令,执行完一条指令后,程序计数器会自动更新,指向下一条指令的地址,从而保证程序能够按顺序依次执行。
  • 指令寄存器(IR,Instruction Register)
  • 用于存储从内存中读取的当前正在执行的指令。当 CPU 从内存中取出一条指令后,会将其放入指令寄存器中,然后对该指令进行解码,分解成各种控制信号和操作数信息,以指导 CPU 的各个部件完成相应的操作。
  • 地址寄存器(AR,Address Register)
  • 用于存储内存地址,帮助 CPU 在内存中定位数据或指令的存储位置。在进行内存读写操作时,地址寄存器会将所需访问的内存地址发送到内存总线上,以便 CPU 能够准确地从指定的内存地址读取数据或将数据写入该地址。例如,基址寄存器和变址寄存器就属于地址寄存器,它们可以与偏移量结合使用,实现更灵活的内存寻址方式。
  • 状态寄存器(SR,Status Register)
  • 也称为标志寄存器,用于记录 CPU 在执行指令过程中的一些状态信息。这些状态信息包括运算结果的特征(如是否为零、是否有进位、是否为负数等)以及 CPU 的工作模式等。例如,在进行算术运算后,状态寄存器会根据运算结果设置相应的标志位,后续的条件跳转指令可以根据这些标志位的值来决定是否进行跳转,从而实现程序的分支控制。

(二)缓存

1.何为缓存?

计算机缓存(Cache Memory)是位于 CPU 与主存(如 DRAM)之间的高速存储部件,旨在解决 CPU 与主存之间的速度差异问题。

2.缓存的层级结构

大多数PC采用L1-L3的三层建构,目前也有L4的设计

L1 缓存(一级缓存)
集成在 CPU 内核中,速度最快(纳秒级),容量最小(通常几十 KB)。
分为指令缓存(L1-I)和数据缓存(L1-D)。

L2 缓存(二级缓存)
离 CPU 稍远,容量较大(几 MB),速度略低于 L1。

L3 缓存(三级缓存)
容量更大(几十 MB),共享于多核 CPU,速度进一步降低。

多级缓存通过 “速度换容量” 的分层策略,成为现代计算机性能的基石。

(三)主存

1.何为主存?

        主存是 CPU 直接访问的临时数据存储区,介于缓存和外存(磁盘)之间;主存在断电后清空数据(易失性);访问延迟明显,较缓存中的数据不易访问。分为DRAM(动态随机存取存储器)SRAM(静态随机存取存储器),主存中主要采用DRAM,SRAM则主要应用在缓存中。

2.主存的作用

临时存储 CPU 正在处理的程序和数据(如操作系统、应用程序、中间计算结果)。

介于高速缓存(L1/L2/L3)与低速外存之间,平衡访问速度与容量。

嗨,读到这里,你可能想问我是不是在水篇幅为什么计算机设计了这几层存储架构,主存有什么存在的必要,为什么不再多一层呢?

 3.计算机架构的合理性和主存的不可替代性

         计算机存储层级的核心矛盾是速度与容量的权衡,由于多个物理定律的限制,存储单元速度和密度无法达成正相关;因此根据数据的活跃度(数据的冷热程度)将数据分存在缓存、主存、外存中。

        作为缓存与外存的桥梁,主存对在数据通道中对“两侧”都有重要作用:

        一方面,缓存容量不足时,主存提供更大的存储空间(典型主存容量是 L3 缓存的 1000 倍);另一方面,外存数据必须先加载到主存才能被 CPU 处理(避免直接访问外存的 ms 级延迟)。在冯诺依曼体系架构的发展中,1945 年提出 "程序存储" 概念,要求主存能快速读取指令和数据;1968年Intel实现了DRAM的技术突破,奠定了现代主存的基础。

        提到DRAM,它是利用电容存储电荷(需定期刷新)的存取存储器 ,它的读写速度快,但主存的易失特性也归功于它。但是操作系统内核、进程上下文、网络缓冲区等动态数据需实时更新,主存的易失性恰好匹配这一需求。故主存是动态数据的唯一载体。

        此外,还需提及主存是虚拟内存的物理基础。CPU 中的专用硬件模块,通过页表将虚拟地址映射到物理地址,页表则存储在主存中。(此部分概念较深,且涉及物理知识,请读者自行查阅)

(四)外存

外存主要是磁盘,分为两种存储介质:

SSD与HDD的对比:

 

        

(这里我想提一下,我们大多数PC装配的是SSD,电脑中有一个整理内存碎片的功能,这里是将不连续的内存分配空间进行整合,会提升内存性能,但是根据SSD写入次数有限的特性,移动这些数据需要擦除重写,岁银盘也有损耗 )

好了,到这里计算机的内存架构也浅析完毕了,仅仅是从一个小白的视角去探索计算机,如有误解错言请在评论区指正。下一篇会发布程序的机器编码相关内容 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值