diff --git a/OS/Images/descriptor.png b/OS/Images/descriptor.png new file mode 100644 index 0000000..affd3b4 Binary files /dev/null and b/OS/Images/descriptor.png differ diff --git a/OS/Images/privileges.png b/OS/Images/privileges.png new file mode 100644 index 0000000..cf108a5 Binary files /dev/null and b/OS/Images/privileges.png differ diff --git a/OS/Images/register_segment.png b/OS/Images/register_segment.png new file mode 100644 index 0000000..081729a Binary files /dev/null and b/OS/Images/register_segment.png differ diff --git a/OS/Images/rings.png b/OS/Images/rings.png new file mode 100644 index 0000000..ccd2d69 Binary files /dev/null and b/OS/Images/rings.png differ diff --git a/OS/Images/segments.png b/OS/Images/segments.png new file mode 100644 index 0000000..9c4c9b7 Binary files /dev/null and b/OS/Images/segments.png differ diff --git a/OS/Images/tables.png b/OS/Images/tables.png new file mode 100644 index 0000000..dab26de Binary files /dev/null and b/OS/Images/tables.png differ diff --git a/OS/cours.md b/OS/cours.md index 71f0c9b..9c0cda0 100644 --- a/OS/cours.md +++ b/OS/cours.md @@ -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... + +

+ +

+ +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. + +

+ +

+ +## 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 + +

+ +

+ +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 + +

+ +

+ +- 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 n’avait qu’un seul niveau (ring 0) +- mode protégé introduit des anneaux (ring level) +- permet d’isoler des composants logiciels de niveau + - de confidentialité différents + - d’intégrité différents + +

+ +

+ +## 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 + +

+ +

+ +## 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 d’une 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 n’utilisent 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 +