12.07.2015 Views

Généralités sur les systèmes d'exploitation - Site personnel de ...

Généralités sur les systèmes d'exploitation - Site personnel de ...

Généralités sur les systèmes d'exploitation - Site personnel de ...

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

4°) La mémoire segmentéeLO14 : Université Technologique <strong>de</strong> TroyesLa mémoire segmentée est une organisation <strong>de</strong> la mémoire qui respecte le comportement usuel <strong>de</strong>sprogrammeurs, qui généralement voient la mémoire comme un ensemble <strong>de</strong> tableaux distincts contenant<strong>de</strong>s informations <strong>de</strong> types différents. Un segment pour chaque type : données, co<strong>de</strong>, table <strong>de</strong>s symbo<strong>les</strong>,librairies, etc. Ces différentes zones ont <strong>de</strong>s tail<strong>les</strong> variées, et parfois variab<strong>les</strong> au cours du temps (le taspar exemple).La mémoire segmentée non paginée pose <strong>de</strong>s problèmes <strong>de</strong> compactage (défragmentation). La stratégieidéale est : la mémoire en segments paginés.5°) La mémoire cacheOn a besoin d'un cache dès qu'une différence <strong>de</strong> temps d'accès est importante : entre un disque dur et uneunité centrale ou entre une mémoire lente et une unité centrale. Tous <strong>les</strong> processeurs mo<strong>de</strong>rnes disposent<strong>de</strong> mémoire cache. Dans son principe la gestion d'une mémoire cache suit celui <strong>de</strong> la pagination :découpage en blocs (beaucoup plus petit ici : 2, 4, 8 ou 16 octets)IV) Utilisation dans LINUX1°) Gestion <strong>de</strong> la mémoire <strong>de</strong>s processusAvec le programme ci-<strong>de</strong>ssous on peut réaliser le mapping <strong>de</strong>s adresses mémoire d'un processus./* Remy Card & al. Programmation LINUX 2.0 Eyrol<strong>les</strong> (1998)*/#inclu<strong>de</strong> /#inclu<strong>de</strong> #inclu<strong>de</strong> int i;/* Variable non initialisée (segment BSS)*/int j=2; /* variable initialisée (segment DATA) */extern int _end;extern int _etext; /* Fin du segment <strong>de</strong> co<strong>de</strong> */extern int _edata; /* Fin du segment <strong>de</strong> données */extern int __bss_start; /* Début du segment DSS */extern char **environ; /* Pointeur <strong>sur</strong> l'environnement */void <strong>de</strong>bug(char *adr);main(int argc, char *argv[]) {int k,taille,len;printf("Adresse <strong>de</strong> la fonction main = %09lx\n",main);printf("Adresse du symbole _etext = %09lx\n",&_etext);printf("Adresse <strong>de</strong> la variable j = %09lx\n",&j);printf("Adresse du symbole _edata = %09lx\n",&_edata);printf("Adresse du symbole __bs_start = %09lx\n",&__bss_start);printf("Adresse <strong>de</strong> la variable i = %09lx\n",&i);printf("Adresse du symbole _end = %09lx\n",&_end);printf("Adresse <strong>de</strong> la variable k = %09lx\n",&k);printf("Adresse du premier argument :arg[0] = %09lx\n",argv[0]);printf("Adresse <strong>de</strong> l'environnement :environ[0] = %09lx\n",environ[0]);return 0;}Ce programme lancé tel quel donne le résultat :Adresse <strong>de</strong> la fonction main = 008048500Adresse du symbole _etext = 008048718Adresse <strong>de</strong> la variable j = 0080498e8Adresse du symbole _edata = 0080499acAdresse du symbole __bs_start = 0080499acAdresse <strong>de</strong> la variable i = 008049a08Adresse du symbole _end = 008049a0cAdresse <strong>de</strong> la variable k = 0bffff9b4Adresse du premier argument:arg[0] = 0bffffabfAdresse <strong>de</strong> l'environnement:environ[0] = 0bffffaeb2°) Mémoire partagéeLes fonctions <strong>de</strong> mémoire partagées ressemblent beaucoup aux sémaphores#inclu<strong>de</strong> 17 /98 S. Moutou : Cours

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!