一、内存是什么
首先来区分一下内存与外存
1.内存的物理意义
计算机系统中用于存储的访问的硬件设备。
2.功能
外存与CPU进行沟通的桥梁,暂存CPU的运算数据、与硬盘等外部存储器交换的数据。
二、内存的类型
1.只读存储器(ROM)
定义:
ROM是一种非易失性存储器,数据在断电后不会丢失。ROM用于存储固件和启动程序等永久性数据。
类型:
可编程只读存储器(PROM)
可擦除可编程只读存储器(EPROM)
电可擦除可编程只读存储器(EEPROM)
2.随机存取存储器(RAM)
定义:
RAM是一种易失性存储器,数据在断电后会丢失。RAM用于存储正在运行的程序和数据。
类型:包括动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)。
DRAM:需要周期性刷新来保持数据,通常用于计算机的主内存
SRAM:不需要刷新,速度更快,但成本更高,通常用于缓存
三、内存管理
1.内存的分配
静态分配:在编译时分配内存,分配大小固定,如全局变量、静态变量。
动态分配:在运行时分配内存,分配大小可变,如通过 `malloc`、`calloc`、`realloc`(C语言)或 `new`(C++)等函数分配内存。
2.内存地址
定义
内存地址是内存单元的唯一标识,用于访问特定的存储位置。每个内存单元都有一个唯一的地址。
作用
CPU通过内存地址来访问和操作内存中的数据。
分类
物理地址:实际的内存硬件地址。其中每个字节都可以通过与之对应的地址进行访问。
逻辑地址:用户程序使用的地址
- CPU
- TLB(转址旁路缓存 Translation Lookaside Buffer):加速地址翻译的过程
- MMU(内存管理单元 Memory Management Unit): 负责虚拟地址到物理地址的转换
平常加载程序的顺序是
- 操作系统把程序从磁盘加载到内存中(程序一开始是在磁盘中存放的)
- CPU去执行程序的第一条指令但是这个指令现在在物理内存中
- cpu取指令取的是该指令的虚拟地址,由MMU翻译为物理地址
- 这个读物理地址的请求将通过总线,传送到相应的物理内存中,然后物理内存把该指令发送给CPU
3.虚拟内存
定义:虚拟内存是一种内存管理技术,允许操作系统使用硬盘上的空间作为扩展内存,提供更大的内存空间给进程。
作用:虚拟内存使得程序可以使用比实际物理内存更大的地址空间,并实现内存保护和隔离。
tip:假如没有虚拟内存,则会有进程空间不隔离的问题,比如进程A会改写进程B的内容造成进程B崩溃。并且会有内存效率和内存不足的问题,物理内存有限,如果进程在休眠,不需要用的内存但是还是占用了物理内存,新的进程可能会因为内存不足而起不来。
4. 内存管理单元(MMU)
定义:内存管理单元是负责处理内存地址转换和内存保护的硬件组件。
作用:将虚拟地址转换为物理地址,实现虚拟内存管理和内存保护。
关系:
物理内存到虚拟内存的映射工作是由 MMU(内存管理单元)这颗硬件实现的。
四、内存运算的基本过程
1. 指令获取(Fetch)
过程:CPU从内存中获取下一条要执行的指令。指令的地址由程序计数器(PC)指示。
步骤:
1. 将程序计数器的值发送到内存地址总线。
2. 内存控制器将对应的指令读取到指令寄存器(IR)。
3. 程序计数器递增,指向下一条指令。
2. 指令解码(Decode)
过程:CPU解码从内存中获取的指令,以确定要执行的操作和操作数。
步骤:
1. 指令寄存器中的指令被送到指令解码器。
2. 指令解码器解析指令,确定操作码(Opcode)和操作数。
3. 指令执行(Execute)
过程:CPU根据解码后的指令执行相
步骤:
1. 如果指令涉及数据操作(如加法、减法),CPU从寄存器或内存中获取操作数。
2. CPU执行指令指定的操作(如算术运算、逻辑运算、数据传输等)。
3. 执行结果存储回寄存器或内存。
4. 数据存储(Store)
过程:如果指令涉及将数据写回内存,CPU将结果存储到指定的内存地址。
步骤:
1. 将要写入的数据送到内存数据总线。
2. 将目标内存地址送到内存地址总线。
3. 内存控制器将数据写入指定地址的内存单元。
五、内存与CPU的交互
1. 寄存器
定义:寄存器是CPU内部的高速存储单元,用于临时存储数据和指令。
作用:寄存器用于执行快速的算术和逻辑运算,减少对内存的访问次数,提高运算速度。
2.缓存(Cache)
定义:缓存是介于CPU和主内存之间的高速存储器,用于存储经常访问的数据和指令。
作用:减少CPU对主内存的访问次数,提高系统整体性能。
层次结构:
L1缓存:位于CPU内部,访问速度最快,容量较小。
L2缓存:位于CPU和主内存之间,访问速度适中,容量较大。
L3缓存:在多核处理器中共享,访问速度较慢,容量最大。
3. 内存管理单元(MMU)
定义:内存管理单元是负责处理内存地址转换和内存保护的硬件组件。
作用:将虚拟地址转换为物理地址,实现虚拟内存管理和内存保护。