令人困惑的事情/ proc / pid / maps& android

时间:2017-11-17 06:35:17

标签: android linux memory

最近我对/ proc / pid / maps& android中的/ 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之间 系统或其他东西占用的剩余空间是什么?

其次我发现这个文件中的几乎所有堆栈段都有相同的虚拟空间大小,大约33页(33 * 4k = 132KB),我想知道为什么会这样?

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

= 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]

它们属于不同的进程,但我认为堆栈空间对于不同的进程应该是唯一的。 我错过了什么吗?
有谁可以帮我解释一下?非常感谢。

0 个答案:

没有答案