首页 > 系统相关 >内存管理-31-进程内存占用-3-/proc/pid/maps‌

内存管理-31-进程内存占用-3-/proc/pid/maps‌

时间:2024-08-26 22:05:17浏览次数:10  
标签:00 name 00000000 31 pid vm vma maps 内存

基于msm-5.4


一、初探

此文件描述了进程使用的每个内存段的信息,但是并不是所有的段,也不是一个段的所有部分都加载到内存中了,除非使用了对应的页面。

1. 打印格式

# cat /proc/593/maps
5e0cb16000-5e0cc1a000 r--p 00000000 fc:03 100868352                      /system/bin/surfaceflinger
7ba8276000-7ba9696000 rw-s 00000000 00:0a 67455                          /dmabuf:
7ba9a26000-7ba9a28000 rw-p 00000000 00:00 0
7bb020a000-7bb043d000 r--p 00000000 fc:05 9842176                        /vendor/lib64/libllvm-qgl.so
7e560f2000-7e560fa000 rw-p 00000000 00:00 0                              [anon:.bss]
7fc9c26000-7fc9c47000 rw-p 00000000 00:00 0                              [stack]

打印成员介绍:

各字段打印的内容见 show_map_vma()

(1) 5e0cb16000-5e0cc1a000: vma->vm_start - vma->vm_end

(2) r--p:
vma->vm_flags & VM_READ ? 'r' : '-'
vma->vm_flags & VM_WRITE ? 'w' : '-'
vma->vm_flags & VM_EXEC ? 'x' : '-'
vma->vm_flags & VM_MAYSHARE ? 's' : 'p'

(3) 00000000: vma->vm_pgoff << PAGE_SHIFT

(4) fc:03: MAJOR(inode->i_sb->s_dev):MINOR(inode->i_sb->s_dev), 其中 i_sb 是 struct super_block 类型的成员。

这里 fc:03 是 252:3, 对应的应该是下面这个节点:

/dev/block # ls -l
brw------- 1 root root 252, 3 1970-01-01 08:00 dm-3

(5) 100868352: inode->i_ino, 与 ls -i 的值相等。

(6) /system/bin/surfaceflinger: name, 如果对应的 vma->vm_file != NULL 则打印 name=file->f_path, 否则,如果 vma->vm_ops->name 回调存在则打印 name=vma->vm_ops->name(vma), 再则,若 vma->vm_mm 为NULL则打印 name="[vdso]",若 (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) 则打印 name="[heap]",若 is_stack(vma) 成立则打印 name="[stack]".


2. 实现

static const struct pid_entry tgid_base_stuff[] = {
    REG("maps",       S_IRUGO, proc_pid_maps_operations),
};
static const struct pid_entry tid_base_stuff[] = {
    REG("maps",      S_IRUGO, proc_pid_maps_operations),
};

static int show_map(struct seq_file *m, void *v) //proc/task_mmu.c
{
    show_map_vma(m, v); //打印在这里面
    m_cache_vma(m, v); //这是游标向后遍历一个vma
    return 0;
}

 

标签:00,name,00000000,31,pid,vm,vma,maps,内存
From: https://www.cnblogs.com/hellokitty2/p/18381664

相关文章

  • 内存管理-31-进程内存占用-4-/proc/pid/smaps
    基于msm-5.4一、初探1.打印格式#cat/proc/593/smaps...7e5a528000-7e5a626000r--p0000000000:1f5/dev/binderfs/hwbinderSize:1016kBKernelPageSize:4kBMMUPageSize:4kBRss:......
  • 【C++ 面试 - 内存管理】每日 3 题(三)
    ✍个人博客:Pandaconda-CSDN博客......
  • 内存管理-30-系统内存占用
    基于msm-5.4一、前言1.相关名词介绍RSS(ResidentSetSize)‌:这是进程当前在物理内存中占用的空间,包括进程本身和所有链接库。RSS是评估进程内存占用的一个重要指标,它直接反映了进程当前实际使用的物理内存量‌。但由于包含了共享库,用处不大。‌PSS(ProportionalSetSize)‌......
  • 内存管理-31-进程内存占用-1-/proc/pid/status
    基于msm-5.4一、初探1.打印格式#cat/proc/593/statusName:surfaceflinger...VmPeak:11322904kBVmSize:11306812kBVmLck:0kBVmPin:0kBVmHWM:92828kBVmRSS:91100kBRssAnon:19708kBRssFile:70884kB......
  • limu|P31-34|CPU和GPU
    目录CPUVSGPU提升CPU利用率1、提升空间和时间的内存本地性2、并行以利用所有核提升GPU利用率1、并行2、内存本地性3、少用控制语句4、不要频繁在CPU和GPU之间传数据单机多卡并行分布式计算CPUVSGPU首先,一个芯片的空间是有限的,给了很多空间给某个内容(能力强),其他内容的空间就......
  • sqli-labs靶场通关攻略 31-35
    主页有sqli-labs靶场通关攻略1-30第三一关less-31闭合方式为?id=1&id=1")--+步骤一:查看数据库名http://127.0.0.1/less-31/?id=1&id=-1%22)%20union%20select%201,database(),3%20--+ 步骤二:查看表名http://127.0.0.1/less-31/?id=1&id=-1%22)%20union%20select%2......
  • sqli-labs靶场通关攻略(31-35关)
    第31关(")闭合)查数据库?id=")unionselect1,2,database()--+查表?id=")unionselect1,2,group_concat(table_name)frominformation_schema.tableswheretable_schema='security'--+查列?id=")unionselect1,2,group_concat(column_nam......
  • Spring Boot 3 中的性能优化:更快的启动时间和更低的内存占用
    随着微服务架构的普及,SpringBoot因其简洁的配置和快速的开发周期,成为了众多开发者的首选框架。然而,随着应用规模的增大和复杂度的提升,如何优化SpringBoot应用的启动时间和内存占用成为了一个重要的课题。本文将探讨在SpringBoot3中可以采取的一些性能优化措施,以实现......
  • JVM-内存结构(超详细)
    目录程序计数器(PC寄存器)定义作用特点Java虚拟机栈定义结构​编辑栈帧的结构栈帧的生命周期JVM压栈出栈过程Java虚拟机栈的特点常见运行时异常本地方法栈(NativeMethodStack)定义作用结构生命周期特点堆定义特点新生代、老年代对象分配过程总结方......
  • 学懂C++(四十四):C++ 自定义内存管理的深入解析:内存池与自定义分配器
    目录1.内存池(MemoryPool)概念模型特点核心点实现适用场景经典示例实现代码解析2.自定义分配器(CustomAllocators)概念模型特点核心点实现适用场景经典示例实现代码解析高级自定义分配器示例代码解析总结        C++作为一种高性能编程语言,在......