RAM里面都是堆栈吗?
不是所有的RAM都是堆栈。RAM(随机存取存储器)通常分为静态RAM和动态RAM。静态RAM通常由存储单元组成的阵列,每个单元都有一个触发器来存储数据,没有特定的堆栈结构。
而动态RAM由存储单元组成的阵列,每个单元由一个存储电容和一个传输门组成,同样也没有特定的堆栈结构。虽然堆栈内存也存在于计算机的RAM中,但不是RAM内所有内容都是堆栈。
ZRAM是什么?
ZRAM是一个Linux内核模块,被设计用来在RAM中创建一个压缩块,可以作为交换内存或临时磁盘使用。
插入到这部分内存中的数据会被自动压缩。这种压缩可以让更多的数据放入内存中。
Swap内存构成了Linux虚拟内存系统的一部分,用来防止内存溢出的错误。
通常情况下,交换内存会单纯存在于Raspberry Pi的SD卡等存储设备上,效率很低。
在这种时候,zram磁盘作为交换内存的一个附加部分,这个分区保留传统RAM的IO优势,但有压缩的好处。
zram压缩是什么?
Zram 压缩是一种 Linux 内核功能,在内存中使用压缩算法来提高内存使用效率。它将一部分内存(通常是虚拟内存区域)转化为虚拟压缩存储设备。
当内存不够用时,系统将此区域的页码放置在压缩缓冲区中,由于压缩算法的作用,使用压缩缓冲区的内存会大大缩小,这意味着可以保留更多应用程序在 RAM 中,从而提高系统性能。Zram 压缩具有高速访问和低成本的特点,适合在计算资源有限的系统上使用,如嵌入式系统和移动设备。
zram是一种虚拟内存技术,它通过压缩内存中的数据存储方式,将数据保存在RAM中。zram可以提高系统性能,减少内存占用,因为它可以将未使用的内存空间释放给其他应用程序使用。
使用zram压缩技术,可以使内存使用率更加高效,因此可以更好地满足资源限制条件下的设备需求,同时提高设备的响应速度。
压缩支持可以将数据大小压缩到原来的一半以下,这对于存储介质有限的嵌入式设备来说尤为重要。
为什么linux需要物理内存分配器?
任何操作系统中最基本的部分之一就是管理内存。该子系统通常称为内存管理单元或MMU。这个子系统是一个非常复杂的子系统,但是对我们来说幸运的是,它有很多文献记录。
当我们谈论内存时,通常是我们所指的物理RAM。总物理RAM是您要在新PC或服务器中寻找的最重要属性之一。但是,最终使用RAM的是操作系统。操作系统充当应用程序和物理内存之间的抽象层。该层将物理RAM划分为虚拟“页面”,这是操作系统可以使用的最小数据单元。默认情况下,在Linux系统中,页面大小为4KB,因为单独处理每个位将太复杂而无法高效。
当Linux使用系统RAM时,它将创建一个虚拟内存层,然后将进程分配给虚拟内存。虚拟内存实际上是RAM和交换空间的结合。交换空间是硬盘驱动器中的一部分,如果可用的RAM用完了,则指定为可用空间。这里是额外的抽象层,因此每个正在运行的进程都不会重叠,并尝试使用已被另一个进程使用的内存。这也意味着虚拟内存可以扩展到物理RAM容量之外,即使在效率不高的情况下,这也可能有用。
如前所述,操作系统允许进程访问RAM的一部分。该进程完全无法控制内存分配。因此,在应用程序上工作的开发人员,尤其是用高级代码编写的开发人员,不必担心使用内存。
通常,任何文件或文件系统的一部分都使用系统命令mmap进行映射 , 并称为内存映射文件。如果一个内存页面文件没有任何关联的文件,则称为匿名内存,并且使用“ malloc”函数分配ut。
通过使用分配文件映射的内存和匿名内存的方式,操作系统可以使使用相同文件的进程与相同的虚拟内存页面一起工作,从而更有效地使用内存。 有时,一个进程正在占用另一个进程所需的内存。在这种情况下,操作系统使用OOM(内存不足)杀手。该实用程序选择一个进程,然后将其内存页重新分配给其他进程。在Linux中,默认情况下启用此OOM杀手。如果禁用它,则除了扩展到硬盘驱动器之外,如果系统用尽了内存,则基本上无权使用系统。
“ Cgroups”是用于将进程隔离到特定内存地址的实用程序,该程序将进程分组为逻辑组并为其分配一定数量的内存。Linux中包含cgroup实际上为当今使用的容器(例如Docker和OpenVZ)奠定了基础。
Linux还能够使用NUMA(非统一内存访问)与多处理器系统一起使用。这样做的目的是尝试为最接近物理RAM的CPU上运行的进程分配内存。