Linux虚拟内存及其对进程的影响 (linux 进程 虚拟内存)

随着计算机技术的发展,我们所使用的计算机已经越来越高效、智能化。那么在这个高度发达的信息时代,计算机内存显得更加重要。虚拟内存就是处理器能够访问的计算机内存空间比实际可用的内存空间要多的一种技术。Linux虚拟内存(Virtual Memory)是现代操作系统中运用的一项重要技术,它能够使进程拥有一个似乎无限大的内存空间,并且能够优化系统内存的使用,同时减少由于内存不足而导致的崩溃。本文将深入探讨Linux虚拟内存,并分析其对进程的影响。

1. Linux虚拟内存的概念

Linux虚拟内存是一种把硬盘的空间当做内存来使用的技术,它能够实现运行程序时,以更多的内存来执行程序。Linux虚拟内存通过操作系统把使用内存较少的应用程序迁移至硬盘存储空间,进而释放系统内存空间,从而优化内存的使用。此外,Linux虚拟内存技术还允许进程进行数据共享,避免了多个进程同时占用大量内存的情况。

2. Linux虚拟内存的工作原理

Linux虚拟内存的工作机制与CPU缓存一样,都是通过把数据存储在内存中的缓冲区来实现快速存取,同时它也可以在硬盘上进行数据的保存和提取。当一个进程需要读取或写入存储设备时,虚拟内存会将数据直接放入内存缓冲区中进行操作,当数据传输完毕后,则可以将缓冲区中的数据写入到磁盘上,或是从磁盘中读出数据到缓冲区。

一个进程在运行时会被分配一个独立的虚拟地址空间,在虚拟地址控件中,可以分配给进程的内存超出物理内存的大小,这使得进程拥有虚拟内存,而不仅仅是物理内存。Linux虚拟内存的分配方式是按照需求生成,也就是说,当进程需要更多的内存时,虚拟内存会为其分配足够的地址空间,然后根据需要将地址空间映射到对应的物理内存上。

3. Linux虚拟内存对进程的影响

Linux虚拟内存的优势不仅仅在于优化内存的使用,同时也对进程的运行产生了深远的影响。具体可以从以下三个方面来说明:

(1)节省内存消耗:在物理内存不足的情况下,Linux虚拟内存会将一部分内存数据保存至磁盘上,并根据进程的需求实时将缓存区数据载入内存。这项技术能够大大节省内存的消耗,并保障较小的内存访问延迟,在资源非常紧缺的情况下,能够维持系统的稳定。

(2)保护电脑不被迅速崩溃:虚拟内存技术大大提高了linux系统的健壮性,当进程使用内存超过其预设的值时,操作系统会通过移动内存网格区来完成数据的管理,进而避免了崩溃的情况。

(3)优化多任务处理:Linux虚拟内存能够优化多任务处理效果,多个进程在虚拟地址空间中运行,彼此无互相干扰。这使得系统在高度多任务处理的情况下,还能保持极快的反应速度,同时也保障了数据的完整性,提高了应用的稳定性。

Linux虚拟内存是一种优秀的操作系统技术,能够提高计算机系统的运行效率和稳定性。采用虚拟内存技术,能够在易耗资源的环境下保障系统的正常运行。在进一步的技术创新中,Linux虚拟内存技术将会继续进化,为系统的运行机制增强更多的智能和效益。

相关问题拓展阅读:

  • linux tmp目录与内存解析
  • linux里面虚拟内存和swap有什么区别?

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里面虚拟内存和swap有什么区别?

为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache.前者针对磁盘块的读写,后者针对文件inode的读写.这些Cache有效缩短了I/O系统调用(比如 read,write,getdents)的时间.

内存活动基本上可以用3个数字来量化:活动虚拟内存总量,交换(swapping)率和调页(paging)率.其中之一个数字表明内存的总需求量,后两个数字表示那些内存中有多少比例正处在使用之中.目标是减少内存活动或增加内存量,直到调页率保持在一个可以接受的水平上为止.

活动虚拟内存的总量(VM)=实际内存大小(size of real memory)(物理内存)+使用的交换空间大小(amount of swap space used)

当程序运行需要的内存大于物理内存时,Linux系统采用了调页机制,即系统copy一些内存中的页面到磁盘上,腾出来空间供进程使用。

大多数系统可以忍受偶尔的调页,但是频繁的调页会使系统性能急剧下降。

Linux内存管理:Linux系统通过2种方法进行内存管理,“调页算法”,“交换技术”。

调页算法是将内存中最近不常使用的判简链页面换到磁盘上,把常使用的页面(活动页面)保留在内存中供进程使用。

交换技术是系统将整个进程,而不是部分页面,全部换到磁盘上。正常情况下,系统会发生一些交换过程。

当内存严重不足时,系统会频繁使用调页和交换,这增加了磁盘I/O的负载。进一步降低了系统对作业的执行速度,即系统I/O资源问题又会影响到内存资源的分配。

Linux的虚拟内存是一个十分复杂的子系统,它实现了进程间代码与数据共享机制的透明性,并能够分配比系统现有物理内存更多的内存,某些操作系统的虚存甚至能通过提供缓存功能影响到文件系统的性能,各种风格的Linux的虚存的实现方式区别很大,但都离不开下面的4个概念。

  1:实际内存

  实际内存是指一个系统中实际存在的物理内存,称为RAM。实际内咐并存是存储临时数据最快最有效的方掘孙式,因此必须尽可能地分配给应用程序,现在的RAM的形式有多种:SIMM、DIMM、Rambus、DDR等,很多RAM都可以使用纠错机制(ECC)。

  2:交换空间

  交换空间是专门用于临时存储内存的一块磁盘空间,通常在页面调度和交换进程数据时使用,通常推荐交换空间的大小应该是物理内存的二到四倍。

  3:页面调度

  页面调度是指从磁盘向内存传输数据,以及相反的过程,这个过程之所以被称为页面调度,是因为Linux内存被平均划分成大小相等的页面;通常页面大小为 4KB和8KB(在Solaris中可以用pagesize命令查看)。当可执行程序开始运行时,它的映象会一页一页地从磁盘中换入,与此类似,当某些内存在一段时间内空闲,就可以把它们换出到交换空间中,这样就可以把空闲的RAM交给其他需要它的程序使用。

  4:交换

  页面调度通常容易和交换的概念混淆,页面调度是指把一个进程所占内存的空闲部分传输到磁盘上,而交换是指当系统中实际的内存已不够满足新的分配需求时,把整个进程传输到磁盘上,交换活动通常意味着内存不足。

  vmstat监视内存性能:该命令用来检查虚拟内存的统计信息,并可显示有关进程状态、空闲和交换空间、调页、磁盘空间、CPU负载和交换,cache刷新以及中断等方面的信息。

关于linux 进程 虚拟内存的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Linux虚拟内存及其对进程的影响 (linux 进程 虚拟内存)》
文章链接:https://zhuji.vsping.com/51640.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。