diff --git a/README.md b/README.md index e989096..7af5e12 100644 --- a/README.md +++ b/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) -``` \ No newline at end of file +``` + +### 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. \ No newline at end of file