首先要名确,一个application消耗的内存,一定指得是用户空间的内存。
3g - 4g 的kernal space是共享的,每个进程都有自己用户空间0 - 3G,只要通过系统调用就可以陷入kernal space, 就会从x86的3 rings升级到0 rings, 即陷入到内核空间。
app 调driver的iocrtrl, dirver 的ioctrl 内部通过调用kmalloc/vmalloc申请的内存并不计算在内,因为是通过内核的api申请的,属于内核消耗的。
vss、rss、pss、uss
pidof a.out
pmap a.out
vma的来源
在linux铁三角(二)有过叙述,这里不再赘述。这里直接上图把
MMU给CPU发送page fault的时候,在硬件中有2个寄存器
是否RSS就代表一个进程真正的内存消耗呢?
三个进程,其中2个Bash, 1 个 cat.
那么对应三张页表,每当切换进程,存储页表的 基地址就会却换,从而切换到不同的地址空间中。
中间的是内存条,通过三张页表瓜分物理内存。
104进程内存消耗:
pa aux和free中的内存概念,很复杂, http://blogread.cn/it/article/6264?f=wb#original中介绍到RSS.resident set size 也就是每个进程用了具体的多少页的内存。由于linux系统采用的是虚拟内存,进程的代码,库,堆和栈使用的内存都会消耗内存,但是申请出来的内存,只要没真正touch过,是不算的,因为没有真正为之分配物理页面。RES:resident memory usage 即应用程序实际使用的内存,但未包含SWAP,以及未包含共享的内存欢迎分享,转载请注明来源:内存溢出
评论列表(0条)