Академический Документы
Профессиональный Документы
Культура Документы
Gestion de la mmoire
Gestion de la mmoire
2. Allocation contigu en mmoire - Partitions de taille fixe, de taille variable 3. Pagination et mmoire virtuelle
_______________________________________
ENST BCI Informatique
432 43 2
_______________________________________
ENST BCI Informatique
433 43 3
Gestion de la mmoire
Gestion de la mmoire
Dfinitions - Mmoire : juxtaposition de cellules ou mots-mmoire ou cases-mmoire m bits (Binary digIT). Chaque cellule peut coder 2m informations diffrentes. - Octet (byte) : cellule huit bits. (1 Kilo-octet = 220octets). - Mot : cellule 16, 32, 64 bits. - Temps d'accs la mmoire (principale) : 20 100 ns. Gnralits : Sur une machine classique, rien ne distingue, en mmoire, une instruction d'une donne (architecture Von Neumann). Exemple de protections logicielles : - donnes accessibles en lecture/criture - programme accessible en lecture seule Evolution : -Sur les machines dotes des processeurs les plus rcents, ce type d'architecture est remis en cause. En effet, ces processeurs sont quips de mmoire appeles caches et ces caches sont souvent distincts pour les donnes et les instructions. On parle dans ce cas de Harvard type cache . -Sur certains calculateurs spcialiss (systmes embarqus, processeurs de traitement du signal, ...) les programmes et les donnes sont rangs dans des mmoires diffrentes : programme en ROM (read only memory), donnes en RAM. Pourquoi la mmoire ? Le processeur va chercher les informations dont il a besoin, c'est--dire les instructions et les donnes, dans la mmoire. Il ne va jamais les chercher sur le disque ! Ce dernier sert de support d'archivage aux informations, en effet la mmoire s'efface lorsque on coupe l'alimentation lectrique de la machine. 210octets, 1 Mega-octet =
_______________________________________
ENST BCI Informatique
434 43 4
_______________________________________
ENST BCI Informatique
435 43 5
Gestion de la mmoire
Gestion de la mmoire
Adresse d'une information : Chaque information est repre par son adresse, c'est dire le numro de son premier octet. Cet adressage en termes d'octets permet d'adresser, de reprer, en mmoire tous types d'information, quelque soit leur taille. On peut ainsi adresser un simple octet (un char en langage C), un mot sur deux octets (un short en langage C), etc. Types de base en C En langage C, la coutume sur Sun, par exemple, est la suivante : [unsigned] char [unsigned]short [unsigned]int [unsigned]long 8 bits 16 bits un mot machine (32 ou 16 bits !) 32 bits
Adressage de la mmoire
les cellules mmoire sont repres par leur adresse en termes d'octets. Ceci permet d'adresser diffrents types de donnes, en langage C : char, int , long Exemple d'implantation de variables sur une machine mots de 4 octets (les donnes sont implantes partir de l'adresse 2) :
#include <stdlib.h> int j; int j; short k; short k; char c; char c; /***************************** j sur 4 octets -> adresse = 2 k sur 2 octets -> adresse = 6 c sur 1 octet -> adresse = 8 ******************************/ int main(void) { exit(0); }
Voici la rgle : 1 ! sizeof (char) ! sizeof (short) ! sizeof (int) ! sizeof (long) et en C ansi : sizeof (short) " 16 bits
La rgle : 1 ! sizeof (char) ! sizeof (short) ! sizeof (int) ! sizeof (long) ... et en C ANSI : sizeof (short) " 16 bits
_______________________________________
ENST BCI Informatique
436 43 6
_______________________________________
ENST BCI Informatique
437 43 7
Gestion de la mmoire
Gestion de la mmoire
Les adresses des donnes sont alignes sur le mot mmoire. Consquence de l'alignement : la taille d'un tableau de structure, par exemple, n'est pas la mme d'une machine l'autre : struct { int Tab [4]; char c; } Buf [3] ; sizeof (Buf ) = ?
Mmoire : alignement
Consquence de l'accs 32 bits : allocation mmoire d'un tableau de structures sur une machine alignant sur 32 bits (le tableau est implant partir de l'adresse 0x100 :
Plus simplement, mais dans le mme ordre d'ides, pour allouer de la mmoire pour un tableau de 6 int : Ne pas crire : int * Ptr; Ptr = (int *) malloc (6 * 4); Mais crire : int * Ptr; Ptr = (int *) malloc (6 * sizeof int); un int peut tre implant sur 2 ou 4 octets, suivant les machines... Pour allouer de la mmoire pour une structure du type de celle dcrite ci-dessus, il est impratif d'utiliser sizeof, en effet la taille de cette structure ne sera sans doute jamais 5! struct S { char c; int i; } struct S Tab [10];
_______________________________________
ENST BCI Informatique
438 43 8
_______________________________________
ENST BCI Informatique
439 43 9
Gestion de la mmoire
Gestion de la mmoire
Utilisation d'une union pour "voir" une zone mmoire de plusieurs faons : int main ( void ){ /*-------------------------------------------------Visualiser sous forme de quatre octets une adresse Internet donne sur un long : 0x89c2a032 --> 137.194.160.50 (scapin) --------------------------------------------------*/ union Adr_IP{ struct { unsigned char o1, o2, o3, o4;} octets; unsigned long entier; }; union Adr_IP Site; /* Site.entier est initialis grce une fonction du type gethostbynane () */ printf ("adr. IP -> %d.%d.%d.%d\n", Site.octets.o1, Site.octets.o2, Site.octets.o3, Site.octets.o4); }
_______________________________________
ENST BCI Informatique
440 44 0
_______________________________________
ENST BCI Informatique
441 44 1
Gestion de la mmoire
Gestion de la mmoire
- Pointeurs et tableaux en C : Tab [i] quivalent *(Tab+ i) - Arithmtique des pointeurs : Attention aux diffrences de pointeurs, elles n'ont de sens que si les pointeurs pointent sur des objets de mme type : $ cat essai.c #include <stdio.h> #include <stdlib.h> short int i = 0; char c = 'a'; short int j = 1; int main (void){ char *pc = &c; short int *p = &i; short int *q = &j; int r; r = p - q ; printf("pc = %x\n", printf("p = %x\n", printf("q = %x\n", printf("r = %d\n", exit (0); } $ gcc -Wall essai.c -o essai $ essai pc = 804963c p = 8049644 q = 804963e r = 3 Diffrence de pointeurs : r = (p-q)/sizeof int !!!!
Tab [1] = 0; Ptr1 [1] = 0; *Ptr2 = 1; *Ptr1 = 1; *(Tab + 1) = 0; /* valeur de Ptr1 aprs l'instruction suivante ?*/ *(Ptr1 + 1) = 0; /* valeur de Ptr1 aprs l'instruction suivante ?*/ *(Ptr1 ++) = 0; /* Instruction suivante incorrecte, pourquoi ? */ *(Tab++) = 0; }
_______________________________________
ENST BCI Informatique
442 44 2
_______________________________________
ENST BCI Informatique
443 44 3
Gestion de la mmoire
Gestion de la mmoire
_______________________________________
ENST BCI Informatique
444 44 4
_______________________________________
ENST BCI Informatique
445 44 5
Gestion de la mmoire
Gestion de la mmoire
Dans lexemple ci-aprs, on rcrit la fonction strcpy de la bibliothque C. L'objectif est de montrer les particularits de la gestion des chanes de caractres en C..., qui sont dues au fait qu'il n'y a pas de type chane de caractres. Celles-ci sont ranges sous forme dun tableau d'octets termin par un caractre NULL (octet zro). La premire version ressemble ce qu'on crirait dans n'importe quel autre langage que le C Ligne 9 de cette version : si l'utilisateur de la fonction n'a pas mis de caractre NULL en fin de tableau, Copie va recopier toutes les cases mmoires partir de l'adresse source dans la zone dont l'adresse de dbut est dest. Deuxime version : on fait l'affectation dans le test. Troisime version : on manipule des pointeurs plutt que des index dans un tableau. Quatrime version : on met en uvre l'oprateur unaire ++ qui incrmente ici aprs l'affectation Cinquime version : on utilise le fait qu'il n'y a pas de type boolen, et que les oprations logiques renvoient un entier : - ( 1 signifie vrai, 0 signifie faux) - de la mme faon, tout ce qui n'est pas gal zro est vrai. Le while teste donc la valeur de l'affectation, qui sera toujours vraie tant qu'on n'arrive pas sur le NULL de fin de chane. Ce style de programmation, qui donne du code difficile lire et maintenir ne produit pas des excutables beaucoup plus performants. Laissons au compilateur le travail d'optimisation, dans la plupart des cas, il le fait mieux que les programmeurs.
Exemple, commentaires(2)
Les deux instructions suivantes sont quivalentes :
Tab [1] = 0 ; et Ptr1 [1] = 0;
Effet de *Ptr1=1
0 1 2 3
0 1 0 0
_______________________________________
ENST BCI Informatique
446 44 6
_______________________________________
ENST BCI Informatique
447 44 7
Gestion de la mmoire
Gestion de la mmoire
Exemple : copie de tableaux de caractres en C premire version : 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. void Copie ( char *dest, char *source) { char *p, *q; int i; i=0; p=dest; q=source; for (i=0; q[i] != '\0'; i=i+1) p[i]=q[i]; p[i]=q[i]='\0'; }
Exemple, commentaires(3)
Aprs : *(Ptr1 + 1) = 0,
Ptr1 vaut 2.
remplacement successifs des lignes 8 10 : 8. 9. 10. 8. 9. 10. 8. 9 10. while((p[i]=q[i]) != '\0') i=i+1;
8. 9.et 10
while(*p++=*q++);
Le code gnr sur SPARC par le compilateur gcc donne 5 instructions assembleur pour la boucle dernire version et 6 pour la boucle premire version,
_______________________________________
ENST BCI Informatique
448 44 8
_______________________________________
ENST BCI Informatique
449 44 9
Gestion de la mmoire
Gestion de la mmoire
La partie du systme d'exploitation qui s'occupe de grer la mmoire s'attache atteindre les objectifs suivants : protection : dans un systme multi utilisateurs, plusieurs processus, appartenant des utilisateurs diffrents, vont se trouver simultanment en mmoire. Il faut viter que l'un aille modifier, ou dtruire, les informations appartenant un autre. rallocation : chaque processus voit son propre espace d'adressage, numrot partir de l'adresse 0. Cet espace est physiquement implant partir d'une adresse quelconque. partage : permettre d'crire dans la mme zone de donnes, d'excuter le mme code. organisation logique et physique : comme on le verra, un instant donn, seule une partie du programme et des donnes peut se trouver en mmoire si la taille de cette dernire est trop faible pour abriter l'ensemble de l'application.
protection : par dfaut, un processus ne doit pas pouvoir accder lespace dadressage d'un autre, partage : sils le demandent, plusieurs processus peuvent partager une zone mmoire commune, rallocation : les adresses vues par le processus (adresses relatives ou virtuelles) sont diffrentes des adresses dimplantation (adresses absolues),
organisation logique : notion de partitions, segmentation (cf. Intel), pagination, mmoire virtuelle, organisation physique : une hirarchie de mmoire mettant en uvre les caches matriels, la mmoire elle-mme, le cache disque, le(s) disque(s) (qui est un support permanent, contrairement aux prcdents),
_______________________________________
ENST BCI Informatique
450 45 0
_______________________________________
ENST BCI Informatique
451 45 1
Gestion de la mmoire
Gestion de la mmoire
Un accs la mmoire ne veut pas forcment dire un accs la mmoire RAM, comme on pourrait le croire. Les processeurs tant de plus en plus rapides, les mmoires leur semblent de plus en plus lentes, pour la simple raison que les performances de ces dernires progressent beaucoup plus lentement que les leurs. Pour pallier ce dfaut, les constructeurs implantent de la mmoire sur les "chips" c'est dire sur les processeurs eux-mmes. Ces mmoires sont appeles "caches". Elles contiennent un sous-ensemble de la mmoire RAM. Ces caches s'appellent "on chip caches", primary caches ou caches primaires. Il existe galement des caches secondaires, qui ne sont pas sur le processeur luimme, mais auxquels on fait accs par un bus ddi, plus rapide que celui permettant les accs la mmoire classique.
Du plus rapide et plus petit (niveaux bas) au plus lent et plus volumineux (niveaux hauts) :
Quand la capacit dcrot, le cot du bit augmente. On fait accs aux disques locaux par le bus, l'accs aux disques distants se fait par le rseau. Remarque : un instant donn, une information peut tre prsente plusieurs niveaux de la hirarchie.
_______________________________________
ENST BCI Informatique
452 45 2
_______________________________________
ENST BCI Informatique
453 45 3
Gestion de la mmoire
Gestion de la mmoire
Grstion de la mmoire
2. Allocation contigu en mmoire - Partitions de taille fixe, de taille variable 3. Pagination et mmoire virtuelle
_______________________________________
ENST BCI Informatique
454 45 4
_______________________________________
ENST BCI Informatique
455 45 5
Gestion de la mmoire
Gestion de la mmoire
Problmes lis la gestion de la mmoire en partitions : Fragmentation interne : -Un processus n'utilise pas la totalit de la partition. Fragmentation externe : -Certaines partitions ne sont pas utilises, car trop petites pour tous les travaux ligibles. Comment choisir a priori la taille des partitions ?
Sur l'exemple, Job_5 peut tre implant deux adresses diffrentes (laquelle choisir ?), mais on ne peut pas charger Job_4 qui demande un espace mmoire de 125 Ko.
_______________________________________
ENST BCI Informatique
456 45 6
_______________________________________
ENST BCI Informatique
457 45 7
Gestion de la mmoire
Gestion de la mmoire
Si plusieurs partitions sont susceptibles de recevoir un processus, laquelle choisir : - First fit : on range le processus dans la premire partition libre et suffisamment grande trouve, - Best Fit : on va chercher la partition dont la taille approche au mieux celle du processus charger en mmoire. - Worst Fit : on met le processus dans la plus grande partition libre.
_______________________________________
ENST BCI Informatique
458 45 8
_______________________________________
ENST BCI Informatique
459 45 9
Gestion de la mmoire
Gestion de la mmoire
Le garbage collecting est appel ramasse miettes en franais. Il est utilis par des logiciels (emacs, crit en Lisp), par des langages (Java, Lisp), pour grer leur propre espace mmoire. La dfragmentation dun disque sapparente du garbage collecting..
Cot de l'opration ? On peut galement faire du compactage (regroupement des seuls trous voisins)
_______________________________________
ENST BCI Informatique
460 46 0
_______________________________________
ENST BCI Informatique
461 46 1
Gestion de la mmoire
Gestion de la mmoire
Limites de l'allocation contige. Knuth a dmontr que, quelle que soit la stratgie adopte, on n'arrive jamais recouvrir parfaitement l'espace libre par des blocs occups. Sa dmonstration montre que la proportion de blocs libres (trous) sera d'un tiers par rapport au nombre de blocs occups. Il rpartit les blocs occups en trois catgories : - ceux qui ont deux voisins libres, - ceux qui ont deux voisins occups, - ceux qui ont un voisin de chaque nature.
Soit : - N : nombre de blocs occups, - M : nombre de blocs libres, Les diffrents types de blocs occups : - Type a : bloc adjacent deux blocs libres, - Type b : bloc adjacent un bloc occup et un libre, - Type c: bloc adjacent deux blocs occups, Si : - Na : nombre de blocs de type a - Nb : nombre de blocs de type b, - Nc : nombre de blocs de type c Alors : N = Na + Nb + Nc et : M = Na + Nb/2 + #/2 ( #> 0 ou < 0 selon les bords)
_______________________________________
ENST BCI Informatique
462 46 2
_______________________________________
ENST BCI Informatique
463 46 3
Gestion de la mmoire
Gestion de la mmoire
_______________________________________
ENST BCI Informatique
464 46 4
_______________________________________
ENST BCI Informatique
465 46 5
Gestion de la mmoire
Gestion de la mmoire
Gestion de la mmoire
_______________________________________
ENST BCI Informatique
466 46 6
_______________________________________
ENST BCI Informatique
467 46 7
Gestion de la mmoire
Gestion de la mmoire
Pagination
Le problme des partitions est la fragmentation car les programmes ont besoin d'espace contigu. La pagination permet d'utiliser des espaces non contigus. Comme on le voit sur le schma, des pages qui se succdent dans l'espace vu par l'utilisateur peuvent tre implantes sur des pages mmoires non contigues. Les pages sont charges en mmoire l o il y a de la place. La table de pages mmorise le placement de chaque page logique en mmoire physique. La table de pages (TP) est un tableau tel que TP[i] donne le numro de page physique (l'adresse en mmoire) o a t charge la page i. Exemple : Si les pages 0,1 et 2 d'un processus sont charges sur les pages mmoire 24, 78 et 100 on aura : TP [0] = 24, TP [1] = 78 et TP [3] = 100.
L'espace dadressage est divis en pages, la mmoire centrale est divise en blocs. (taille de la page = taille du bloc).
Table des pages : elle fait correspondre une page logique un bloc physique.
_______________________________________
ENST BCI Informatique
468 46 8
_______________________________________
ENST BCI Informatique
469 46 9
Gestion de la mmoire
Gestion de la mmoire
Quand l'espace d'adressage de l'application est suprieur la taille de la mmoire physique, on parle d'adressage virtuel. On donne l'illusion l'utilisateur qu'il dispose d'un espace d'adressage illimit (en fait limit la taille du disque sur lequel est range l'application).
Mmoire virtuelle
Soit M la taille de la mmoire disponible sur la machine. Soit T la taille de l'application : Si T < M, on parle simplement de pagination, Si T > M, on parle de mmoire virtuelle, deux cas sont alors possibles : o M est la de la mmoire libre cet instant, o M est la taille de totale de la mmoire (application plus grande que la mmoire physique !)
La mmoire virtuelle donne lillusion lutilisateur (au processus) quil dispose dun espace dadressage illimit (en fait, limit par la taille du disque).
_______________________________________
ENST BCI Informatique
470 47 0
_______________________________________
ENST BCI Informatique
471 47 1
Gestion de la mmoire
Gestion de la mmoire
Passage de l'adresse virtuelle l'adresse physique : - l'adresse d'une information est divise en deux champs : numro de page virtuelle et dplacement dans cette page (ici appels p et w) - le contenu de l'entre p de la table de pages (appele TP) donne le numro de page physique p' o est charge p. Dans cette entre, c'est dire dans TP[p] figurent galement les droits d'accs la page en lecture, criture et destruction, ainsi que des indications ncessaires la pagination. Ces indications sont donnes par des bits, citons le bit V (valid) qui indique si p' est bien un numro de page en mmoire, le bit M (modified ou dirty bit) qui indique si la page a t modifie. - pour trouver l'information cherche on concatne la partie dplacement dans la page au numro de page physique trouv. Lorsqu'on ne trouve pas la page que l'on cherche en mmoire, on parle de dfaut de page (page fault, en anglais).
Exemple : les adresses virtuelles et physique sont sur 32 bits, les pages font 1K octets. La page virtuelle 4 est implante sur la page physique 9. Voici les 3 tapes de passage de l'adresse virtuelle l'adresse en mmoire :
_______________________________________
ENST BCI Informatique
472 47 2
_______________________________________
ENST BCI Informatique
473 47 3
Gestion de la mmoire
Gestion de la mmoire
En allocation par partition, les stratgies sont des stratgies de placement, ici on utilise des stratgies de REMPLACEMENT, les tailles de toutes les partitions (ici des pages) tant gales. Les principales stratgies sont les suivantes : Moins Rcemment Utilise (MRU) / Least Recently Used (LRU) : On suppose que le futur ressemblera au pass. Implique que l'on conserve une trace des dates d'accs aux pages. Moins Frquemment Utilise (MFU) / Least Frequently Used (LFU) : On suppose que le futur ressemblera au pass. Implique que l'on conserve une trace du nombre d'accs aux pages. Problme des pages rcemment charges. La Plus Ancienne / First In First Out (FIFO) : Implique que l'on conserve une trace de l'ordre de chargement.
Stratgies de remplacement
Les principales stratgies de remplacement (indiquent quelle page doit tre remplace) : - Least Recently Used (LRU), la page la moins rcemment utilise: lalgorithme le plus utilis. Les hirarchies de mmoires sont gres LRU. - Least Frequently Used (LFU), la page la moins frquement utilise. - First In First Out (FIFO), la plus ancienne.
_______________________________________
ENST BCI Informatique
474 47 4
_______________________________________
ENST BCI Informatique
475 47 5
Gestion de la mmoire
Gestion de la mmoire
Soit le programme :
int main (int argc, char *argv[], char * arge []){ short i; printf("adresse de argc : 0x%x, argc : %d\n", &argc, argc ); printf("adresse de argv : 0x%x, argv : %x\n", &argv, argv ); printf("adresse de arge : 0x%x, arge : %x\n", &arge, arge ); for(i=0 ; argv[i] != 0; i++) printf ("argv[%d] (0x%x) : %s\n", i, argv[i], argv[i]); for(i=0 ; i < 3 ; i++) printf ("arge[%d] } (0x%x) : %s\n", i, arge[i], arge[i]);
Rsultats:
adresse de argc : 0xeffff6e4, argc : 1 adresse de argv : 0xeffff6e8, argv : effff704 adresse de arge : 0xeffff6ec, arge : effff70c argv[0] (0xeffff814) : ./a.out arge[0] (0xeffff81c) : ARCH=sparc-sun-solaris2.4 arge[1] (0xeffff836) : DISPLAY=:0.0 arge[2] (0xeffff843) : EDITOR=emacs
_______________________________________
ENST BCI Informatique
476 47 6
_______________________________________
ENST BCI Informatique
477 47 7
Gestion de la mmoire
Gestion de la mmoire
La pile : main
Structure de la pile lors de l'appel main : nombre de mots sur la ligne de commande : argc, tableau de pointeurs (termin par un nul ) contenant les mots de la ligne de commande : argv, tableau de pointeurs (termin par un nul) contenant les variables d'environnement : arge.
_______________________________________
ENST BCI Informatique
478 47 8
_______________________________________
ENST BCI Informatique
479 47 9