Article de reference

Défaut de protection générale

( Learn how and when to remove this message ) Une erreur de protection générale ( GPF ) dans les architectures de jeu d'instructions x86 (ISA) est une erreur (un type d' interru...

(Learn how and when to remove this message)

Une erreur de protection générale ( GPF ) dans les architectures de jeu d'instructions x86 (ISA) est une erreur (un type d' interruption ) initiée par les mécanismes de protection définis par ISA en réponse à une violation d'accès causée par un code en cours d'exécution, soit dans le noyau , soit dans un programme utilisateur. Le mécanisme est décrit pour la première fois dans les manuels et les fiches techniques Intel pour le processeur Intel 80286 , qui a été introduit en 1983 ; il est également décrit dans la section 9.8.13 du manuel de référence du programmeur Intel 80386 de 1986. Une erreur de protection générale est implémentée sous la forme d'une interruption (numéro de vecteur 13 (0Dh)). Certains systèmes d'exploitation peuvent également classer certaines exceptions non liées aux violations d'accès, telles que les exceptions de code d'opération illégales , comme des erreurs de protection générales, même si elles n'ont rien à voir avec la protection de la mémoire. Si un processeur détecte une violation de protection, il arrête d'exécuter le code et envoie une interruption GPF. Dans la plupart des cas, le système d'exploitation supprime le processus défaillant de la file d'attente d'exécution, signale l'utilisateur et continue d'exécuter d'autres processus. Si, toutefois, le système d'exploitation ne parvient pas à détecter l'erreur de protection générale, c'est-à-dire qu'une autre violation de protection se produit avant que le système d'exploitation ne revienne de l'interruption GPF précédente, le processeur signale une double erreur , arrêtant le système d'exploitation. Si une autre erreur ( triple erreur ) se produit, le processeur est incapable de récupérer ; depuis le 80286, le processeur entre dans un état d'arrêt spécial appelé « Shutdown », qui ne peut être quitté que par une réinitialisation matérielle . L' IBM PC AT , le premier système compatible PC à contenir un 80286, dispose d'un matériel qui détecte l'état Shutdown et réinitialise automatiquement le processeur lorsqu'il se produit. Tous les descendants du PC AT font de même, donc dans un PC, une triple erreur provoque une réinitialisation immédiate du système.

Comportement spécifique

Microsoft Windows

Sous Microsoft Windows , la faille de protection générale se présente avec un langage varié, selon la version du produit :

Sous Windows 95, 98 et Me, il existe un autre message d'erreur, utilisé principalement avec les programmes Windows 3.x : « Une erreur s'est produite dans votre programme. Pour continuer à travailler, cliquez sur Ignorer et enregistrez votre travail dans un nouveau fichier. Pour quitter ce programme, cliquez sur Fermer. Vous perdrez les informations que vous avez saisies depuis votre dernier enregistrement. » Cliquer sur « Fermer » entraîne l'affichage de l'un des messages d'erreur ci-dessus, selon la version de Windows. « Ignorer » provoque parfois également ce problème.

Unix

Sous Linux et autres Unices , les erreurs sont signalées séparément (par exemple, erreur de segmentation pour les erreurs de mémoire).

Erreurs de mémoire

En cas d'erreur de mémoire, le programme défaillant accède à une mémoire à laquelle il ne devrait pas accéder. En voici quelques exemples :

  • Tentative d'écriture dans une partie de la mémoire en lecture seule
  • Tentative d'exécution d'octets en mémoire qui ne sont pas désignés comme instructions
  • Tentative de lecture en tant qu'octets de données en mémoire qui sont désignés comme instructions
  • Autres conflits divers entre la désignation d'une partie de la mémoire et son utilisation

Cependant, de nombreux systèmes d'exploitation modernes implémentent leurs schémas de contrôle d'accès à la mémoire via la pagination au lieu de la segmentation, de sorte qu'il arrive souvent que les références mémoire non valides dans les systèmes d'exploitation tels que Windows soient signalées via des erreurs de page au lieu d'erreurs de protection générales. Les systèmes d'exploitation fournissent généralement une couche d'abstraction (comme la gestion des exceptions ou des signaux) qui masque le mécanisme interne du processeur utilisé pour générer une erreur d'accès à la mémoire à partir d'un programme, dans le but de fournir une interface standard pour gérer de nombreux types différents de conditions d'erreur générées par le processeur.

En termes d'architecture x86, les erreurs de protection générales sont spécifiques à la protection basée sur la segmentation en ce qui concerne les accès à la mémoire. Cependant, les erreurs de protection générales sont toujours utilisées pour signaler d'autres violations de protection (en dehors des violations d'accès à la mémoire) lorsque la pagination est utilisée, comme l'utilisation d'instructions non accessibles à partir du niveau de privilège actuel (CPL).

Bien qu'il soit théoriquement possible pour un système d'exploitation d'utiliser à la fois la pagination et la segmentation, dans la plupart des cas, les systèmes d'exploitation courants s'appuient généralement sur la pagination pour l'essentiel de leurs besoins de contrôle d'accès à la mémoire.

Erreurs de privilège

Certaines fonctions d'un ordinateur sont réservées à l'usage exclusif du système d'exploitation . Si un programme qui ne fait pas partie du système d'exploitation tente d'utiliser l'une de ces fonctions, cela peut provoquer une erreur de protection générale.

De plus, il existe des emplacements de stockage réservés à la fois au système d'exploitation et au processeur lui-même. En raison de leur réservation, ils sont en lecture seule et une tentative d'écriture de données par un programme non privilégié génère une erreur.

Causes techniques des pannes

Les erreurs de protection générales sont générées par le processeur lorsqu'une instruction protégée est rencontrée qui dépasse le niveau d'autorisation de la tâche en cours d'exécution, soit parce qu'un programme en mode utilisateur tente une instruction protégée, soit parce que le système d'exploitation a émis une demande qui mettrait le processeur dans un état indéfini.

Les systèmes d'exploitation modernes détectent et gèrent les erreurs de protection générales. En général, si l'erreur provient d'un programme en mode utilisateur, le programme en mode utilisateur est arrêté. Si, en revanche, l'erreur provient d'un pilote système central ou du système d'exploitation lui-même, le système d'exploitation enregistre généralement les informations de diagnostic dans un fichier ou sur l'écran et arrête de fonctionner. Il redémarre l'ordinateur ou affiche un écran d'erreur , tel qu'un écran bleu de la mort ou un kernel panic .

Limites de segment dépassées

Les limites de segment peuvent être dépassées :

Autorisations de segment violées

Les autorisations de segment peuvent être violées par :

  • sauter vers des segments non exécutables
  • écriture dans des segments de code ou des segments en lecture seule
  • lecture des segments en exécution seule

Segments chargés illégalement

Cela peut se produire lorsque :

  • un segment de pile (SS) est chargé avec un sélecteur de segment pour un segment en lecture seule, exécutable, nul ou un segment avec un privilège de descripteur ne correspondant pas au privilège actuel dans CS
  • un segment de code (CS) chargé avec un sélecteur de segment pour un segment de données, système ou nul
  • SS, DS, ES, FS ou GS sont des segments chargés avec un sélecteur de segment pour un segment système
  • SS, DS, ES, FS ou GS sont des segments chargés avec un sélecteur de segment pour un segment de code d'exécution uniquement
  • accéder à la mémoire à l'aide des registres DS, ES, FS ou GS, lorsqu'ils contiennent un sélecteur nul

Commutation

Des erreurs peuvent survenir dans la structure du segment d'état de tâche (TSS) lorsque :

  • passer à une tâche en cours pendant un appel ou une instruction de saut
  • basculer vers une tâche disponible pendant une instruction de retour d'interruption (IRET)
  • en utilisant un sélecteur de segment sur un commutateur pointant vers un descripteur TSS dans le LDT

Divers

D’autres causes de défauts de protection générale sont :

  • tentative d'accès à un gestionnaire d'interruption/exception à partir du mode virtuel 8086 lorsque le niveau de privilège du descripteur de segment de code (DPL) du gestionnaire est supérieur à zéro
  • tentative d'écriture d'un 1 dans les bits réservés de CR4
  • tenter d'exécuter des instructions privilégiées lorsque le niveau de privilège actuel (CPL) n'est pas nul
  • tenter d'exécuter une instruction unique d'une longueur supérieure à 15 octets (éventuellement en préfixant l'instruction avec des préfixes superflus)
  • écriture sur un bit réservé dans une instruction MSR
  • accéder à une porte contenant un sélecteur de segment nul
  • exécuter une interruption logicielle lorsque le CPL est supérieur au DPL défini pour la porte d'interruption
  • le sélecteur de segment dans une porte d'appel, d'interruption ou de trappe ne pointe pas vers un segment de code
  • violation des règles de privilège
  • activer la pagination tout en désactivant la protection
  • référencement de la table des descripteurs d'interruption après une interruption ou une exception qui n'est pas une interruption, une interruption ou une porte de tâche
  • SSE hérité : l'opérande mémoire n'est pas aligné sur 16 octets.

Lectures complémentaires

  • Manuel du développeur de logiciels d'architecture Intel – Volume 3 : Programmation système
Original text
Rate this translation
Your feedback will be used to help improve Google Translate