Virtuelle Speicherbereich, der BEI Erzeugung eines Prozesses unter Linux 32-Bit reserviert wird?

... komplette Frage anzeigen

1 Antwort

Generell wird eine kleine Menge Speicher vom Kernel und dem Scheduler gebraucht, um die Prozesse zu verwalten, egal wie sie erzeugt werden, ein Teil davon sieht man unter /proc/<pid>/* 

Wieviel  Speicher nun ein Prozess zugewiesen bekommt hängt von seinen Anforderungen an den Kernel ab, der weist dann dem Prozess den Speicher den das Programm will (durch malloc z.B.) zu und verwaltet ihn. Kleinste Einheit ist eine Page heute, die ist 4kB groß.

Aus meinem Beispiel von vorhin massif Ausgabe ohne das Maximum und nur einen Auschnitt:

mem_heap_B=4096
mem_heap_B=8192
mem_heap_B=139264
mem_heap_B=147456
mem_heap_B=151552
mem_heap_B=155648
mem_heap_B=159744
mem_heap_B=167936
mem_heap_B=172032
mem_heap_B=172032
mem_heap_B=180224
mem_heap_B=2285568
mem_heap_B=2293760
mem_heap_B=2322432
mem_heap_B=6045696
mem_heap_B=6066176
mem_heap_B=6086656
mem_heap_B=6090752
mem_heap_B=6094848
mem_heap_B=6070272
mem_heap_B=6066176
mem_heap_B=6070272
mem_heap_B=6066176

Los ging es also mit einer und zwei Pages, dann wurden die Libs geladen, welche hier folgende waren: 

linux-vdso.so.1 => (0x00007fffe0f6a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1698f1b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f16992b1000)

Die sind nicht gerade klein, aber da shared nur einmal geladen und dann in den Speicher gemappt:

~$ ls -lah /lib/x86_64-linux-gnu/libc-2.13.so
-rwxr-xr-x 1 root root 1.6M May 29 20:23 /lib/x86_64-linux-gnu/libc-2.13.so

~$ ls -lah /lib/x86_64-linux-gnu/ld-2.13.so
-rwxr-xr-x 1 root root 134K May 29 20:23 /lib/x86_64-linux-gnu/ld-2.13.so

und die vsdo kommt vom Kernel, um ELF gelinkte Programme lesen zu können. 

Update: für die Veraltung braucht es einen task_struct der in einem Beispiel was ich eben gefunde habe 1.2kB groß ist, der immer mit dazu gehört:

The task_struct is a relatively large data structure, at around 1.7 kilobytes on a 32-bit machine. This size, however, is quite small considering that the structure contains all the information that the kernel has and needs about a process. The process descriptor contains the data that describes the executing programopen files, the process's address space, pending signals, the process's state, and much more.


Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?