GDT et IDT

Depuis peu, le noyeau que je dĂ©veloppe dispose enfin d’une gestion prĂ©caire des interruptions. Dans cette article je vais donc vous parler
 interruptions! Et histoire de ne perdre personne, on commencera par dĂ©crire le fonctionnement de la GDT.

1 : Physique ou Virtuelle

Si vous avez dĂ©jĂ  fait un peu d’assembleur, vous savez peut-ĂȘtre qu’un programme, une fois en mĂ©moire, est diviser en plusieurs segments :

Pour accéder a ces différents segment, on dispose des Sélecteurs de Segment. Ce sont des registre qui indiquent à quel adresse mémoire situent les donnes.

Ainsi, pour accĂ©der a l’ octet numĂ©ro 0x03 du segment de code, on peut Ă©crire cs::0x03. Quand l’ordinateur dĂ©marre, le processeur est en mode rĂ©elle. 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 les programmes ont accĂšs Ă  toute la mĂ©moire, et de plus les registres sont limiter a 16bits
 impossible d’accĂšder Ă  toute la mĂ©moire des ordinateurs actuel.

Pour rĂ©gler ce problĂšme, il existe le mode protĂ©gĂ©, oĂč le processeur est en 32Bits et ou les sĂ©lecteurs correspondent a un maillon de la GDT (on en reparlera dans quelques lignes).

Dans le mode protĂ©ger, la valeur des sĂ©lecteurs correspond Ă  l’offset (dĂ©calage par rapport a l’origine) de l’ Ă©lĂ©ment dans la GDT (Global Descriptor Table). Pour accĂ©der au premier sĂ©lecteur de la GDT, on place donc 0x0 dans un sĂ©lecteur de segment. Pour le second, 0x8 (chaque maillon est sur 64bits), et ainsi de suite.

2: Les interruptions

Une interruption, c’est (dixit wikipedia) “un arrĂȘt temporaire de l’exĂ©cution normale d’un programme informatique par le microprocesseur.

Les interruptions sont de deux type : matériel ou logiciel.

Une interruption matĂ©riel est typiquement l’ appuis sur une touche du clavier. Une interruption logiciel peut ĂȘtre l’ appelle Ă  un syscall (un appel Ă  write sous unix)

Pour associer une fonction(le sens informatique du terme) à chaque interruption, il existe l’ IDT(Interrupt Descriptor Table).

Chaque Ă©lĂ©ment de l’ IDT contient :

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’occupe de prĂ©venir le processeur quand une interruption matĂ©riel a lieu. Pour rĂ©sumer, ce composent envoi une requĂȘte (IRQ=Interuption ReQuest) au processeur quand un Ă©vĂšnement a lieu. En plus, il n’ est pas un, mais ils sont deux, en cascade (Un esclave et un maĂźtre).

Une fois le tout configurer, on rĂ©active les interruption et
 On cherche pourquoi ça n’ a pas fonctionner :)

4 : Références

Pour lire un peu de code, vous pouvez jeter un oeil au dépÎt git https://github.com/jeremycochoy/kos/.