oui, je sais, mais non
je vois bien la merde, faudrait que je m'amuse avec des piles séparées, mais après réflexion, je suis obligé de faire ça en assembleur!
Ne serait ce que si je veux deux "processus" indépendants, il me faut au moins une pile pour chacun, mais c'est même pas ça le truc:
c'est qu'une fois que je suis dans ma routine définie par "signal()", ben les signaux suivants sont bloqués, donc je reviens jamais dans ma routine d'interruption!
hmm en fait c'est pareil pour une irq hardware
j'ai pas encore dû bien comprendre ce qui se passe dans un schedule()
NOTA: j'ai pas encore eu le cours correspondant, j'essaye de deviner par moi même comment ça marche...
ce que je fais pour le moment c'est (sans gestion de priorité)
à l'initialisation:
création d'une liste chainée circulaire contenant N processus avec chacun un pid, un état, une routine
les routines sont du type while(true) fais_un_truc();
et à chaque fois que j'appelle l'interruption:
si un processus est deja en cours d'execution:
resultat=setjmp(process_courant.env);
sinon
resultat = arrive_ici_directement
fin si
si resultat = arrive_ici_par_longjmp alors
return;
sinon
process_courant = process_courant.next (c'est une liste circulaire)
si il a jamais été démarré avant, appeler process_courant->routine()
si il a déja été démarré avant ->faire longjmp vers process_courant->env
fin si
je me gourre peut être complètement. Ximoon va ptet me dire regarde les sources de Opale, mais c'est trop facile, je veux comprendre tout seul
si il faut pas démarrer la routine suivante dans le gestionnaire d'interruption, je me demande comment se fait le context switch alors!
plus je réfléchis, plus je me dis que j'ai besoin de l'asm quelque part dans le context switch!