Notes d'assemblage de Windows 32 (1) : connaissances de base
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. Mode de fonctionnement du processeur 80x86
1.1 Mode réel
Aperçu du mode réel
Le mode réel est le premier mode de travail pris en charge par le processeur 80x86 et constitue également le mode de travail le plus basique. Le mode réel est principalement utilisé dans les premiers systèmes d'exploitation MS-DOS et dans d'autres environnements d'exploitation simples. En mode réel, le processeur a un accès direct à 1 Mo d'espace mémoire physique. Ce mode est entièrement compatible avec le fonctionnement du processeur 8086, d'où le nom de « mode réel ».
Fonctionnalités du mode réel
-
Restrictions d'espace d'adressage
- En mode réel, le processeur ne peut accéder qu'à 1 Mo d'espace mémoire (de 0x00000 à 0xFFFFF).
- L'espace mémoire est limité par le bus d'adresse de 20 bits.
-
Adresse de segment et adresse de décalage
- Le mode réel utilise la méthode segment:offset (segment) pour l'adressage de la mémoire.
- L'adresse du segment est multipliée par 16 (c'est-à-dire décalée de 4 bits vers la gauche) et ajoutée à l'adresse de décalage pour former une adresse physique de 20 bits.
- Par exemple, si l'adresse du segment est 0x1234 et l'adresse de décalage est 0x5678, l'adresse physique est : Adresse physique = (0x1234×16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8text{adresse physique} = (0x1234 fois 16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8 adresse physique = (0x1234×16)+0x5678=0x12340+0x5678=0x179B8
-
Aucune protection de la mémoire
- Le mode réel n'a pas de mécanisme de protection de la mémoire et le programme peut accéder arbitrairement à la totalité de l'espace mémoire de 1 Mo, y compris la zone du système d'exploitation et les zones d'autres programmes.
- Cela permet aux programmes d'interférer les uns avec les autres et d'entraîner facilement des pannes du système.
-
accès direct au matériel
- Le mode réel permet un accès direct aux périphériques matériels et aux ports d'E/S.
- En mode réel, les programmes peuvent interagir avec les périphériques matériels directement à l'aide d'instructions d'E/S telles que IN et OUT.
-
Interruptions et initialisation du processeur
- Le mode réel prend en charge les interruptions matérielles et logicielles, qui sont gérées à l'aide de l'Interrupt Vector Table (IVT).
- La table des vecteurs d'interruption est stockée dans la zone de mémoire la plus basse de 1 Ko (de 0x00000 à 0x003FF).
- Une fois le processeur allumé ou réinitialisé, il entrera automatiquement en mode réel et commencera à exécuter le code à partir de l'adresse 0xFFFF0.
-
Limitations du code exécutable
- La taille du segment de code exécutable en mode réel est limitée, généralement un segment de code peut atteindre 64 Ko (0x0000 à 0xFFFF).
Disposition de la mémoire en mode réel
En mode réel, l'agencement de la mémoire comprend généralement les parties suivantes :
-
Zone du BIOS
- La mémoire haut de gamme (de 0xF0000 à 0xFFFFF) est généralement utilisée pour stocker le code et les données du BIOS.
- À la mise sous tension ou à la réinitialisation, le processeur commence à exécuter le code du BIOS à 0xFFFF0.
-
Table vectorielle d'interruption
- La zone de mémoire la plus basse de 1 Ko (de 0x00000 à 0x003FF) stocke la table des vecteurs d'interruption.
- Chaque vecteur d'interruption occupe 4 octets (adresse de segment de 2 octets et adresse de décalage de 2 octets).
-
Systèmes d'exploitation et applications
- La zone mémoire restante est utilisée pour le code du système d'exploitation, le code d'application et les données.
1.2 Mode de protection
Aperçu
Le mode protégé est un mode de travail avancé introduit par le processeur 80x86. Par rapport au mode réel, il offre des fonctions de gestion et de protection de la mémoire plus puissantes. Le mode protégé a été introduit pour la première fois sur le processeur 80286 et a été étendu et amélioré sur les processeurs 80386 et ultérieurs.
Caractéristiques du mode protégé
-
Espace d'adressage mémoire étendu
- Le mode protégé prend en charge le bus d'adresses 24 bits ou 32 bits et peut accéder à 4 Go d'espace mémoire physique (sur 80386 et versions ultérieures).
- Les sélecteurs de segments et les descripteurs de segments sont utilisés pour la gestion de la mémoire, permettant une disposition et une gestion plus complexes de la mémoire.
-
protection de la mémoire
- Grâce aux descripteurs de segments et aux tables de pages, le mode protégé peut implémenter une protection de la mémoire pour empêcher les programmes d'accéder illégalement à la mémoire d'autres programmes ou systèmes d'exploitation.
- Prend en charge les segments de code et de données de différents niveaux de privilèges (niveau 0 à niveau 3) pour obtenir une isolation entre le mode utilisateur et le mode noyau.
-
Mécanisme de pagination
- Prend en charge le mécanisme de pagination et mappe les adresses virtuelles aux adresses physiques via des tables de pages pour améliorer encore les capacités de gestion de la mémoire.
- La taille de la page est généralement de 4 Ko, mais les grandes pages (telles que 4 Mo) sont également prises en charge.
-
Multitâche pris en charge par le matériel
- Fournit une commutation multitâche prise en charge par le matériel, y compris le segment d'état de tâche (TSS) et le registre de tâches (registre de tâches).
- Prend en charge la porte de tâches pour la commutation et la protection entre les tâches.
-
Gestion améliorée des interruptions et des exceptions
- En mode protégé, l'Interrupt Descriptor Table (IDT) est utilisée pour gérer les interruptions et la gestion des exceptions.
- IDT prend en charge les descripteurs de portes (Gate Descriptor), y compris les portes d'interruption, les portes d'interruption et les portes de tâches.
-
Mémoire virtuelle
- Prend en charge la mémoire virtuelle et implémente l'espace d'adressage virtuel via le mécanisme de pagination, permettant au programme d'utiliser un espace d'adressage plus grand que la mémoire physique réelle.
Gestion de la mémoire en mode protégé
-
Sélecteurs de segments et descripteurs de segments
- Chaque sélecteur de segment pointe vers un descripteur de segment, qui contient l'adresse de base du segment, la limite du segment et les attributs du segment (tels que les autorisations et le type).
- Les sélecteurs de segments et les descripteurs de segments sont gérés par la table de descripteurs globale (GDT) et la table de descripteurs locaux (LDT).
-
Mécanisme de pagination
- Le mécanisme de pagination divise l'adresse virtuelle en répertoire de pages (Page Directory), table de pages (Page Table) et cadre de page (Page Frame).
- Grâce au répertoire de pages et à la table de pages, les adresses virtuelles sont mappées aux adresses physiques pour assurer la protection et la gestion de la mémoire.
Application en mode protégé
Le mode protégé est largement utilisé dans les systèmes d'exploitation modernes, tels que Windows, Linux, Unix, etc. Ils utilisent les caractéristiques du mode protégé pour implémenter des fonctions avancées telles que le multitâche, le multi-utilisateur et la protection de la mémoire. Grâce au mode protégé, le système d'exploitation peut gérer efficacement les ressources matérielles et fournir un environnement d'exploitation stable et sûr.
Le mode protégé constitue le fondement des systèmes d'exploitation et des applications modernes, tirant pleinement parti des fonctionnalités avancées du processeur 80x86 pour améliorer la stabilité et la sécurité du système.
1.3 Mode virtuel 8086
Présentation du mode virtuel 8086
Le mode virtuel 8086 (Virtual 8086 Mode) est un mode spécial fourni par le processeur 80x86 en mode protégé, permettant au processeur d'exécuter des programmes 8086 comme s'ils étaient exécutés en mode réel. Ce mode est principalement utilisé pour la compatibilité ascendante, permettant aux anciennes versions des programmes DOS de s'exécuter sur des systèmes d'exploitation modernes tels que Windows et Linux sans quitter le mode protégé.
Caractéristiques du mode virtuel 8086
-
Compatibilité en mode réel
- Le mode virtuel 8086 permet au processeur de simuler l'environnement d'exploitation en mode réel et prend en charge le jeu d'instructions et l'espace d'adressage 8086.
- Le processeur peut exécuter 8 086 programmes en mode protégé tout en conservant les fonctionnalités et les avantages du mode protégé.
-
Mécanismes de pagination et de protection
- En mode virtuel 8086, le processeur peut toujours utiliser le mécanisme de pagination en mode protégé pour implémenter la mémoire virtuelle et la protection de la mémoire.
- Grâce à la table des pages, l'espace d'adressage en mode virtuel 8086 peut être mappé à la mémoire physique, assurant ainsi l'isolation et la protection de la mémoire.
-
Gestion des interruptions et des exceptions
- Le mode virtuel 8086 prend en charge la gestion des interruptions et des exceptions, qui peut être gérée via la table de descripteur d'interruption (IDT) en mode protégé.
- Les interruptions et les exceptions peuvent être gérées par le moniteur virtuel 8086 (généralement le noyau du système d'exploitation), garantissant ainsi la stabilité et la sécurité du système.
-
Prise en charge de la virtualisation matérielle
- Certains processeurs modernes offrent une technologie de virtualisation matérielle qui peut implémenter le mode virtuel 8086 plus efficacement.
- Par exemple, les technologies VT-x d'Intel et AMD-V d'AMD peuvent fournir une prise en charge de la virtualisation accélérée par le matériel et améliorer les performances.
Gestion de la mémoire en mode virtuel 8086
-
Segment : adressage décalé
- En mode 8086 virtuel, la méthode d'adressage mémoire est la même qu'en mode réel, en utilisant le mode segment : offset (segment).
- L'adresse de segment et l'adresse de décalage forment ensemble une adresse physique de 20 bits, qui peut accéder jusqu'à 1 Mo d'espace mémoire.
-
Mécanisme de pagination
- Le mode virtuel 8086 prend en charge le mécanisme de pagination, qui peut mapper l'adresse en mode réel de 20 bits à l'espace d'adressage virtuel en mode protégé.
- Grâce aux tables de pages, la protection et l'isolation de la mémoire peuvent être obtenues pour empêcher les programmes en mode virtuel 8086 d'accéder illégalement à d'autres zones de mémoire.
Application du mode virtuel 8086
-
Exécutez d’anciens programmes DOS
- Le mode virtuel 8086 est principalement utilisé pour exécuter des versions plus anciennes de programmes et d'applications DOS, offrant ainsi une compatibilité ascendante.
- Dans les systèmes d'exploitation modernes, le mode virtuel 8086 permet d'exécuter certains anciens programmes qui doivent être exécutés en mode réel.
-
Machines virtuelles et émulateurs
- Certaines machines virtuelles et émulateurs utilisent le mode virtuel 8086 pour prendre en charge les anciens systèmes d'exploitation et logiciels.
- Par exemple, des émulateurs tels que DOSBox simulent l'environnement DOS via le mode virtuel 8086, permettant aux utilisateurs d'exécuter des jeux et des applications DOS classiques.
Limites du mode virtuel 8086
-
espace d'adressage mémoire
- En mode virtuel 8086, le programme ne peut accéder qu'à 1 Mo d'espace d'adressage mémoire, qui est limité par le mode réel.
-
Surcharge de performances
- La mise en œuvre du mode virtuel 8086 nécessite la prise en charge du mode protégé, ce qui peut entraîner une certaine surcharge de performances.
- La gestion des interruptions et des exceptions nécessite l'intervention du moniteur virtuel 8086 (noyau du système d'exploitation), ce qui augmente la complexité du traitement.
-
Limites matérielles
- Tous les matériels ne prennent pas entièrement en charge le mode virtuel 8086 et certaines fonctionnalités matérielles peuvent ne pas être disponibles en mode virtuel 8086.
Résumer
Le mode virtuel 8086 est un mode spécial fourni par le processeur 80x86 en mode protégé, principalement pour une compatibilité ascendante avec les anciennes versions des programmes DOS. Le mode virtuel 8086 permet au processeur de simuler un environnement d'exploitation en mode réel en mode protégé tout en conservant les fonctionnalités et avantages du mode protégé. Ce mode est largement utilisé pour exécuter des logiciels, des machines virtuelles et des émulateurs existants.
2. Gestion de la mémoire Windows
2.1 Disposition de la mémoire du système d'exploitation DOS
La gestion de la mémoire du système d'exploitation DOS (Disk Operating System) repose principalement sur le modèle de mémoire en mode réel du processeur 8086/8088. L'espace d'adressage mémoire en mode réel est de 1 Mo, de 0x00000 à 0xFFFFF. Cet espace d'adressage de 1 Mo est divisé en plusieurs zones principales, chacune ayant un objectif spécifique. Ce qui suit est une introduction détaillée à la disposition de la mémoire du système d'exploitation DOS.
modèle de mémoire en mode réel
En mode réel, l'adresse mémoire est accessible en combinant l'adresse de segment et l'adresse de décalage en une adresse physique de 20 bits. L'adresse du segment est décalée vers la gauche de 4 bits et l'adresse de décalage est ajoutée pour former l'adresse physique réelle.
disposition de la mémoire
La disposition de 1 Mo d'espace mémoire en mode réel est à peu près la suivante :
-
Table des vecteurs d'interruption (IVT) : 0x00000 - 0x003FF
- Occupe 1 Ko (256 vecteurs, 4 octets chacun).
- Stockez l'adresse d'entrée et les informations associées de la routine de service d'interruption.
-
Zone de données du BIOS (BDA) : 0x00400 - 0x004FF
- Environ 256 octets.
- Stocke les paramètres du système et du périphérique matériel, tels que les informations sur le disque dur, le port série, le port parallèle, etc.
-
Mémoire héritée (mémoire conventionnelle) : 0x00500 - 0x9FFFF
- 640 Ko, principalement utilisé pour les systèmes d'exploitation DOS, les applications DOS et les programmes de mémoire résidente (TSR).
- Peut être utilisé comme code de programme, données, pile, etc.
-
Tampon d'affichage : 0xA0000 - 0xBFFFF
- Zone mémoire utilisée par la carte graphique.
- 0xA0000 - 0xAFFFF : 64 Ko, généralement utilisé dans le mode graphique des cartes graphiques EGA/VGA.
- 0xB0000 - 0xB7FFF : 32 Ko, généralement utilisé pour les adaptateurs d'affichage monochromes (MDA).
- 0xB8000 - 0xBFFFF : 32 Ko, généralement utilisé pour l'affichage de texte en couleur (mode texte CGA, EGA, VGA).
-
Zone de données étendue du BIOS (EBDA) : 0xC0000 - 0xC7FFF
- Environ 32 Ko, qui stocke certaines données étendues du BIOS et le code BIOS de l'adaptateur.
-
Zone d'extension du BIOS : 0xC8000 - 0xEFFFF
- Principalement utilisé pour le BIOS et les pilotes de cartes d'extension (telles que les adaptateurs réseau, les contrôleurs SCSI, etc.).
-
BIOS système : 0xF0000 - 0xFFFFF
- 64 Ko, stocke le code du BIOS système.
- Fournit l'initialisation de base du système, la routine de service d'interruption, le contrôle du matériel et d'autres fonctions.
2.2 Mécanisme d'adressage de la mémoire 80386
Le processeur Intel 80386 a introduit un mécanisme d'adressage de la mémoire plus avancé, offrant des capacités de gestion et de protection de la mémoire plus puissantes que ses prédécesseurs. Le 80386 prend en charge deux modes d'adressage mémoire principaux :mode réeletmode protégé . En mode protégé, un mécanisme de pagination est également introduit pour améliorer encore les capacités de gestion de la mémoire. Ce qui suit est une introduction détaillée :
1. Mode réel
En mode réel, le processeur 80386 possède la même méthode d'adressage mémoire que le 8086/8088. Il utilise un bus d'adresse de 20 bits et peut accéder à 1 Mo d'espace mémoire. L'adresse est calculée à partir de l'adresse du segment et de l'adresse de décalage :
- adresse de segment: Décalage vers la gauche de 4 bits.
- adresse de décalage: Ajoutée au résultat du décalage vers la gauche de l'adresse du segment, l'adresse physique de 20 bits est obtenue.
物理地址 = (段地址 << 4) + 偏移地址
2. Mode protégé
Le mode protégé est le mode de fonctionnement principal du processeur 80386, qui offre des fonctions améliorées de protection et de gestion de la mémoire. L'adressage mémoire en mode protégé implique deux couches de mécanismes :mécanisme de segmentationetMécanisme de pagination。
2.1 Mécanisme de segmentation
En mode protégé, le processeur 80386 utilise le sélecteur de segment et le descripteur de segment pour gérer les segments. Les descripteurs de segments sont stockés dans la table de descripteurs globale (GDT) ou la table de descripteurs locaux (LDT).
-
sélecteur de segments: 16 bits, dont trois champs :
- indice: 13 bits, précise la position du descripteur de segment en GDT ou LDT.
- TI (indicateur de table): 1 bit, indiquant s'il faut utiliser GDT (0) ou LDT (1).
- RPL (niveau de privilège demandé): 2 bits, précisant le niveau de privilège demandé.
-
descripteur de segment: 8 octets, dont les champs suivants :
- Adresse de base: 32 bits, adresse de début du segment.
- Limite de segment (Limite): 20 bits, taille du segment.
- Droits d'accès et propriétés: 12 bits, décrivant le type de segment, le niveau de privilège, etc.
Le calcul de l'adresse linéaire dans le cadre du mécanisme de segmentation est le suivant :
线性地址 = 段基址 + 偏移地址
2.2 Mécanisme de radiomessagerie
Le mécanisme de pagination est une autre méthode de gestion de la mémoire fournie par le processeur 80386 en mode protégé. Il réalise la virtualisation et la protection de la mémoire en convertissant les adresses linéaires en adresses physiques. Le mécanisme de pagination implique des répertoires de pages, des tables de pages et des cadres de pages.
- répertoire de pages: Contient des entrées de répertoire de pages (PDE), chaque PDE pointe vers une table de pages.
- tableau des pages: Contient des entrées de table de pages (PTE), chaque PTE pointe vers un cadre de page.
- cadre de page: Le bloc de mémoire physique réel, généralement 4 Ko.
La traduction d'adresse du mécanisme de pagination est la suivante :
- Les adresses linéaires sont divisées en trois parties : répertoire, table et décalage intra-page.
- La section répertoire indexe le répertoire des pages pour trouver le PDE correspondant.
- La section table indexe la table des pages pour trouver le PTE correspondant.
- Le décalage intra-page est ajouté à l'adresse de base du cadre de page pour obtenir l'adresse physique.
物理地址 = 页帧基址 + 页内偏移
Diagramme schématique du mécanisme de pagination :
+----------------+----------------+----------------+
| 页目录(10位) | 页表(10位) | 页内偏移(12位)|
+----------------+----------------+----------------+
3. 80386 Unité de gestion de mémoire (MMU)
La MMU (Memory Management Unit) du 80386 est responsable de la segmentation et de la traduction des adresses de pagination, et implémente la protection de la mémoire.
-
Registre CR0: Registre de contrôle pour activer/désactiver le mode protégé et la pagination.
- Bit PE (activation de la protection): Activer le mode protégé.
- Bit PG (activation de la pagination): Activer la pagination.
-
Registre CR3: L'adresse de base du répertoire de la page de stockage.
-
Registre CR2: Stocke l'adresse linéaire du dernier défaut de page.
4. Mécanisme de protection
En mode protégé, le processeur 80386 fournit une variété de mécanismes de protection pour assurer la sécurité de la mémoire et du système :
- Niveaux de privilège : De 0 à 3, il y a quatre niveaux au total, le niveau 0 étant le plus élevé. Contrôlez l’accès au code et aux données.
- protection des segments: Implémentez la vérification des limites de segment et le contrôle d'accès via les champs d'attribut dans le descripteur de segment.
- protection des pages: Grâce au champ d'attribut dans le PTE, le contrôle des autorisations de lecture, d'écriture et d'exécution de la page est réalisé.
2.3 Disposition de la mémoire Windows
1. Mémoire virtuelle
Le système d'exploitation Windows utilise la gestion de la mémoire virtuelle, qui combine la mémoire physique (RAM) et les fichiers de mémoire virtuelle (fichiers d'échange) sur le disque dur pour fournir un espace d'adressage virtuel indépendant pour chaque processus. Chaque processus dispose généralement de 4 Go d'espace d'adressage virtuel (systèmes 32 bits), dont 2 Go sont utilisés par les programmes en mode utilisateur et 2 Go sont utilisés par le mode noyau. Les systèmes 64 bits disposent d'un espace d'adressage virtuel plus grand.
2. Disposition de l'espace d'adressage virtuel
L'espace d'adressage virtuel est divisé en régions en mode utilisateur et en mode noyau :
espace d'adressage du mode utilisateur
- 0x00000000 - 0x7FFFFFFF: Espace d’adressage en mode utilisateur, destiné aux applications.
- Tas: Zone d'allocation de mémoire dynamique, l'application alloue et libère de la mémoire au moment de l'exécution.
- Empiler: Chaque thread a sa propre pile pour les appels de fonction et les variables locales.
- La memoire partagée: Segments de données partagés entre différents processus.
espace d'adressage en mode noyau
- 0x80000000 - 0xFFFFFFFF: espace d'adressage en mode noyau, utilisé par le noyau et les pilotes du système d'exploitation.
- Code et données du noyau: Le code et les données globales du noyau du système d'exploitation.
- Cache système: utilisé pour la mise en cache du système de fichiers afin d'améliorer les performances d'accès aux fichiers.
- pilote de périphérique: Code et données du conducteur.
3. Pagination de la mémoire
Windows utilise un mécanisme de pagination pour gérer la mémoire et convertir les adresses virtuelles en adresses physiques. L'unité de base de la pagination est une page, généralement 4 Ko.
Structure du tableau des pages
- Répertoire des pages: Contient l'entrée du répertoire de pages (PDE), pointant vers la table des pages.
- Tableau des pages: contient des entrées de table de pages (PTE) qui pointent vers des pages de mémoire physique réelles.
4. Unité de gestion de la mémoire (MMU)
L'unité de gestion de la mémoire (MMU) du processeur est chargée de convertir les adresses virtuelles en adresses physiques, d'effectuer le remplacement des pages et la protection de la mémoire. Le système d'exploitation Windows implémente les fonctions suivantes via la MMU :
- traduction d'adresse: mappe les adresses virtuelles aux adresses physiques.
- protection de la mémoire: Contrôler les autorisations d'accès à la page (lecture, écriture, exécution).
- Remplacement de pages: échangez les pages rarement utilisées vers le fichier d'échange du disque dur pour libérer de la mémoire physique.
5. Protection de la mémoire
Le système d'exploitation Windows protège la mémoire via les mécanismes suivants :
- Niveau privilège: Assurez-vous que les programmes en mode utilisateur ne peuvent pas accéder directement à la mémoire en mode noyau.
- Autorisations des pages: Contrôler le type d'accès (lecture, écriture, exécution) de chaque page.
- Contrôle d'accès: Le noyau du système d'exploitation définit les autorisations d'accès pour empêcher tout accès non autorisé à la mémoire.
6. Allocation de mémoire
Windows utilise plusieurs stratégies et structures de données pour l'allocation de mémoire :
- allocateur de pagination: Gérer l'allocation de pagination et la libération de la mémoire virtuelle.
- Gestionnaire de tas: Fournit une allocation et une désallocation de mémoire efficaces pour les applications.
- allocateur de mémoire du noyau: gère la mémoire en mode noyau, y compris l'allocateur de pool et le pool non paginé.
7. API de gestion de la mémoire
Windows fournit un ensemble d'API de gestion de la mémoire à utiliser par les applications et le système :
- VirtualAlloc/VirtualFree: allouer et libérer de la mémoire virtuelle.
- Allouer/libérer le tas: Allouer et libérer de la mémoire sur le tas.
- Alloc global/GlobalFree: Allouer et libérer des blocs de mémoire globale.
- Allocation locale/Libération locale: allouer et libérer des blocs de mémoire locale.
8. Fichier de pages
Windows utilise le fichier d'échange (Pagefile.sys) dans le cadre de la mémoire virtuelle. Lorsque la mémoire physique est insuffisante, les pages rarement utilisées sont échangées dans le fichier d'échange. L'emplacement et la taille du fichier d'échange sont configurables par l'utilisateur.
3. Protection des privilèges Windows
3.1 80386 interruptions et exceptions
1. Classification des interruptions et des exceptions
Les interruptions et exceptions peuvent être divisées dans les catégories suivantes :
- Interruptions matérielles: Envoyé par des périphériques externes, tels que clavier, souris, disque dur, etc.
- Interruptions logicielles: Transmis par logiciel
INT
La commande se déclenche. - Des exceptions: Déclenché par des erreurs ou des conditions particulières détectées par le processeur, telles que des erreurs de division par zéro, des défauts de page, etc.
2. Table vectorielle d'interruption (IVT)
Le processeur 80386 utilise une table de vecteurs d'interruption pour gérer les interruptions et les exceptions. L'IVT est une table de 256 entrées, chacune occupant 4 octets, stockant l'adresse d'un gestionnaire d'interruption ou d'exception. L'adresse de base de l'IVT est stockée dans l'IDTR (Interrupt Descriptor Table Register).
3. Tableau des descripteurs d'interruption (IDT)
En mode protégé, le processeur 80386 utilise une table de descripteurs d'interruption (IDT) pour stocker les gestionnaires d'interruptions et d'exceptions. IDT contient des descripteurs de porte d'interruption, de porte de piège et de porte de tâche, chaque descripteur occupe 8 octets.
- Porte d'interruption: Utilisé pour les interruptions matérielles et logicielles, effaçant automatiquement IF (indicateur d'interruption).
- Porte piège: Utilisé pour la gestion des exceptions, IF n'est pas effacé.
- Porte des tâches: Utilisé pour changer de tâche.
L'adresse de base et les limites de l'IDT sont stockées dans IDTR.
4. Interrompre le flux de traitement
Lorsqu'une interruption ou une exception se produit, le processeur 80386 effectue les étapes suivantes :
- enregistrer le contexte: Enregistrez le CS (Code Segment Register), l'EIP (Instruction Pointer Register) et l'EFLAGS (Flags Register) actuels dans la pile.
- Trouver IDT: recherchez le descripteur correspondant dans l'IDT en fonction du numéro d'interruption ou d'exception.
- Vérifier les autorisations : Vérifiez le niveau de privilège actuel (CPL) et le niveau de privilège cible (DPL) pour garantir la conversion des autorisations légales.
- passer au gestionnaire : Chargez les nouveaux CS et EIP, passez au gestionnaire d'interruption ou d'exception.
- Gérer les interruptions ou les exceptions:Exécuter le code du gestionnaire.
- restaurer le contexte:passer
IRET
L'instruction restaure CS, EIP et EFLAGS et revient à l'état avant l'interruption ou l'exception.
5. Type d'exception
Le processeur 80386 prend en charge plusieurs exceptions, chaque exception a des codes d'erreur et des méthodes de traitement différents :
- Défauts: Une exception récupérable. Lorsque le gestionnaire revient, l'instruction qui a provoqué l'exception sera réexécutée.
- Pièges: Une exception utilisée pour le débogage ou le traçage. Lorsque le gestionnaire revient après que l'exception se produit, l'instruction suivante continue d'être exécutée.
- Abandonne: Erreur grave, généralement irrécupérable.
Les exceptions courantes incluent :
- Erreur de division: Levé lorsque le diviseur est nul.
- Une seule étape: Utilisé pour le débogage, déclenché lors de l'exécution d'une seule étape.
- Point d'arrêt: déclenché lors du débogage des points d'arrêt.
- Débordement:utiliser
INTO
Levé lorsque l'instruction détecte un débordement. - Plage LIÉE dépassée: déclenché lorsque l'accès au tableau sort des limites.
- Code d'opération invalide: Levé lors de l'exécution d'une instruction illégale.
- Appareil non disponible: déclenché lorsque le coprocesseur n'est pas disponible.
- Double faute: Une exception se produit à nouveau lors de la gestion d'une exception.
- Dépassement du segment du coprocesseur: Levé par les opérations du coprocesseur.
- TSS invalide: déclenché lorsque le segment d'état de la tâche est illégal.
- Segment absent: déclenché lors de l'accès à un segment inexistant.
- Défaut de pile: déclenché lorsqu'une erreur d'opération de pile se produit.
- Défaut de protection générale: Déclenché lorsque les règles de protection sont violées.
- Défaut de page: déclenché lorsque l'opération de radiomessagerie est anormale.
6. Gestionnaires d'interruptions et d'exceptions
Les gestionnaires d'interruptions et d'exceptions sont des routines spéciales utilisées pour gérer des interruptions ou des exceptions spécifiques. Ils sont généralement fournis par le système d'exploitation et sont responsables de la restauration de l'état du système, de l'enregistrement des informations sur les erreurs, de l'exécution des opérations de récupération nécessaires ou de la réponse aux interruptions.
7. Priorité aux interruptions et masquage
Le processeur 80386 prend en charge les mécanismes de priorité et de masquage des interruptions, et gère la priorité et le masquage des interruptions matérielles via le PIC (Programmable Interrupt Controller). Les interruptions de haut niveau peuvent interrompre le traitement des interruptions de bas niveau pour garantir une réponse rapide aux événements critiques.
3.2 Mécanisme de protection du 80386
1. Protection des segmentations
Le processeur 80386 utilise un mécanisme de segmentation pour gérer la mémoire. Chaque segment possède un descripteur qui contient l'adresse de base, les limites et les droits d'accès du segment. La protection par segmentation garantit que les processus ne peuvent accéder qu'aux zones de mémoire pour lesquelles ils sont autorisés.
descripteur de segment
Les descripteurs de segments sont stockés dans la table des descripteurs globaux (GDT) et la table des descripteurs locaux (LDT). Chaque descripteur contient les informations suivantes :
- Adresse de base: L'adresse de départ du segment.
- Limite: La taille du segment, indiquant l'adresse de fin du segment.
- Type (Type) et niveau de privilège (DPL): Le type de segment (segment de code, segment de données, segment système) et les droits d'accès.
- Bit de présence de segment (P): Indique si le segment est en mémoire.
Mise en œuvre de la protection contre la segmentation
Lors de l'accès à la mémoire, le processeur recherche le descripteur de segment en fonction du sélecteur de segment et effectue les vérifications suivantes :
- Vérification de l'adresse de base et des limites: assurez-vous que l'adresse d'accès se trouve dans la plage du segment.
- Vérification des autorisations: assurez-vous que les droits d'accès correspondent au type et au niveau de privilège dans le descripteur.
2. Protection de radiomessagerie
Le mécanisme de pagination affine encore la gestion de la mémoire, chaque page ayant ses propres droits d'accès. Le mécanisme de protection contre la pagination est implémenté via des répertoires de pages et des tables de pages.
Répertoires de pages et tables de pages
- Répertoire des pages: Contient l'entrée du répertoire de pages (PDE), pointant vers la table des pages.
- Tableau des pages: contient des entrées de table de pages (PTE) qui pointent vers des pages de mémoire physique réelles.
Chaque entrée de table de pages contient les informations suivantes :
- Adresse de base de la page: L'adresse de départ de la page de mémoire physique.
- Bit de présence (P): Indique si la page est en mémoire.
- Bit de lecture/écriture (R/W): Indique si la page est accessible en écriture.
- Bit utilisateur/superutilisateur (U/S): autorisations d'accès à la page.
Mise en œuvre de la protection de pagination
Lors de l'accès à la mémoire, le processeur effectue les vérifications suivantes :
- Vérification de l'existence des pages: Vérifiez si la page est en mémoire, sinon déclenchez un défaut de page (Page Fault).
- vérification de lecture/écriture: Vérifiez si la page est accessible en écriture. Si vous essayez d'écrire sur une page non accessible en écriture, un défaut de protection sera déclenché.
- Vérification utilisateur/superutilisateur : Vérifiez les autorisations d'accès pour vous assurer que le code en mode utilisateur ne peut pas accéder aux pages en mode noyau.
3. Niveau privilège
Le processeur 80386 prend en charge 4 niveaux de privilèges (Privilege Levels), de 0 à 3. Plus le niveau est bas, plus le privilège est élevé.
- Niveau de privilège 0 (anneau 0): Le niveau de privilège le plus élevé, généralement utilisé dans le noyau du système d'exploitation.
- Niveau de privilège 1 (Ring 1)etNiveau privilège 2 (anneau 2): Niveau de privilège intermédiaire, rarement utilisé.
- Niveau privilège 3 (Ring 3): niveau de privilège le plus bas, généralement utilisé par les applications en mode utilisateur.
Mise en œuvre de niveaux de privilèges
Les niveaux de privilèges sont mis en œuvre via les mécanismes suivants :
- Niveau de privilège des segments de code (CPL): Le niveau de privilège du code en cours d’exécution.
- Niveau de privilège du segment de données (DPL): Le niveau de privilège du segment de données, qui détermine quels CPL peuvent accéder au segment.
- Demander un niveau de privilège (RPL): Le niveau de privilège du sélecteur de segment, indiquant l'autorisation d'accès demandée.
Lors de l'exécution d'une opération d'accès, le processeur vérifie le CPL, le DPL et le RPL pour garantir la conformité aux règles de niveau de privilège. Si cela ne correspond pas, une Défaut Général de Protection est déclenché.
4. Descripteurs de segments et de portes du système
Le processeur 80386 prend en charge les descripteurs de segments et de portes du système pour la commutation de tâches et la gestion des interruptions.
segment de système
- Segment d'état de la tâche (TSS): Contient des informations contextuelles sur la tâche et est utilisé pour le changement de tâche.
- Table de descripteurs locaux (LDT): contient des descripteurs de segments spécifiques à la tâche.
descripteur de porte
- Porte d'interruption: Utilisé pour le traitement des interruptions, en passant au gestionnaire d'interruption.
- Porte piège: Utilisé pour la gestion des exceptions et ne masque pas les interruptions.
- Porte des tâches: Utilisé pour le changement de tâche, le changement de tâche via TSS.
5. Changement de tâche
Le processeur 80386 prend en charge la commutation de tâches matérielles, qui est implémentée via le segment d'état des tâches (TSS). Le changement de tâche peut être déclenché par des interruptions, des exceptions ou des portes de tâches.
Segment d'état de la tâche (TSS)
Le TSS contient l'état des registres de la tâche, les registres de segments, le pointeur de pile et les liens de tâche. Lors du changement de tâche, le processeur enregistre l'état de la tâche en cours dans le TSS et charge l'état de la nouvelle tâche.
Processus de changement de tâche
- Enregistrer l'état actuel de la tâche: Enregistrez les registres et les registres de segments de la tâche en cours dans TSS.
- Charger le nouveau statut de la tâche: Charger les registres et les registres de segments à partir du TSS de la nouvelle tâche.
- Mettre à jour le registre des tâches (TR): Pointe vers le TSS de la nouvelle tâche.
6. Gestion des interruptions et des exceptions
La gestion des interruptions et des exceptions est une partie importante du mécanisme de protection du processeur 80386. Les interruptions et les exceptions sont gérées via la table de descripteurs d'interruption (IDT), et des contrôles d'autorisation et des changements de contexte sont effectués pendant le traitement.
Procédures de gestion des interruptions et des exceptions
- enregistrer le contexte: Enregistrez les CS, EIP et EFLAGS actuels dans la pile.
- Trouver IDT: Recherchez le descripteur correspondant dans IDT en fonction du numéro d'interruption ou d'exception.
- Vérification des autorisations : Vérifiez CPL et DPL pour garantir la conversion des autorisations légales.
- passer au gestionnaire: Chargez les nouveaux CS et EIP et exécutez le gestionnaire.
- restaurer le contexte:passer
IRET
Restaurez CS, EIP et EFLAGS et revenez à l'état avant l'interruption ou l'exception.
3.3 Mécanisme de protection de Windows
1. Mode utilisateur et mode noyau
Le système d'exploitation Windows divise le mode d'exécution du processeur en mode utilisateur (User Mode) et mode noyau (Kernel Mode) :
- mode utilisateur: Exécute une application avec un accès restreint et sans accès direct aux structures de données matérielles ou du noyau.
- mode noyau: Exécute les composants principaux du système d’exploitation et les pilotes de périphériques avec un accès complet et peut exécuter des instructions privilégiées.
Basculer entre le mode utilisateur et le mode noyau
La commutation entre le mode utilisateur et le mode noyau est généralement implémentée via des appels système. L'application demande les services du noyau en appelant l'API système, et le système d'exploitation fait passer la demande en mode noyau pour le traitement.
2. Protection de la mémoire
Mémoire virtuelle
Windows utilise un mécanisme de mémoire virtuelle pour fournir à chaque processus un espace d'adressage indépendant. Ce mécanisme empêche les processus d'accéder directement à la mémoire des autres, améliorant ainsi la sécurité et la stabilité du système.
- tableau des pages: Chaque processus possède une table de pages indépendante qui mappe les adresses virtuelles aux adresses physiques.
- échange de pages: Lorsque la mémoire physique est faible, le système d'exploitation échange les pages rarement utilisées vers le fichier d'échange sur le disque dur.
segment de mémoire
Windows utilise des segments de mémoire pour diviser différents types de données et de code, et chaque segment dispose de droits d'accès et de mécanismes de protection différents. Par exemple, le segment de code est en lecture seule, tandis que le segment de données est en lecture-écriture.
3. Contrôle d'accès
Le système d'exploitation Windows utilise la liste de contrôle d'accès (ACL) pour gérer les droits d'accès des utilisateurs et des processus aux ressources.
Identifiant de sécurité (SID)
Chaque utilisateur, groupe et ordinateur possède un identifiant de sécurité (SID) unique qui les identifie.
Liste de contrôle d'accès (ACL)
Chaque objet (tel qu'un fichier, un répertoire, une clé de registre, etc.) possède une liste de contrôle d'accès, qui contient un ensemble d'éléments de contrôle d'accès (ACE) qui définissent les droits d'accès des différents utilisateurs et groupes à l'objet.
4. Gestion des privilèges
Windows contrôle ce que les processus et les utilisateurs peuvent faire grâce à la gestion des privilèges. Certains privilèges ne sont accordés qu'à des groupes d'utilisateurs spécifiques (tels que les administrateurs), comme l'installation des pilotes, l'accès aux journaux système, etc.
stratégie de sécurité
Windows fournit une série de politiques de sécurité qui peuvent configurer le contrôle de compte d'utilisateur (UAC), les politiques de mot de passe, les politiques d'audit, etc. pour améliorer la sécurité du système.
5. Gestion des interruptions et des exceptions
Les systèmes d'exploitation Windows utilisent des mécanismes de gestion des interruptions et des exceptions pour gérer les interruptions matérielles, les interruptions logicielles et les exceptions du processeur.
Gestion des interruptions
Le gestionnaire d'interruptions (Interrupt Service Routine, ISR) est chargé de gérer les interruptions matérielles et de garantir que les périphériques externes peuvent répondre à temps.
Gestion des exceptions
Les gestionnaires d'exceptions gèrent les exceptions du processeur, telles que les erreurs de division par zéro, les défauts de page, etc., pour garantir que le système peut prendre les mesures de récupération appropriées lorsque des exceptions se produisent.
6. Multitâche
Windows permet à plusieurs processus et threads de s'exécuter en même temps via le mécanisme multitâche. Le système d'exploitation utilise un planificateur pour gérer l'exécution des processus et des threads et garantir que les ressources système sont allouées équitablement.
Planification des discussions
Windows utilise un algorithme de planification des priorités pour allouer des tranches de temps CPU en fonction de la priorité et de l'état du thread (tel que prêt, en attente, en cours d'exécution, etc.).
isolation des processus
Chaque processus dispose d'un espace d'adressage virtuel et de ressources indépendants, empêchant un processus d'affecter le fonctionnement d'un autre processus et améliorant la stabilité du système.
7. Fonctionnalités de sécurité
Windows fournit une série de fonctionnalités de sécurité, telles que la prévention de l'exécution des données (DEP), la randomisation de la disposition de l'espace d'adressage (ASLR), etc., pour améliorer les capacités de protection du système.
Prévention de l'exécution des données (DEP)
DEP empêche l'exécution de code dans le segment de données en marquant certaines zones de mémoire comme non exécutables grâce à une combinaison de matériel et de logiciels.
Randomisation de la disposition de l'espace d'adressage (ASLR)
ASLR randomise l'espace d'adressage mémoire d'un processus, ce qui rend plus difficile l'exploitation des vulnérabilités par les attaquants.