Sie sind auf Seite 1von 20

Chapitre 5

Gestion de la Mmoire 1re partie: Point de vue processeur

Prsentation
La mmoire peut tre adresse de 3 points de vue Point de vue processeur
Comment le processeur adresse la mmoire physique

Point de vue kernel


Comment le kernel gre la mmoire pour son propre usage

Point de vue des processus


Comment la mmoire est alloue aux processus Allocation diffre Gestion des erreurs

Adressage x86
3 formes dadressage dans les CPUs x86
Adressage logique
Spcifie ladresse dun oprande et/ou dune instruction Chaque adresse logique est constitue dun segment et dun offset

Adressage linaire
Un entier 32bits non sign permettant dadresser nimporte quelle zone mmoire

Adressage physique
Adresse la cellule mmoire Correspond aux signaux lectriques

Adresse logique

Segmentation Unit

Adresse linaire

Paging Unit

Adresse physique

Mode rel, mode protg


Mode rel
Introduit dans le 80286 CPUs prcdent navaient quun unique mode, quivalent rel Adressage de la mmoire par segments de 20 bits =>1MB max Pas de protection mmoire Mode du processeur au boot pour compatibilit

Mode protg
Introduit dans le 80286 Permet la gestion hardware de la protection mmoire Ajout dun mcanisme de pagination dans le 80386 Introduit les niveaux de privilge ou rings
0 a tous les pouvoirs 3 trs limit

Segmentation hardware
Une adresse logique est constitue
Dun identificateur de segment Dun offset reprsentant une adresse relative dans ce segment

Identificateur (Segment Selector): 16 bits Offset : 32 bits Le processeur contient des registres pour obtenir lidentificateur de segment
6 registres disponibles CS, SS, DS, ES, FS et GS Si plus de segments, sauvegardes des valeurs en mmoire

Registres de segment
3 registres ont un rle spcifique CS : Code Segment
Pointe vers un segment contenant des instructions Contient un champs de 2 bits qui indique le Current

Privilege Level (CPL) SS : Stack Segment


Pointe vers un segment contenant la pile courante du programme

DS : Data Segment
Pointe vers un segment contenant les donnes statiques du programme

Les 3 autres registres peuvent faire rfrence des segments arbitraires

Segments descriptors
Chaque segments est dcrit par 8 octets Champs du Segment Descriptor
Base : 32 bits contenant ladresse linaire de dbut de segment G : granularit, si 0 le segment est exprim en octets, sinon en multiples de 4Ko Limit : 20 bits indiquant la longueur du segment en octets S : Si 0, segment contenant des donnes critiques pour le kernel Type : 4 bits caractrisant le type du segment et ses droits daccs DPL : Descriptor Privilege Level, 2 bits indiquant le niveau de privilge minimal pour accder ce segment Segment-Present : Indique si le segment est en mmoire principale

Descriptor Tables
Les segments descriptors sont stocks dans des tables Global Descriptor Table Local Descriptor Table
Chaque processus en a une Adresse en mmoire contenue dans le registre ldtr

Unique Adresse en mmoire contenue dans le registre gdtr

Pour convertir une adresse logique en adresse linaire, il faut passer par ces tables Lecture du Segment Selector dans ladresse logique Lire le Segment Descriptor dans la table (GTD ou LDT)
pour connatre ladresse de dbut de segment Vrifier les droits daccs Calculer ladresse linaire

Registres non programmables


La conversion logique -> linaire ncessite des accs mmoire
Trop coteux en pratique

Utilisation de registres CPUs spciaux


Un pour chacun des registres de segmentation Non programmables Contiennent le Segment Descriptor correspondant Sont mis jour quand un Segment Selector est charg

Mais au fait, que contient un Segment Selector?


13 bits servant identifier le segment descriptor correspondant dans la GDT ou LDT Un indicateur TI (Table Indicator) qui indique si le segment descriptor et dans la GDT ou LDT Un Requestor Privilege Level (2 bits) qui indique le niveau de privilge du CPU quand le segment descriptor est charg

Schma de translation
Examen du champs TI pour savoir dans quelle table regarder Trouver le segment descriptor correspondant dans la table Ajout du champs Base loffset
GDT ou LDT
descriptor

Utilisation du registre gdtr ou ldtr

Adresse linaire

gdtr ou ldtr?

Segment Selector Adresse Logique

Offset

Pagination
La pagination transforme les adresses linaires en adresses physiques Pour des raisons defficacit, les adresses linaires sont groupes en intervalles de taille fixe: des pages Des adresses contigus dans une page sont des adresses physiques contigus Diffrence entre Page manipule par lOS et Page physique (page frame ou page physique)
Une Page peut au cours de lexcution changer de page physique

Les structures de donnes assurant la conversion des adresses sont des tables de page
Stockes en mmoire Doivent tre initialises par le kernel

Les processeurs Intel peuvent fonctionner sans pagination


Registre pour activation Si dsactiv, adresses linaire sont interprtes comme physiques

Pagination des 80386


Lunit de Pagination des 80386 traite des pages physiques de 4KB Une adresse linaire 32 bits est divise en Directory : 10 bits de poids forts Table : 10 bits intermdiaires Offset : 12 bits de poids faible La conversion se fait en 2 tapes, en utilisant le Page Directory et le Page Table Le Page Directory contient ladresse de Page Table La Page Table contient ladresse des pages physiques Ladresse physique du Page Directory est stocke dans le registre cr3 Taille maximale adressable:
10 bits pour le Page Directory donc 210 entres possibles Donc 1024x1024x4096=232 cellules mmoire

Exemple de pagination
0 Directory Table Offset

31

Page table Page directory Page

cr3

Entres des tables


Les entres des rpertoires et tables de pages ont les mme entres Present : la page ou la table de page sont prsents en mmoire 20 bits les plus significatifs de ladresse physique de la page

Remis 0 par lOS Dirty : Applicable seulement aux entres de la table de pages. Mis 1 lors de lcriture dans la page. Remis 0 par lOS Read/Write : Droits de lecture ou lecture/criture User/Supervisor : Privilge requis pour accder la page ou la table de pages PCD et PWT : contrle le cache hardware Page Size : applicable seulement aux entres du rpertoire. Si mis, lentre correspond une page physique de 4MB

Accessed : Mis quand lunit dadressage accde la page.

Les pages sont des multiples de 4096 Les 12 bits les moins significatifs sont toujours 0

Pagination tendue
Les pentiums ont amen la pagination tendue Les pages physiques ont une taille de 4KB ou 4MB Dans ce cas, ladresse linaire est divise en 2 champs Directory : 10 bits les plus significatifs Offset : les 22 bits restants Entres dans le rpertoire Flag Page Size mis 1
Les 10 bits de poids fort seulement sont ncessaires (multiples de 4MB)

Les deux paginations peuvent cohabiter Utiliss pour grer des gros blocs de mmoire contigus

Exemple de pagination tendue


0 Directory Offset

31

Page directory

Page (4MB) cr3

Cache et TLB
Tous les processeurs modernes ont un ou plusieurs caches Lunit de gestion de cache est situe entre lunit de pagination et la mmoire physique Sur les x86, le cache peut tre globalement dsactiv ou control Flag CD du registre cr0 pour activation/dsactivation Flag NW pour Write-through ou Write-back Possibilit dassocier une politique de cache pour chaque page PCD cache activ/dsactiv PWT Write-through ou Write-back Linux mets tous flags 0 pour toutes les pages
Cache activ avec write-back pour toutes les pages

Un cache spcifique pour la pagination est disponible Translation Lookaside Buffer


Garde en cache les adresses linaires rcemment transformes

Pagination sous Linux


Linux adopte un mcanisme de pagination 3 niveaux
Inspir des processeurs Alpha Indispensable pour les machines 64 bits

3 types de tables Page Global Directory Page Middle Directory Page Table Ladresse linaire est dcoupe en 4 parties Chaque processus a sa propre Page Global Directory et ses propres Page Tables Quand un changement de processus intervient, Linux sauvegarde le contenu de cr3 et charge la nouvelle valeur
Lunit de pagination utilise les bonnes tables

Si Linux tourne sur un processeur qui na pas 3 niveaux de paginations (Pentium), la Page Middle Directory est mise 1 entre

Exemple de pagination 3 niveaux


0 Global Directory Middle Directory Table Offset

31

Page table Page Global Directory Page Middle Directory Page

cr3

Conclusion
Segmentation et pagination sont 2 mcanismes permettant datteindre le mme objectif
Sparer lespace dadressage physique des processus

La segmentation assigne un espace linaire diffrent chaque processus La pagination permet dassocier un espace linaire diffrents espaces physiques Linux prfre la pagination
La gestion des processus est plus facile sur un unique espace linaire La segmentation nest pas disponible sur tous les processeurs

Das könnte Ihnen auch gefallen