最近我对android中的/ proc / pid / maps&/ proc / pid / pagemap文件感兴趣,我使用一些工具来分析和转储这样的文件:

@ /proc/126/maps - /system/bin/drmserver
= becfa000-bed1b000 rw-p 00000000 00:00 0          [stack]
: pfn[a676e],address[00000000A676E000],ispresent[1], isswapped[0]
: pfn[a676f],address[00000000A676F000],ispresent[1], isswapped[0]
: pfn[a676b],address[00000000A676B000],ispresent[1], isswapped[0]
: pfn[a97c1],address[00000000A97C1000],ispresent[1], isswapped[0]
: pfn[9951b],address[000000009951B000],ispresent[1], isswapped[0]
: pfn[9ac45],address[000000009AC45000],ispresent[1], isswapped[0]

该行以'@'开头,告诉我们有关进程的一些信息 .

该行以'='开头,在此过程中告知有关段的虚拟地址的一些信息,此处显示堆栈段 .

该行以':'开头,告诉该虚拟空间映射的实际物理地址 . 一行代表一页 .

所以当我调查它时,我发现了一些困惑的东西 .

首先是我发现物理地址范围介于 0x0000000070000000 - 00000000AD9FF000 So is the residual space occupied by system or something else? 之间

其次我发现这个文件中的几乎所有堆栈段都有相同的虚拟空间大小,大约33页(33 * 4k = 132KB)和 I wonder why is that?

此外,当我检查不同进程中的堆栈段时,我发现一两个页面具有相同的物理地址,如下所示:

= becfa000-bed1b000 rw-p 00000000 00:00 0          [stack]
: pfn[a676e],address[00000000A676E000],ispresent[1], isswapped[0]
: pfn[a676f],address[00000000A676F000],ispresent[1], isswapped[0]
: pfn[a676b],address[00000000A676B000],ispresent[1], isswapped[0]
: pfn[a97c1],address[00000000A97C1000],ispresent[1], isswapped[0]
: pfn[9951b],address[000000009951B000],ispresent[1], isswapped[0]
: pfn[9ac45],address[000000009AC45000],ispresent[1], isswapped[0]

= becfa000-bed1b000 rw-p 00000000 00:00 0          [stack]
: pfn[a676e],address[00000000A676E000],ispresent[1], isswapped[0]
: pfn[a676f],address[00000000A676F000],ispresent[1], isswapped[0]
: pfn[a5efd],address[00000000A5EFD000],ispresent[1], isswapped[0]
: pfn[a5efc],address[00000000A5EFC000],ispresent[1], isswapped[0]
: pfn[a5eb2],address[00000000A5EB2000],ispresent[1], isswapped[0]
: pfn[ab241],address[00000000AB241000],ispresent[1], isswapped[0]
: pfn[ac8b8],address[00000000AC8B8000],ispresent[1], isswapped[0]

它们属于不同的进程,但我认为堆栈空间对于不同的进程应该是唯一的 . Do I miss something?
有谁可以帮我解释一下?非常感谢 .