Bonjour/Bonsoir à tous,

Je viens vous voir parce que j'ai un problème de compréhension quand à l'exécution des appels systèmes.
La gestion de l'exécution est-elle effectué par le DMA ( qui s'occupe de toutes les entrées/sorties, exemple : appel système "open") ou par une pile
qui est géré par le S.E. ?
(J'ai l'impression que c'est plutôt la pile)

Ce que j'ai compris :
Quand un process exécute un appel système, son état passe de "élu" à "bloqué", on change de ring pour passer de 3/2/1 à 0, le pid du process est empilé dans une pile du S.E., et l'appel est exécuté, lorsque l'exécution de l'appel système est terminé, le S.E. dépile le pid du process, change son état de "bloqué" à "prêt" et rend la main à l'ordonnanceur.

Exemple pour le fork :

1- le père passe à l'état bloqué
2- empilement de son pid par le S.E.
3- changement de ring -> 0
4- exécution du fork :
5- sauvegarde du contexte dans la table des process (pid, registre généraux, etc...)
6- duplication de l'entrée du père pour avoir une 2ème entrée qui devient le fils
7- certaines modifications sont effectuées (pid change, le temps cpu est réinitialisé, etc...)
8- une routine du S.E. place dans la pile du père le pid du fils, et dans la pile du fils "0"
9- le S.E dépile le pid du process père
10- le S.E. change l'état du process père à l'état "prêt"
11- le S.E. rend la main à l'ordonnanceur


Pouvez vous me dire si mon explication est juste ou si j'ai manqué quelque chose ou si je me trompe ?

Merci d'avance !