This commit is contained in:
Béranger 2021-10-04 16:23:08 +02:00
parent 33887e97ec
commit d2218d9e5d
7 changed files with 99 additions and 0 deletions

BIN
OS/Images/descriptor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

BIN
OS/Images/privileges.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
OS/Images/rings.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
OS/Images/segments.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
OS/Images/tables.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

View file

@ -244,8 +244,106 @@ _Un exemple : DosBox_
# Segmentation
## Gestion mémoire du mode protégé
En mode protégé, on a un espace mémoire en 32 bits, ce qui engendre un espace linéaire de 32 bits => $2^32$ <=> 4Gb. Pendant un temps supérieur à la RAM installée. On va segmenter cet espace, et ainsi mettre en place un adressage relatif au début d'un segment(adresse logique).
## La segmentation
Il s'agit donc d'une prolongation du principe de segments du mode réel. On a plusieurs types de modèles, _flat/protected_ et _flat/multiy-segment_. Chaque segment a des propriétés de type, de taille et de droits.
Avec cette segmentation on peut réellement découper la mémoire et attribuer certaines propriétés à ces segments de mémoire. On peut donc créer des segments read only, read write, execution...
<p align="center">
<img src="./Images/segments.png">
</p>
Pour faciliter ce fonctionnement, on met en place une table GDT - Global Descriptor Table - par coeur de CPU. Cela permet de faciliter l'accès à des sélecteurs de segments et des descripteurs de segments. Les descripteurs contiennent les informations sur le type de données écrites dans la mémoire et leurs droits associés, tandis que les sélecteur continnent les adresses.
<p align="center">
<img src="./Images/tables.png">
</p>
## Les sélecteurs de segments
Ils permettent l'accès à un descripteur donné. Chaque sélecteur permet de définir :
- Un niveau de privilège
- Une table (locale ou globale)
- Un indice de descripteur dans cette table
<p align="center">
<img src="./Images/register_segment.png">
</p>
Les sélecteurs de segments sont en général **CS, DS, SS** qui pointent vers une table GDTR en mémoire qui elle contient les descripteurs de segments.
## Descripteur de segment
Ils contiennent toutes les informations relatives auc segments :
- base et limite
- type de segment
- code (X,RX), data (R,W)
- système : TSS, Task Gate, Interrupt Gate, Call Gate
<p align="center">
<img src="./Images/descriptor.png">
</p>
- Base : Début du segment
- Limite : Taille - 1, dernier octet accessible
- Granularité, on l'utilise pour multiplier nos bits de limite et ainsi pouvoir arriver à 4GB.
# Niveaux de privilèges
- mode réel navait quun seul niveau (ring 0)
- mode protégé introduit des anneaux (ring level)
- permet disoler des composants logiciels de niveau
- de confidentialité différents
- dintégrité différents
<p align="center">
<img src="./Images/rings.png">
</p>
## Identification du niveau de privilèges
- CPL, Current Privilege Level, contenu dans CS
- RPL - Requestor Privilege Level, au niveau du sélecteur
- DPL Descriptor Privilege Level, au niveau du descripteur
## Changement de niveau de privilèges
- On ne peut accéder à un segment de données plus privilégié
- On ne peut charger un descripteur de code qu'à niveau de privilège équivalent
- Aussi bien plus faible que plus privilégié
- Passer par des call gate ou interrupt gate
<p align="center">
<img src="./Images/privileges.png">
</p>
## En résumé
Des descripteurs sécurisants
- les niveaux de privilèges isolent les composants : Qui ?
- les bases et limites aussi à leur manière : Où/Combien ?
- les attributs également (read, write, ...) : Quoi/Comment ?
Du point de vue de la sécurité
- simulation dune architecture harvard (contre von Neumann)
- imaginez un descripteur par buffer ? anti-overflow
- Linux Kernel PaX protection : SEGMEXEC
_https://pax.grsecurity.net/docs/segmexec.txt_
Et pourtant ...
- les OS modernes nutilisent pas la segmentation (modèle flat)
- quasiment disparue en 64 bits
- basent leur sécurité sur la pagination
# Interruptions et Exceptions
# Pagination
@ -253,3 +351,4 @@ _Un exemple : DosBox_
# Composants d'un OS
# Conclusions