Mise à jour du README
This commit is contained in:
parent
658b105c44
commit
cb474e0992
211
README.md
211
README.md
@ -1,8 +1,8 @@
|
||||
# TP 1 : Mémoire
|
||||
|
||||
## Exercice 1
|
||||
Soit le [programme](Exo1/adresses_virtuelles.c) suivant qui affiche les adresses virtuelles de certaines variables lors de l'exécution du processus.
|
||||
En utilisant le (pseudo) fichier `/proc/pid/maps`, vérifiez à quel segment de pages ces adresses appartiennent.
|
||||
>Soit le [programme](Exo1/adresses_virtuelles.c) suivant qui affiche les adresses virtuelles de certaines variables lors de l'exécution du processus.
|
||||
>En utilisant le (pseudo) fichier `/proc/pid/maps`, vérifiez à quel segment de pages ces adresses appartiennent.
|
||||
|
||||
```console
|
||||
tom@Error404:/mnt/c/Users/naser/Documents/scr/TP1$ ./adresses_virtuelles
|
||||
@ -49,4 +49,209 @@ main appartient au deuxieme segment de pages (564bfc70e000-564bfc70f000)
|
||||
&j appartient au heap (564bfd7e6000-564bfd807000)
|
||||
t appartient au heap (564bfd7e6000-564bfd807000)
|
||||
m appartient au heap (564bfd7e6000-564bfd807000)
|
||||
```
|
||||
```
|
||||
|
||||
### Exercice 1 bis
|
||||
|
||||
>L'interface (pseudo-fichier) `proc/pid/smaps` permet de voir la consommation mémoire d'un processus. On peut le formater avec la commande `pmap -X`. Le but de l'exercice est de voir ce qui se passe au niveau de la mémoire d'un processus suivant les différents mode d'allocation. Le programme `null.c` permet d'avoir un point de comparaison. Dans les cas suivants, vérifiez où se trouve la memoire correspondante :
|
||||
|
||||
1. Allocation statique [buf.c](Exo1/ex1bis/buf.c)
|
||||
|
||||
```console
|
||||
tom@Error404:/mnt/c/Users/naser/Documents/scr/TP1/Exo1/ex1bis$ pmap -x 51
|
||||
```
|
||||
|
||||
```
|
||||
51: ./buf
|
||||
Address Kbytes RSS Dirty Mode Mapping
|
||||
000055a1b721c000 4 4 0 r---- buf
|
||||
000055a1b721d000 4 4 0 r-x-- buf
|
||||
000055a1b721e000 4 4 0 r---- buf
|
||||
000055a1b721f000 4 4 4 r---- buf
|
||||
000055a1b7220000 4 4 4 rw--- buf
|
||||
000055a1b7221000 24576 16516 16516 rw--- [ anon ]
|
||||
000055a1b986a000 132 4 4 rw--- [ anon ]
|
||||
00007f52d26db000 12 8 8 rw--- [ anon ]
|
||||
00007f52d26de000 152 152 0 r---- libc.so.6
|
||||
00007f52d2704000 1364 860 0 r-x-- libc.so.6
|
||||
00007f52d2859000 332 108 0 r---- libc.so.6
|
||||
00007f52d28ac000 16 16 16 r---- libc.so.6
|
||||
00007f52d28b0000 8 8 8 rw--- libc.so.6
|
||||
00007f52d28b2000 52 20 20 rw--- [ anon ]
|
||||
00007f52d28c4000 8 4 4 rw--- [ anon ]
|
||||
00007f52d28c6000 4 4 0 r---- ld-linux-x86-64.so.2
|
||||
00007f52d28c7000 148 148 0 r-x-- ld-linux-x86-64.so.2
|
||||
00007f52d28ec000 40 36 0 r---- ld-linux-x86-64.so.2
|
||||
00007f52d28f6000 8 8 8 r---- ld-linux-x86-64.so.2
|
||||
00007f52d28f8000 8 8 8 rw--- ld-linux-x86-64.so.2
|
||||
00007ffc3f565000 132 12 12 rw--- [ stack ]
|
||||
00007ffc3f5a8000 16 0 0 r---- [ anon ]
|
||||
00007ffc3f5ac000 8 4 0 r-x-- [ anon ]
|
||||
---------------- ------- ------- -------
|
||||
total kB 27036 17936 16612
|
||||
```
|
||||
>L'allocation statique de `buf.c` se trouve à l'adresse 000055a1b7221000 et elle est de 24576 Kbytes
|
||||
|
||||
2. Allocation sur la pile [stack.c](Exo1/ex1bis/stack.c)
|
||||
|
||||
```console
|
||||
tom@Error404:/mnt/c/Users/naser/Documents/scr/TP1/Exo1/ex1bis$ pmap -x 57
|
||||
```
|
||||
|
||||
```
|
||||
57: ./stack
|
||||
Address Kbytes RSS Dirty Mode Mapping
|
||||
000055c5f583a000 4 4 0 r---- stack
|
||||
000055c5f583b000 4 4 0 r-x-- stack
|
||||
000055c5f583c000 4 4 0 r---- stack
|
||||
000055c5f583d000 4 4 4 r---- stack
|
||||
000055c5f583e000 4 4 4 rw--- stack
|
||||
000055c5f5acb000 132 4 4 rw--- [ anon ]
|
||||
00007f019bcba000 12 8 8 rw--- [ anon ]
|
||||
00007f019bcbd000 152 152 0 r---- libc.so.6
|
||||
00007f019bce3000 1364 804 0 r-x-- libc.so.6
|
||||
00007f019be38000 332 112 0 r---- libc.so.6
|
||||
00007f019be8b000 16 16 16 r---- libc.so.6
|
||||
00007f019be8f000 8 8 8 rw--- libc.so.6
|
||||
00007f019be91000 52 20 20 rw--- [ anon ]
|
||||
00007f019bea3000 8 4 4 rw--- [ anon ]
|
||||
00007f019bea5000 4 4 0 r---- ld-linux-x86-64.so.2
|
||||
00007f019bea6000 148 148 0 r-x-- ld-linux-x86-64.so.2
|
||||
00007f019becb000 40 36 0 r---- ld-linux-x86-64.so.2
|
||||
00007f019bed5000 8 8 8 r---- ld-linux-x86-64.so.2
|
||||
00007f019bed7000 8 8 8 rw--- ld-linux-x86-64.so.2
|
||||
00007ffdebac4000 132 36 36 rw--- [ stack ]
|
||||
00007ffdebbef000 16 0 0 r---- [ anon ]
|
||||
00007ffdebbf3000 8 4 0 r-x-- [ anon ]
|
||||
---------------- ------- ------- -------
|
||||
total kB 2460 1392 120
|
||||
```
|
||||
>L'allocation sur la pile de `stack.c` se trouve à l'adresse 00007ffdebac4000 et elle est de 132 Kbytes
|
||||
|
||||
3. Allocation sur le tas [heap.c](Exo1/ex1bis/heap.c)
|
||||
|
||||
```console
|
||||
tom@Error404:/mnt/c/Users/naser/Documents/scr/TP1/Exo1/ex1bis$ pmap -x 59
|
||||
```
|
||||
|
||||
```
|
||||
59: ./heap
|
||||
Address Kbytes RSS Dirty Mode Mapping
|
||||
000055ac09aae000 4 4 0 r---- heap
|
||||
000055ac09aaf000 4 4 0 r-x-- heap
|
||||
000055ac09ab0000 4 4 0 r---- heap
|
||||
000055ac09ab1000 4 4 4 r---- heap
|
||||
000055ac09ab2000 4 4 4 rw--- heap
|
||||
000055ac0a4c2000 50028 49924 49924 rw--- [ anon ]
|
||||
00007f1e58321000 12 8 8 rw--- [ anon ]
|
||||
00007f1e58324000 152 152 0 r---- libc.so.6
|
||||
00007f1e5834a000 1364 844 0 r-x-- libc.so.6
|
||||
00007f1e5849f000 332 64 0 r---- libc.so.6
|
||||
00007f1e584f2000 16 16 16 r---- libc.so.6
|
||||
00007f1e584f6000 8 8 8 rw--- libc.so.6
|
||||
00007f1e584f8000 52 20 20 rw--- [ anon ]
|
||||
00007f1e5850a000 8 4 4 rw--- [ anon ]
|
||||
00007f1e5850c000 4 4 0 r---- ld-linux-x86-64.so.2
|
||||
00007f1e5850d000 148 148 0 r-x-- ld-linux-x86-64.so.2
|
||||
00007f1e58532000 40 36 0 r---- ld-linux-x86-64.so.2
|
||||
00007f1e5853c000 8 8 8 r---- ld-linux-x86-64.so.2
|
||||
00007f1e5853e000 8 8 8 rw--- ld-linux-x86-64.so.2
|
||||
00007ffe0d57b000 132 12 12 rw--- [ stack ]
|
||||
00007ffe0d5fa000 16 0 0 r---- [ anon ]
|
||||
00007ffe0d5fe000 8 4 0 r-x-- [ anon ]
|
||||
---------------- ------- ------- -------
|
||||
total kB 52356 51280 50016
|
||||
```
|
||||
|
||||
>L'allocation sur le tas de `heap.c` se trouve à l'adresse 000055ac0a4c2000 et elle est de 50028 Kbytes
|
||||
|
||||
4. Allocation (gande quantité) sur le tas [huge.c](Exo1/ex1bis/huge.c)
|
||||
|
||||
```console
|
||||
tom@Error404:/mnt/c/Users/naser/Documents/scr/TP1/Exo1/ex1bis$ pmap -x 61
|
||||
```
|
||||
|
||||
```
|
||||
61: ./huge
|
||||
Address Kbytes RSS Dirty Mode Mapping
|
||||
000055fdf6259000 4 4 0 r---- huge
|
||||
000055fdf625a000 4 4 0 r-x-- huge
|
||||
000055fdf625b000 4 4 0 r---- huge
|
||||
000055fdf625c000 4 4 4 r---- huge
|
||||
000055fdf625d000 4 4 4 rw--- huge
|
||||
000055fdf6cef000 132 100 100 rw--- [ anon ]
|
||||
00007f5bb5f2e000 272 268 268 rw--- [ anon ]
|
||||
00007f5bb5f72000 152 152 0 r---- libc.so.6
|
||||
00007f5bb5f98000 1364 852 0 r-x-- libc.so.6
|
||||
00007f5bb60ed000 332 64 0 r---- libc.so.6
|
||||
00007f5bb6140000 16 16 16 r---- libc.so.6
|
||||
00007f5bb6144000 8 8 8 rw--- libc.so.6
|
||||
00007f5bb6146000 52 20 20 rw--- [ anon ]
|
||||
00007f5bb6158000 8 4 4 rw--- [ anon ]
|
||||
00007f5bb615a000 4 4 0 r---- ld-linux-x86-64.so.2
|
||||
00007f5bb615b000 148 148 0 r-x-- ld-linux-x86-64.so.2
|
||||
00007f5bb6180000 40 36 0 r---- ld-linux-x86-64.so.2
|
||||
00007f5bb618a000 8 8 8 r---- ld-linux-x86-64.so.2
|
||||
00007f5bb618c000 8 8 8 rw--- ld-linux-x86-64.so.2
|
||||
00007fffa6cae000 132 16 16 rw--- [ stack ]
|
||||
00007fffa6cf2000 16 0 0 r---- [ anon ]
|
||||
00007fffa6cf6000 8 4 0 r-x-- [ anon ]
|
||||
---------------- ------- ------- -------
|
||||
total kB 2720 1728 456
|
||||
```
|
||||
>L'allocation (gande quantité) sur le tas de `huge.c` se trouve à l'adresse 00007f5bb5f2e000 et elle est de 272 Kbytes
|
||||
|
||||
5. Allocation sur le mapping [mmap.c](Exo1/ex1bis/mmap.c)
|
||||
|
||||
```console
|
||||
tom@Error404:/mnt/c/Users/naser/Documents/scr/TP1/Exo1/ex1bis$ pmap -x 64
|
||||
```
|
||||
|
||||
```
|
||||
64: ./mmap
|
||||
Address Kbytes RSS Dirty Mode Mapping
|
||||
000055c9d1054000 4 4 0 r---- mmap
|
||||
000055c9d1055000 4 4 0 r-x-- mmap
|
||||
000055c9d1056000 4 4 0 r---- mmap
|
||||
000055c9d1057000 4 4 4 r---- mmap
|
||||
000055c9d1058000 4 4 4 rw--- mmap
|
||||
000055c9d2214000 132 4 4 rw--- [ anon ]
|
||||
00007fad683c0000 256 128 128 rw--- 256k
|
||||
00007fad68400000 64 64 64 rw-s- zero (deleted)
|
||||
00007fad68410000 44 40 40 rw--- [ anon ]
|
||||
00007fad6841b000 152 152 0 r---- libc.so.6
|
||||
00007fad68441000 1364 812 0 r-x-- libc.so.6
|
||||
00007fad68596000 332 120 0 r---- libc.so.6
|
||||
00007fad685e9000 16 16 16 r---- libc.so.6
|
||||
00007fad685ed000 8 8 8 rw--- libc.so.6
|
||||
00007fad685ef000 52 20 20 rw--- [ anon ]
|
||||
00007fad685fd000 24 4 4 rw--- [ anon ]
|
||||
00007fad68603000 4 4 0 r---- ld-linux-x86-64.so.2
|
||||
00007fad68604000 148 148 0 r-x-- ld-linux-x86-64.so.2
|
||||
00007fad68629000 40 36 0 r---- ld-linux-x86-64.so.2
|
||||
00007fad68633000 8 8 8 r---- ld-linux-x86-64.so.2
|
||||
00007fad68635000 8 8 8 rw--- ld-linux-x86-64.so.2
|
||||
00007ffdc2360000 132 16 16 rw--- [ stack ]
|
||||
00007ffdc2384000 16 0 0 r---- [ anon ]
|
||||
00007ffdc2388000 8 4 0 r-x-- [ anon ]
|
||||
---------------- ------- ------- -------
|
||||
total kB 2828 1612 324
|
||||
```
|
||||
>L'allocation sur le mapping de `mmap.c` se trouve à l'adresse 00007fad683c0000 et elle est de 256 Kbytes
|
||||
|
||||
## Exercice 2
|
||||
|
||||
>Soit le [programme](Exo2/bss_data.c) suivant.
|
||||
1. Compilez le programme. Avec la commande `size`, regardez les différents segments du programme. Où se trouve le tableau `t` ? Augmentez la valeur de N. La taille de l'exécutable a-t-elle changé ? pourquoi ?
|
||||
|
||||
2. Recommencez avec la version 2. Expliquez.
|
||||
|
||||
## Exercice 3
|
||||
>Soit le [programme](Exo3/ij_ji.c) suivant.
|
||||
>Le temps d'éxecution de ce programme est-il différent pour les deux versions ? Pourquoi ?
|
||||
|
||||
>Le temps d'éxecution de ce programme entre les deux versions est différente, elle est plus importante dans la deuxième. Car lors de la boucle `for`, dans la première version, le compilateur a optimisé le code en mettant la valeur de `j` dans un registre, alors que dans la deuxième version, il a mis la valeur de `j` est dans la mémoire, donc il faut aller la chercher à chaque fois, vu que la mémoire est plus lente que le registre, la deuxième version est donc plus lente.
|
||||
|
||||
## Exercice 4
|
||||
>Le programme [sum_array.c](Exo4/sum_array.c) fait la somme des éléments d'un tableau en accédant aux éléments séquentiellement (`-c` croissant, `-d` décroissant) ou de manière aléatoire (`-a`).
|
||||
Testez en faisant varier la taille du tableau. Expliquez.
|
Loading…
Reference in New Issue
Block a user