Linux中物理与虚拟内存的区别及应用详解 (linux 物理内存 虚拟内存)

随着计算机技术的不断进步,内存已经成为计算机系统的重要组成部分之一。在Linux操作系统中,内存的管理必须十分精确和有效,以确保系统能够高效地运行。而物理内存和虚拟内存则是内存管理中最重要的概念。在本文中,我们将深入探讨Linux中物理内存和虚拟内存的区别以及它们的应用。

物理内存

在计算机系统中,物理内存是指实际存在于计算机中的内存芯片等硬件器件,也就是我们通常说的RAM(Random Access Memory)。物理内存大小取决于计算机的硬件配置,它直接决定了系统可以同时运行的进程数以及其它并发操作的数量。

物理内存是一种非常宝贵的资源,因为它最终直接影响系统的性能和稳定性。如果物理内存使用不当,系统可能会非常慢或者崩溃。为了充分利用物理内存,内存管理器必须高效地分配和管理它。这就需要虚拟内存的概念。

虚拟内存

虚拟内存是管理物理内存的一种机制,它将计算机硬件和操作系统内存管理器之间的硬件地址和进程地址空间之间的映射分离开来。操作系统给每个进程提供独立的地址空间,使得一个进程无法直接访问其它进程的物理内存。这种形式的内存管理器被称为虚拟内存管理器。

虚拟内存的好处在于可以使系统在不足物理内存的情况下尽可能多地运行进程。当一个进程需要访问物理内存时,虚拟内存将物理内存中的数据或指针的地址转化为虚拟内存中的地址,从而能够使得任意多的进程在内存中同时运行。此外,虚拟内存还可以提供内存保护以及内存共享功能。

虚拟内存管理器分配给每个进程的地址空间是虚拟的。例如,当一个进程请求从地址0x00000000开始的一个块时,虚拟内存管理器将检查该请求是否对于当前进程是合法的,然后将其映射到合适的物理地址上,然后将这个地址返回给该进程。这些映射是在硬件上被实现的,这也是为什么虚拟内存管理器需要硬件的支持。

应用

现在我们来看看物理内存和虚拟内存在Linux中的应用。

1. Swapping

当系统运行时,所有的进程都使用虚拟内存。每个进程都被分配了一个虚拟地址空间,这些地址空间可以暂时占用物理内存的一部分,还可以使用硬盘上的交换空间。这种做法被称为交换(Swapping)。

交换机制的作用在于当系统物理内存不足时,将进程当前的虚拟内存页(Page)写入到硬盘的交换空间中。当这个进程再次需要这些页时,它们将从硬盘加载到物理内存中。

2. 内存映射

内存映射是一种从文件系统的文件映射到虚拟内存的机制。例如,当一个进程打开一个文件或使用mmap(2)系统调用时,文件的内容将被映射到内存中一个虚拟地址上。

内存映射通常用于优化文件I / O,因为直接读写文件需要访问磁盘,这可能非常昂贵。但是,如果将文件映射到内存中的虚拟地址,就可以以内存访问的速度快速读取文件。此外,许多网络服务器将文件映射到内存中以加速文件访问。

3. 共享内存

共享内存是一种允许进程共享内存资源的机制。在Linux中,多个进程可以使用共享内存来迅速而有效地交换数据。例如,如果一个进程需要向另一个进程发送大量数据,使用共享内存比使用套接字更高效。

共享内存需要精心设计,以确保所有进程都不会破坏彼此的内存区域。进程必须以正确的顺序保持对共享内存的锁定,以免出现数据竞争或内存损坏等情况。

在本文中,我们深入介绍了物理内存和虚拟内存的概念,以及它们在Linux中的应用。物理内存是直接映射到硬件的硬件内存空间,而虚拟内存则是通过操作系统内存管理器实现的虚拟地址空间。交换、内存映射和共享内存是Linux中使用物理内存和虚拟内存的方法之一,它们允许进程共享和访问内存资源。在Linux中,充分利用物理内存和虚拟内存是保证系统性能和稳定性的重要方式。

相关问题拓展阅读:

linux tmp目录与内存解析

使用free可以获取到设备当前的内存

其中,各项表示的含义如下所示:

total: 总计

物理内存

大小。

used: 已使用内存大小。

free: 可使用内存大小伍梁。

shared: 多个进程共享的内存总额。

buffers/cached: 磁盘缓存大小。

单位都为KB。

对于系统而言,buffers和cached都是被使用的,所以可用内存为KB。

对于

应用程序

而言,buffers和cached是可用的。当应用程序需要内存的时候,buffers和cached会被回收。从应用程序的角度而言,可用内存=free memory+buffers+cached。按上面的例子,即可用内存为+18864+123656=。

使用cat /proc/meminfo可以查看更详细的内存信息。

/proc/iomem:查看物理设备在物理内存中的映射关系

/proc/slabinfo:内核对象的当前使用状态

/proc/vmstat:

虚拟内存

统计信息。可以使用vmstat – Report virtual memory statistics 打印虚拟内存状态。

如上所示,/tmp为内存

文件系统

,内存挂载为内存文件系统(tmpfs)。使用的物理空间不是磁盘,而是

内存条

。设备重启后,/tmp下文件全清空腔拦运。

tmpfs文件系统衡消产生原因是为了提高性能。程序运行时候产生的临时文件放在磁盘会影响性能,于是tmpfs作为虚拟内存子系统来储存文件。POSIX共享内存也是基于tmpfs来实现的。

tmpfs的更大空间由RM(Real Memory,即物理内存)和swap(硬盘虚拟的内存空间)组成。

查看挂载信息,可知 tmpfs 文件系统的挂载点有两个,一个/dev/shm,另一个为/tmp。默认情况下, /tmp 将最多使用一半内存。

如果往/tmp文件夹加入大量文件,也会造成系统内存不足。

使用ps可以查看进程的状态

其中与内存相关项含义如下所示:

VSZ:虚拟内存大小。virtual memory size of the process in KiB (1024-byte units). Device mappings are currently excluded; this is subject to change. (alias vsize).

RSS:实际使用物理内存。resident set size, the non-swapped physical memory that a task has used (in kiloBytes). (alias rssize, rsz).

虚拟内存是对进程而言使用的内存,会比较大,可以理解为一个内存布局,建立虚拟内存和磁盘文件的映射关系。在进程调用的时候,查找虚拟内存,将虚拟内存对应磁盘文件拷贝到物理内存,进行调度寻址等操作。

进程使用的物理内存为RSS表示的物理内存大小,其中包括链接的

动态库

使用的内存,不只是单独进程使用的物理内存大小。

也可以通过/proc/下去查找对应进程id的相关内存信息。

/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。

/proc/pid/statm 进程所占用的内存。

linux 物理内存 虚拟内存的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 物理内存 虚拟内存,Linux中物理与虚拟内存的区别及应用详解,linux tmp目录与内存解析的信息别忘了在本站进行查找喔。


数据运维技术 » Linux中物理与虚拟内存的区别及应用详解 (linux 物理内存 虚拟内存)