Sie sind auf Seite 1von 2

GIS 3 - T.P.

Systme Gestion de la mmoire

Sources : Tanguy Risset, Antoine Fraboulet, Cdric Bastoul

Consommation mmoire
1. Lisez le programme vmem1.c et expliquez ce quil fait. 2. Excutez. 3. Lancez une deuxime excution de ce programme en parallle avec la premire. Do vient la dirence ? 4. Vriez votre hypothse laide dun moniteur systme (par exemple : gnome-system-monitor).

Le cache

Le cache est une mmoire proche du processeur (petite et rapide) qui permet dacclrer la vitesse daccs aux donnes. Lacclaration a lieu lorsquon accde une donne dj prsente dans le cache, cest--dire charge par un traitement prcdent. Cela arrive lorsquon accde plusieurs fois de suite la mme donne (localit temporelle) o lorsquon accde successivement des donnes conscutives en mmoire, car le cache charge ses donnes par lignes de plusieurs mots (localit spatiale). 1. Lisez le programme vmem2.c et expliquez ce quil fait. En particulier, expliquez la dirence entre les deux boucles. 2. Excutez. Comment expliquez-vous ce phnomne ?

Liaison statique, liaison dynamique

Nous avons vu en cours la dirence entre liaison statique (chiers .a en Linux) et liaison dynamique (chiers .so en Linux) au niveau de ladressage mmoire. Nous allons comparer ces deux mcanismes sur un exemple. 1. Le chier fib.c calcule la suite de Fibonacci. Compilez fibdyn et fibstat laide du Makefile. Quelle est la dirence entre les deux excutables. Vriez votre hypothse laide de ls -l et ldd. 2. Lancez les deux excutables et consultez le chier status associ chaque processus dans /proc. Comparez les lignes VmExe/VmData/VmStk/VmSize et expliquez (cf man proc). 3. Toujours dans ce rpertoire, consultez les chiers maps associs chaque processus. A votre avis, dans quelles plages dadresses virtuelles se trouve le point dentre de la fonction fib pour les deux excutables ? Mme question pour printf.

Positionnement dans les segments


1. Ecrivez un programme C contenant : Une constante ; Une variable globale ; 1

Une variable classique ; Un tableau allou dynamiquement. 2. Ajoutez les instructions suivantes dans votre programme : Achez le PID du processus laide de la fonction getpid. Pour chacune des variables/constantes ci-dessus, achez leur adresse (%p). Insrez une pause juste derrire lachage (par exemple demandez lire un caractre). 3. Excutez et lorsque le programme est en pause, regardez dans le chier maps associ au processus dans quels segments sont positionnes chaque variable/constante. Expliquez.