13.08.2012 Views

Fonctionnement d'un ordinateur depuis zéro

Fonctionnement d'un ordinateur depuis zéro

Fonctionnement d'un ordinateur depuis zéro

SHOW MORE
SHOW LESS

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

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

Partie 6 : Hiérarchie mémoire 257/343<br />

l'écriture : on peut ainsi autoriser à un programme de lire une partie de la mémoire, mais pas d'y écrire, ou autoriser lecture et<br />

écriture, ou interdire les deux.<br />

Toute tentative d'accès à une partie de la mémoire non-autorisée déclenchera ce qu'on appelle une exception matérielle (rappelezvous<br />

le chapitre sur les interruptions) qui devra être traitée par une routine du système d'exploitation. Généralement, le<br />

programme fautif est sauvagement arrêté et supprimé de la mémoire, et un message d'erreur est affiché à l'écran.<br />

La segmentation va ainsi permettre d'implanter des mécanismes permettant de supprimer ces manipulations dangereuses. Bien<br />

sûr, on pourrait les implémenter sans avoir à utiliser la segmentation, mais ce serait plus difficile. On va voir comment la<br />

segmentation nous permettra de gérer facilement cette protection de la mémoire.<br />

Gestion des accès hors segment<br />

Comment éviter que notre programme aille lire ou écrire des données situées en dehors du segment ?<br />

Pour cela, il nous faut connaitre les adresses de base de fin de notre segment. L'idée est de tester si l'adresse physique calculée<br />

en ajoutant offset et adresse de base va sortir du segment et dépasser l'adresse de fin de notre segment.<br />

La solution a été d'implanter un registre limite. Ce registre contient la fameuse adresse de fin de notre segment. Quand un<br />

programme cherche à accéder à la mémoire, l'adresse physique à laquelle il veut accéder va être comparée à celle contenue dans<br />

ce registre limite. Si elles est plus grande, notre processeur va lever une exception matérielle qui devra être traitée par une routine<br />

de notre système d'exploitation.<br />

Droits d'accès<br />

Vient ensuite la gestion des droits d'accès en lecture et en écriture. Chaque segment se voit attribuer à sa création un certain<br />

nombre d'autorisations d'accès. Par exemple, le segment Text est souvent mit en lecture seule, pour éviter des failles de sécurité<br />

potentielles.<br />

Ces droits indiquent si l'on peut : lire ou écrire dans un segment, mais aussi considérer que celui-ci contient des données ou des<br />

instructions : on peut ainsi exécuter le contenu <strong>d'un</strong> segment ou au contraire interdire cette exécution. Par exemple, le segment<br />

Text peut être exécutable : on peut considérer son contenu comme un programme, qui ne doit pas être modifié ou lu comme le<br />

serait une donnée : on peut le rendre executable only, et interdire de copier son contenu dans les registres généraux, ou d'écrire<br />

dedans. De même, on peut décider d'interdire de charger le contenu <strong>d'un</strong> segment dans le registre d'instruction ou le registre<br />

d'adresse d'instruction pour éviter d’exécuter des données (ce qui rend plus difficile certaines failles de sécurité ou l’exécution de<br />

certains virus).<br />

De plus chaque segment est attribué à un programme en particulier : un programme n'a pas besoin d’accéder aux données<br />

localisées dans un segment appartenant à un autre programme, alors autant limiter les erreurs potentielles en spécifiant à quel<br />

programme appartient un segment.<br />

Lorsqu'on veut exécuter une opération interdite sur un segment, il suffira à la MMU de déclencher une exception matérielle pour<br />

traiter l'erreur.<br />

Pour cela, pas de miracle : il faut retenir les autorisations pour chaque segment. Toutes ces informations sont rassemblées dans<br />

ce qu'on appelle un descripteurs de segment.<br />

Celui-ci contient pour chaque segment des informations comme :<br />

son adresse de base ;<br />

son adresse de fin ou sa longueur ;<br />

les différentes autorisations de lecture ou d'écriture ;<br />

et d'autres choses encore.<br />

Quand on décide d’accéder aux données ou aux instructions présentes dans un segment, ce descripteur sera chargé dans des<br />

registres du processeur (dont le fameux registre de base et le registre limite). Notre processeur pourra ainsi accéder à toutes les<br />

informations nécessaires pour gérer la protection mémoire et la traduction des adresse logiques en adresses physiques.<br />

Pour se simplifier la tache, les concepteurs de processeur et de système d'exploitation ont décide de regrouper ces descripteurs<br />

dans une portion de la mémoire, spécialement réservée pour l'occasion : la table des descripteurs de segment.<br />

Partage de segments<br />

www.siteduzero.com

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

Saved successfully!

Ooh no, something went wrong!