当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]Linux的内存管理,实际上跟windows的内存管理有很相像的地方,都是用虚拟内存这个的概念,说到这里不得不骂MS,为什么在很多时候还有很大的物理内存的时候,却还是用到了pagefile. 所以才经常要跟一帮人吵着说Pagefile的大小,以及如何分配这个问题

Linux的内存管理,实际上跟windows的内存管理有很相像的地方,都是用虚拟内存这个的概念,说到这里不得不骂MS,为什么在很多时候还有很大的物理内存的时候,却还是用到了pagefile. 所以才经常要跟一帮人吵着说Pagefile的大小,以及如何分配这个问题,在Linux大家就不用再吵什么swap大小的问题,我个人认为,swap设个512M已经足够了,如果你问说512M的SWAP不够用怎么办?只能说大哥你还是加内存吧,要不就检查你的应用,是不是真的出现了memory leak.

在Linux下查看内存我们一般用command free
[root@nonamelinux ~]# free
total used free shared buffers cached
Mem: 386024 377116 8908 0 21280 155468
-/+ buffers/cache: 200368 185656
Swap: 393552 0 393552
下面是对这些数值的解释:
第二行(mem):
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:
第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。
这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是8908KB,已用内存是377116KB,其中包括,内核(OS)使用+Application(X,oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.
如上例:
185656=8908+21280+155468
接下来解释什么时候内存会被交换,以及按什么方交换。
当可用内存少于额定值的时候,就会开会进行交换.
如何看额定值(RHEL4.0):
#cat /proc/meminfo
交换将通过三个途径来减少系统中使用的物理页面的个数:
1.减少缓冲与页面cache的大小,
2.将系统V类型的内存页面交换出去,
3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
事实上,少量地使用swap是不是影响到系统性能的。

下面是buffers与cached的区别。
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件做缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等。
而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。
实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。
#free
#man X
#free
#man X
#free
你可以先后比较一下free后显示buffers的大小。
另一个实验:
#free
#ls /dev
#free
你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在工业质检、安防巡检等边缘场景中,智能相机需要同时完成图像采集、实时处理和AI推理。传统方案要么用高性能CPU(功耗高),要么用NPU(灵活性差)。FPGA+Linux的异构架构正好取长补短:FPGA负责像素级流水线处理...

关键字: FPGA Linux 智能相机

在现代操作系统的运行逻辑中,内存资源的分配与调度直接决定了整个系统的运行效率和稳定性,而Linux的虚拟内存空间管理体系,正是支撑多进程并发运行、保障内存资源高效复用的核心机制。很多开发者在日常开发中只关注malloc这...

关键字: Linux 虚拟内存

在之前的系列底层技术文章中,我们先后探讨过CPU Cache伪共享、内存模型、堆与栈内存差异、高效内存池等系统级核心主题,而挂载作为Linux文件系统体系中最基础也最容易被误解的核心机制,是所有存储设备能够被用户正常访问...

关键字: Linux 挂载

在我的上一篇项目文章中,我介绍了使用 AMD 新的 Yocto 工作流结合 EDF(嵌入式开发框架)为 Kria SoM 构建嵌入式 Linux 镜像的基本步骤。该项目详细说明了克隆 AMD Yocto 项目的流程,包括...

关键字: 嵌入式 Linux FPGA

在Linux系统中,我们在终端输入一条命令按下回车,几毫秒后程序就开始运行。很多开发者每天都在执行各类可执行文件,却很少深究背后的细节:磁盘上一个静态的ELF二进制文件,是如何一步步变成内存中活跃的进程?为什么物理内存明...

关键字: Linux 虚拟内存

在嵌入式Linux开发中,同时支持多款ARMv8-A硬件平台是一个常见但不易做好的需求。每款开发板都有自己独特的Bootloader、内核配置、设备树和用户态驱动,若为每款板卡独立维护一套构建配置,维护成本会随硬件种类线...

关键字: Linux Yocto

嵌入式Linux系统的构建是一场与资源的持久博弈。当项目只需要网络通信与GPIO控制时,承载完整桌面环境的发行版无异于用卡车运信封。Buildroot作为一套基于Makefile和Kconfig的自动化构建工具,以&qu...

关键字: Buildroot Linux

IBM Z和LinuxONE 5强大的单机柜和机架式产品,以及全新的AI与自动化软件升级,助力企业更灵活地部署工作负载。 北京2026年7月8日 /美通社/ -- ...

关键字: IBM Linux 数据中心 BSP

本项目的目标是使用 Buildroot 为树莓派 Zero W 开发一个定制的嵌入式 Linux 发行版。系统设计仅包含应用程序所需的基本组件,例如 Wi-Fi 连接、SSH 和 SCP 访问、I2C 支持以及 Pyth...

关键字: Linux 树莓派 显示屏 SSD1306

官方Arduino UNO Q是一款性能强大的开发板。与传统微控制器不同,它采用“双脑”架构:搭载高通® Dragonwing™ MPU,运行Linux Debian系统,用于处理复杂的AI和计算任务;同时配备STM32...

关键字: 仪表板 STM32微控制器 Linux
关闭