linux内存相关情况

Linux内核是如何知道物理内存大小的?

在嵌入式系统中物理内存的实际大小是由bootloader传递给内核的,bootloader传递给内核的内存大小值是由开发人员根据内存的实际大小配置的,有改动就需要重新编译,而且并不是所有的物理内存内核都能用,有相当一部分内存会留给私有模块(像camera、gpu等),这些内存内核自身访问不到。

uboot相关的linux内存配置:

(E)early_mem

该函数用于处理bootargs中的"mem=size@start".参数

如果没有定义mem起始地址, 使用PHYS_OFFSET ,这个参数是由具体的开发板定义的,在611中,在arch\unicore\mach-sep0611\include\mach\memory.h中定义的。

#definePHYS_OFFSET       UL(0x40000000)

通过unicore_add_memory(start, size);函数将一段连续的内存空间添加到struct meminfo meminfo中去。对于ramdisk的处理也比较简单,在此不详解了。

(F)paging_init(\arch\unicore-linux\mm\mmu.c)这个函数比较大,下面分布介绍(关于内存的启动部分,推荐去看一个网友的博客http://blog.chinaunix.net/space.php?uid=20564848&do=blog&id=72836)。

(1)sanity_check_meminfo用于检测内存的虚拟地址(线性映射)是否超过了VMALLOC_MIN的地址(如果内存太大,可能会这样)。如果内存太大的话,那么就重新计算内存的可用大小。显然这时候一部分内存就不可以使用了或者一分为二(一部分给系统正常使用,一部分划给highmem)。内核为VMALLOC和initrd保留了128M的空间,那么内核可使用的最大空间只有1G-128M=896M。


### 查看 Linux 系统的内存使用情况 #### 使用 `free` 命令 为了获取整个系统的内存使用概况,可以使用 `free` 命令。此命令提供了一个简洁明了的方式来看待总物理内存以及已用和可用内存量。 ```bash free -h ``` 上述命令中的 `-h` 参数使得输出更加人性化易读,单位自动转换成 KB, MB 或 GB[^1]。 #### 利用 `top` 和 `ps` 获取进程级别的内存占用详情 对于那些想要深入了解具体哪个应用程序消耗了多少资源的人来说,`top` 是一个交互式的工具,它能够实时显示各个进程所占有的虚拟大小(VSS)与常驻集大小(RSS),后者指的是实际加载到随机访问存储器里的字节数量。而通过 `ps` 命令同样可以获得相似的信息: ```bash ps aux --sort=-%mem | head ``` 这条指令会按照内存百分比降序排列所有运行着的服务列表并仅展示前几项记录[^2]。 #### 应用第三方软件包如 `smem` 除了内置实用程序外,还有专门设计用于分析Linux系统性能数据的应用——比如 `smem` 。它可以更精确地统计不同维度下的内存分配状况,并支持导出图形化报告以便进一步研究。 安装方式取决于发行版类型,在Debian/Ubuntu上可以通过如下方法完成部署: ```bash sudo apt-get install smem ``` 之后执行简单的查询语句即可获得详尽的结果: ```bash smem -k -s rss ``` 这里参数 `-k` 表示以KB为单位表示数值;`-s rss` 按照RSS排序。 #### 查询硬件层面的内存属性 如果关注的是底层硬件特性而非操作系统层面上的表现,则可借助于 `dmidecode` 工具来提取DIMM条的相关规格说明,包括但不限于速度、容量等重要指标。不过需要注意的是这项操作通常需要超级用户权限才能成功实施。 ```bash sudo dmidecode -t memory ``` 这将返回一系列关于当前机器内部安装RAM模块的具体描述信息[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值