我们每天都在同内存打交道,但大家对内存真的了解吗?上篇文章中,我们对服务器内存以及服务器内存技术有所介绍,为增进大家对内存的认识,本文将为大家介绍高频率内存的优势。此外,小编还将对虚拟内存加以探讨。


一、高频率内存优势

由于决定内存性能的核心因素有内存容量、带宽和频率,而如果在同代内存,相同容量条件下,内存频率越高,性能就越好。如果是不同代内存,比如 DDR3 和 DDR4 内存,如果是相同容量下,DDR4 内存性能肯定在 DDR3 之上,毕竟 DDR4 内存频率均在 DDR3 之上,加之新一代内存还在带宽上有升级,功耗更低等。

 

关于内存和频率的关系就介绍到这里,简单来说,频率是决定内存性能的重要因素,不同代内存往往频率都不同,在相同容量下,内存频率越高,其性能往往更好。而在现实使用中,有适合不仅看理论,比如买的是 DDR4 3000 内存,但由于主板仅支持 DDR4 2400,那么 DDR4 3000 高频内存只能识别到 DDR4 2400,对于这部分用户来说,DDR4 3000 由于电脑不能完全识别,显得并不是特别合适,因此实际内存选择时,还需要看实际需求与价格。

 

二、内存频率是否越高越好

理论上来讲,在同代相同容量内存中,内存频率越高,速度就越快。也就是说,频率是决定内存性能的一个非常重要的因素。

 

其实,电脑内存由第一代的 DDR,发展到现在最想的 DDR4,可以看到,越是最新的内存,频率往往更高,通过内存频率,我们有时候也基本可以判断内存是第几代的产品。

 

第一代 DDR 古董内存就不说了,下面主要从 DDR3 第二代内存说起:

DDR2 内存 频率:333MHz/400MHz/667MHz/800MHz/1066MHz 工作电压 1.8V;

DDR3 内存 频率:1066MHz、1333MHz、1600MHz、2133 工作电压 1.5V;

DDR4 内存:频率:2133MHz、2400MHz、3000MHz、3200 工作电压 1.2V;

可以看到,越是新一代内存,频率越高,并且工作电压由于工艺的提升,电压更低,功耗还更低。

 


三、虚拟内存

内存的一项主要任务,就是存储进程的相关数据。我们之前已经看到过进程空间的程序段、全局数据、栈和堆,以及这些这些存储结构在进程运行中所起到的关键作用。有趣的是,尽管进程和内存的关系如此紧密,但进程并不能直接访问内存。在 Linux 下,进程不能直接读写内存中地址为 0x1 位置的数据。进程中能访问的地址,只能是虚拟内存地址(virtual memory address)。操作系统会把虚拟内存地址翻译成真实的内存地址。这种内存管理方式,称为虚拟内存(virtual memory)。

 

每个进程都有自己的一套虚拟内存地址,用来给自己的进程空间编号。进程空间的数据同样以字节为单位,依次增加。从功能上说,虚拟内存地址和物理内存地址类似,都是为数据提供位置索引。进程的虚拟内存地址相互独立。因此,两个进程空间可以有相同的虚拟内存地址,如 0x10001000。虚拟内存地址和物理内存地址又有一定的对应关系,如图 1 所示。对进程某个虚拟内存地址的操作,会被 CPU 翻译成对某个具体内存地址的操作。

 


图 虚拟内存地址和物理内存地址的对应

 

应用程序来说对物理内存地址一无所知。它只可能通过虚拟内存地址来进行数据读写。程序中表达的内存地址,也都是虚拟内存地址。进程对虚拟内存地址的操作,会被操作系统翻译成对某个物理内存地址的操作。由于翻译的过程由操作系统全权负责,所以应用程序可以在全过程中对物理内存地址一无所知。因此,C 程序中表达的内存地址,都是虚拟内存地址。比如在 C 语言中,可以用下面指令来打印变量地址:

 

intv = 0;

printf("%p",(void*)&v);

 

本质上说,虚拟内存地址剥夺了应用程序自由访问物理内存地址的权利。进程对物理内存的访问,必须经过操作系统的审查。因此,掌握着内存对应关系的操作系统,也掌握了应用程序访问内存的闸门。借助虚拟内存地址,操作系统可以保障进程空间的独立性。只要操作系统把两个进程的进程空间对应到不同的内存区域,就让两个进程空间成为“老死不相往来”的两个小王国。两个进程就不可能相互篡改对方的数据,进程出错的可能性就大为减少。

 

另一方面,有了虚拟内存地址,内存共享也变得简单。操作系统可以把同一物理内存区域对应到多个进程空间。这样,不需要任何的数据复制,多个进程就可以看到相同的数据。内核和共享库的映射,就是通过这种方式进行的。每个进程空间中,最初一部分的虚拟内存地址,都对应到物理内存中预留给内核的空间。这样,所有的进程就可以共享同一套内核数据。共享库的情况也是类似。对于任何一个共享库,计算机只需要往物理内存中加载一次,就可以通过操纵对应关系,来让多个进程共同使用。IPO 中的共享内存,也有赖于虚拟内存地址。