L'AMIGA DE LINTERIEUR par Gilles Dridi
Introduction a Exec
1 ere partie
Je vous propose avec cet article, d'explorer les mecanismes du noyau de rAmiga : Exec.
Nous commencerons par une introduction du matśriel, bien que nous ne traiterons que des aspects matśriels nścessaires ś la comprśhen-sion du noyau, et nous terminerons par une re-vue des modes de communication offerts par le noyau.
Les informations exposśes ici sont tirśes : de livres sur le 68000, des Rom Kernel Manuals, de la Bibie Amiga et surtout du document commentś des ROM 1.2 de Markus Wandel. J'ai utilisś ce dernier pour essayer de vous ex-pliquer et vous donner une vue d'ensemble du noyau.
On peut parfois et meme souvent, se demander comment fonctionne le noyau? Cłest de ce vaste sujet, puisque nous sommes au coeur de rAmiga, dont je vais traiter.
A Porigine est 1’interruption. En effet, la majoritś des MicroProcesseurs 8 bits tel que le 6502 ne disposent que d’une en-tree d’interruption (une patte du mP) par laquelle l'environnement exterieur au mP peut 1'interrompre.
En fait, c’est le microprocesseur qui apres chaque exścution du micropro-gramme d'une instruction (ce que doit faire Nnstruction) teste un bit lui indiquant si une interruption est survenue. Si c'est le cas, le microprocesseur se dśroute de Pexścution du programme en cours et saute ś une routine de traitement de Pinterruption. On se rend bien compte que sans ce mścanisme. nous serions obligśs de tester en permanence un bit et donc d'insśrer ce test rśguliśrement dans le sśąuencement du programme. Or ce mścanisme existe en interne dans le microprocesseur et il nous suffit de sa-voir ś quel endroit (adresse) la routine d’interruption s’execute pour y ficher la nótre.
Aprśs Pexścution de cette routine, le cours normal du programme interrompu peut etre repris. Pour cela, le microprocesseur, avant de sauter ś la routine d'interruption, sauvegarde 1’endroit ou il devra reprendre son execution ou PC et son registre d’etat ou SR (mais pas tous les registres de travail du mP). Enfin, le mP dispose d’une instruction spścifique i que l’on utilse pour terminer la routine d’interruption qui restaure PC et SR.
Pour bloquer temporairement le mśca-nisme d'interruption, le mP dispose d’un bit supplśmentaire utilisś pour "masquer Pinterruption". Uopśration logique "et" est effectuś entre ces deux bits et rangśe dans le bit d’interruption teste.
Avec le 68000, le principe d'interruption reste vrai avec quelques differences. En effet, le 680x0 a 7 niveaux d'interruption ou priorites. Si une interruption (a enco-der sur les 3 lignes d’entree du 680x0) survient. puis une deuxiśme avec une I priorite superieure avant que la premiere se termine, la deuxieme est traitee imme-diatement suivie du retour a la premiśre. . A chaque interruption, un masque est I mis automatiquement correspondant au niveau d'interruption pour bloquer temporairement le mścanisme. Elle empeche ainsi d’entrer dans une routine d'interruption de niveau infśrieur. A cause de cela, plus Pinterruption est prioritaire, plus sa routine doit etre courte et s'executer rapidement par rapport aux • routines des niveaux inferieurs. a Pinstar des poupees russes.
Autres particularites du 68000 et que Pon doit connaitre: d’une part, lors d’une interruption, le 68000 passe automati-quement, toujours et avant, tout en modę superviseur (un bit est affirme dans le mP); Penvironnement extśrieur peut sa-voir que le mP est dans cet etat par des i pattes de sortie. Le mP dśmarre par un RESET qui est une interruption et sera d’abord en modę supen/iseur.
L'instruction specifique qui permet de terminer la routine d’interruption est RTE.
Les autres instructions qui modifient le SR sont MOVE, ANDI, EORI to SR.
Dautre part, on dira que le modę utili-sateur est celui du programme quand il exścute des instructions de Putilisateur, sinon le modę "normal" du 68000 est su- 1 pen/iseur!
Enfin, śtant donnśs les 7 niveaux d’imbrication des routines d’interruption, i on peut, suitę ś Pinstruction de fin de rou- j tine d’interruption RTE, se trouver toujours en modę supen/iseur. On passera en modę utilisateur lorsque le premier ni-veau de priorite se terminera.
Derniśre particularitś, le 68000 sauve-garde et restaure (RTE) le PC et son SR par Pintermediaire du registre A7 appele pointeur de pile ou SP, qui est suivant le , bit du modę Superviseur/Utilisateur SSP ou USP; par consequent A7 pourra poin-ter sur deux piles differentes.
Consśquence: lors d’une interruption, le programme qui s’exścute est arrete et la routine de traitement d'interruption est exścutśe avec une pile diffśrente de celle du programme en cours: la pile supen/iseur et non celle de Putilisateur.
Quant a PAmiga, il centralise ses inter-ruptions (ecran, sśrie, disque, audio ou periphśriques supplementaires) a Paide d'un Circuit nommś Paula qui _contient_ deux registres INTENAble et INTER-EOuest. Ce Circuit transmettra une de-mande d'interruption (Request) si elle est autorisśe (ENAble) au 680x0, en les en-codant sur ses 3 entrees IPLX.
Remarque 1:
Exec utilise le masquage (dśjś expli-quś) au niveau du 68000 (MOVE $2X00,SR) uniquement pour diffśrer des interruptions aprśs des portions de codes internes (non directement liśes aux ap-
pels systśmes offerts) et critiques. Exec utilise aussi Enable()/Disable() qui active ou desactive toutes les interruptions grśce au registre INTENA de Paula.
En finał, l’Exec de PAmiga gere des priorites d’interruption supplementaires d'une maniśre logicielle. Les routines d’interruption "fichśes" par Exec, vont en premier voir si les interruptions sont auto-risśes "chez Paula", puis tester les bits de INTREOest. Pour chacun des 7 ni-veaux du 680x0. une routine d'interruption va grace aux informations du registre INTREOuest et du rang d'examen (le sequencement des instructions), dśfinir des priorites logiques. Par exemple, la routine d’interruption pour le niveau 1 va tester les bits. 0 puis 1 puis 2 de INTEREO, et lorsqu’un bit est affirmś sauter a une routine effective de traitement de Pinterruption que Pon nommera "handler".
Notons qu‘il faut un mścanisme matś-riel (ou logiciel ?) pour relancer et traiter la ou les deux interruptions restant lors-que 2 ou 3 interruptions, de meme ni-veau 680x0, sont simultanśment presen-tes chez Paula. Enfin, ce "handler" peut ne pas śtre la routine effective de traitement et s’appelle alors un serveur Celui-ci definit de nouveau des priorites de traitement par le parcours d’une listę ! II ap-pelle Punę apres Pautre. les routines-clientes de traitement pour un niveau lo-gique d'interruption, Padresse de cha-cune d’elles śtant stockee dans un ślś-ment de cette listę. Chaque "Client" se termine par une instruction RTS nous fai-sant revenir au codę de Pitśrateur de la listę du serveur.
Cette gestion d’interruption prśsente un premier cas, ou plusieurs "programmes" peuvent coexister. De la meme faęon que le microprocesseur gśre les interruptions et nous śvite de tester rśguliśre-ment Parrivee d'evenements, on voudrait ścrire, parce qu’on se place dans un contexte de multi-programmation, des programmes qui _coexistent_ et se par-tagent la puissance du microprocesseur, sans etre des routines d’interruption. Pourquoi ?
D’une part, on a vu que le mścanisme des interruptions du 680x0 fonctionne ś Pinstar des poupees russes et que la plu-part de nos programmes ne satisferont probablement pas ces contraintes. D’autre part, comme on Pa vu, le modę supen/iseur est reservś ś la gestion du systśme et nos programmes s’exścuteront "peinards" en modę utilisateur.
Dans le mścanisme d’interruption, nous avons vu que seuls PC/SR sont empiles mais pas les registres de travail du 680x0. En effet, une interruption peut sun/enir entre deux instructions, par ex-emple entre CMP D0.D1 et BEQ label, le drapeau testś par Pinstruction BEQ, en retour de la routine d'interruption est le "flag Z de SR" et ne doit pas etre modifiś. Pour cela, on sauvegarde aussi le registre d’śtat SR car il est fort probable qu'il
56 AmigaNews Fevrier 1997 N* 98