Linux内存模型与top命令的关系

本文深入解析物理内存、虚拟内存及交换空间的概念与运作机制,详细区分不同类型的虚拟内存,如私有、共享、匿名和文件支持的内存,并阐述其在操作系统中的角色。同时,文章解释了SWAP的作用,以及如何使用top命令监测内存使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

物理内存、虚拟内存与交换空间

图1
物理内存是内存条上的空间。
虚拟内存不同于物理内存,虚拟内存是操作系统对进程地址空间管理(process address space management)而设计的一个逻辑内存空间。虚拟内存通过页映射表(page table)映射到物理内存空间。我们程序中的指针其实就是虚拟内存空间中的地址。
交换空间物理内存被占满,此时就需要移出物理内存,放进该存储空间,参考该链接[1]

虚拟内存 Memory Types

参考该链接[2]。
并不是所有虚拟内存都是相同的,大致可以分为以下四类:

PRIVATESHARED
ANONYMOUS1
stack
malloc()
mmap(ANON, PRIVATE)
brk()/sbrk()
2
POSIX shm*
mmap(ANON, SHARED)
FILE-BACKED3
mmap(fd, PRIVATE)
pgms/shared libraries
4
mmap(fd, SHARED)

Private Memory进程私有的内存
Shared Memory共享内存,映射相同内存的所有进程都会看到修改
Anonymous Memory没有文件背景的页面,不是以文件形式存在,如堆,栈,数据段等。
File-backed有文件背景的页面

NOTE:匿名页面可能会占用交换区域,而文件支持的页面则不会占用交换区域。

ps.表格中3部分链接[2]和链接[3]有点差别,binary和pgms暂未求证是否是相同的。

另一个概念,SWAP
当系统没有物理内存时,内核会尝试将一些数据从RAM移动到磁盘。如果内存是文件支持和共享的,这很容易。由于文件是数据的来源,它只是从RAM中删除,然后在下次读取时,它将从文件中加载。

内核还可以选择从RAM中删除匿名/私有内存。在这种情况下,数据写在磁盘上的特定位置。在Linux中,swap通常存储在特定分区中,在其他系统上,这可以是特定文件。然后,它的工作方式与文件支持的内存相同:当它被访问时,它从磁盘读取并重新加载到RAM中。

top命令

在这里插入图片描述
可以参考该链接[3]
%MEM - 简单的RES除以总物理内存
VIRT - 表格中所有的象限、上图 virtual addresses space 所有的
RES - 任何占用物理内存的东西,上图 virtual addresses space 中已经映射到 physical address space 的地址,就是左边有颜色的那部分(text、data、stack)。从Linux-4.5开始,是以下三个字段的总和:

  1. RSan - 表格中象限1未被swap, which include any former quadrant 3 pages if modified(这句看不懂,哭哭)
  2. RSfd - 表格中象限3和象限4未被swap
  3. RSsh - 表格中象限2未被swap

CODE - 表格中象限3的’pgms’部分,可执行代码的物理内存量
SHR - RES的子集(不包括1,包括所有2和4,一些3)
DATA - VIRT的整个象限1部分加上象限3的所有未被swap显式mmap文件支持
SWAP - 除了象限4被swap的虚拟内存空间大小。

NOTE:即使程序映像和共享库被认为是进程私有,它们也会被内核考虑为共享(SHR)。

源码分析可以参考链接[4]
其他,查看内存工具,如进程的smaps文件,命令:cat /proc/进程的pid/smaps

参考链接
[1] https://blog.youkuaiyun.com/u014753393/article/details/50196825
[2] https://techtalk.intersec.com/2013/07/memory-part-1-memory-types/
[3] http://man7.org/linux/man-pages/man1/top.1.html
[4] https://www.cnblogs.com/xuxm2007/archive/2012/06/05/2536294.html
[5] https://blog.youkuaiyun.com/jasonchen_gbd/article/details/79462014

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值