Bonjour tout le monde,
Je suis actuellement en train de suivre le tutoriel : http://michelizza.developpez.com/rea...e-systeme/#LIV
(Je suis débutant en programmation d'OS)
Je suis actuellement bloqué sur la partie IV : "Programmer un secteur de boot qui passe en mode protégé".
Il y a certains aspects que j'ai du mal a comprendre, je me tourne donc vers vous.
Le premier point concerne ceci :
Ce que je comprend de cette phrase est que l'instruction cli désactive les IRQ.Notre structure est donc maintenant correctement initialisée. Nous sommes maintenant presque prêt à passer en mode protégé. Avant cela, il faut inhiber les interruptions, car comme le système d'adressage va changer, les routines appelées par les interruptions ne seront plus valides après la bascule (il faudra les reprogrammer) :
Ceci dans le but de d'éviter d'avoir des adresses fausses dans le vecteur d'interruption (car le système d'adressage change).
Le problème est que l'on a associé aucune fonction a aucune interruption dans ce cours.
Il y aurait donc des fonctions définis par défaut dans la table des interruptions ? Ceci est donc fait pour éviter d'avoir une IRQ qui déclenche une fonction non valide ?
Je n'ai également pas bien compris ceci :
Le fait de faire un jmp va mettre à jour le registre cs automatiquement ?L'instruction suivante réinitialise le sélecteur de code et exécute le noyau situé à l'adresse physique 0x1000. Cette instruction est essentielle, car elle permet, outre l'exécution du code du noyau, la réinitialisation correcte du sélecteur de code sur le bon descripteur (offset 0x8 dans la GDT) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ; réinitialise le segment de code jmp dword 0x8:0x1000
Je n'ai pas bien compris pourquoi nous devons mettre un 0x8 ?
Un dernier point :
Je trouve cela particulier de positionner deux segments différents sur la même plage d'adresse.Chaque descripteur est initialisé de façon à pouvoir adresser l'ensemble de la RAM. La base de ces segments est à 0x0 avec une limite de 0xFFFFF pages (le bit G est à 1).
J'aurais plutôt eu le réflexe de découper la RAM en deux dans le but de la partager pour mes deux segments.
Le bit G étant positionné à 1, cela signifie que la limite est exprimé en page, combien d'octets font ces pages ?
En vous remerciant,
Partager