Bonjour,
Depuis hier, KoS dispose enfin d' une gestion precaire des interuptions. Dans cette article je vais donc... parler des interuptions! Et histoire de ne perdre personne, je decrirais d' abord le fonctionement de la GDT.
1 : Physique ou Virtuelle
Si vous avez deja fait un peu d' assembleur, vous devriez savoir qu' un programme, une fois en memoire, est diviser en plusieures segments :
- Segment de code
- Segment de donne
- Stack
Pour acceder a ces diferents segment, on dispose des Selecteurs de Segment. Ce sont des registre qui indiquent ou se situent les donnes.
Ainsi, pour acceder a l' octet numero 0x3 du segment de code, on peut ecrire cs::0x03.
Quand le processeur demare, il est en mode reele. C' est a dire que les sélecteurs de segment représentent une adresse physique.
(0x73 représente l' adresse mémoire 0x730)
Ce n' est pas vraiment super, tout le monde a accer a tout et n' importe quoi, et en plus les registres sont limiter a 16bits...
Pour regler ce problemme, il existe le mode protege, ou le processeur est en 32Bits et ou les selecteurs corespondent a un maillon de la GDT(J' y viendrais dans quelques lignes).
Dans le mode proteger, la valeur des selecteurs corespond a l' offset(Decalage par raport a l'origine) de l' element dans la GDT(Global Descriptor Table). Pour acedder au premier selecteur de la GDT, on place donc 0x0 dans un selecteur de segment. Pour le second, 0x8 (Chaque maillon est sur 64bits), et ainsi de suite.
2: Les interuptions
Une interuption, c' est (dixit wikipedia) "un arrêt temporaire de l'exécution normale d'un programme informatique par le microprocesseur".
Les interuptions sont de deux type : materiel ou logiciel.
Une interuption materiel est typiquement l' apuis sur une touche du clavier.
Une interruption logiciel peut être l' apelle a un syscall (un apelle a write sous unix)
Pour associer une fonction(le sens informatique du terme) a chaque interuption, il existe l' IDT(Interrupt Descriptor Table).
Chaque element de l' IDT contien :
- Un selecteur, qui corespond aux elements de la GDT
- Un offset (pointeur sur fonction)
- Des bits qui specifi le TYPE du maillon
3 : IRQs
Et non, ce n' est pas terminer. C' est bien beau de configurer la GDT et l' IDT, mais encore faut'il configurer le chipset qui s' ocupe de prevenir le processeur quand une interuption materiel a lieu.
Pour resumer, ce composent envoi une requette (IRQ=Interuption ReQuest) au processeur quand un evenement a lieu.
En plus, il n' est pas un, mais ils sont deux, en cascade (Un esclave et un maitre).
Une fois le tout configurer, on reactive les interuptions et... On cherche pourquoi ca n' a pas fonctioner