20Fermer22
squalylLe 27/11/2007 à 09:52
Thi > sur TI c'est complètement dénaturé à cause du trap #12 mais sur un vrai OS 68k, le noyau tourne en mode superviseur et les programmes utilisateur en mode normal. Le fait d'avoir deux piles séparées permet d'éviter des failles à base de traps.

En gros, en mode superviseur, a7 est la pile superviseur, et la pile utilisateur ne peut se manipuler qu'avec move an,usp. c'est un registre comme un autre.

Quand la machine boote t'es en mode superviseur. le vrai kernel au sens de linux peut s'exécuter. Ensuite quand on démarre un processus, on passe en mode utilisateur *. Dans ce cas, a7 est sauvé dans ssp, et usp est placé dans a7.

Quand un programme en mode normal exécute trap #n, le CPU passe en mode superviseur (donc a7=ssp, et pas usp), met le SR (qui contient le mode et les flags) sur la pile, puis met le PC de l'appelant sur la pile. En gros on est "rentré dans le noyau" pour faire par exemple un appel système. A la fin du trap, on doit faire RTE pour revenir au processus, car on doit dépiler le PC de retour ET AUSSI le SR qui permettra de revenir en mode utilisateur.

L'idée d'avoir deux piles séparées ça permet d'éviter que le RTE revienne en restant en mode système en trafiquant simplement le SR qui resterait sur la pile utilisateur. parce que le trap a switché en pile superviseur avant de sauver SR et PC.

tu vois le truc? pour moi c'est évident car éprouvé durement en projet système T_T , mais c'est pas forcément clair à la première lecture.