commutateur d'appel de système et de contexte
je suis désolé de poser cette question alors qu'elle a déjà été posée mais je n'ai pas pu obtenir de clarté de leur part. Je pose donc les questions suivantes pour faire la différence entre l'appel système (mode-switch) et le commutateur de contexte
Pourquoi est-il dit que l'appel système n'a pas besoin de commutateur de contexte quand le contexte du processus d'appel doit être enregistré puis rechargé. Est-ce parce que, selon la définition de contexte, un commutateur a pour être faite à un autre processus.
Qu'est-ce que cela signifie que lorsqu'un appel système est fait, le noyau exécute dans le "contexte utilisateur".
Selon l'article de wikipedia : http://en.wikipedia.org/wiki/Context_switch
un commutateur de contexte n'est pas nécessaire pour un appel système, mais il dépend du système d'exploitation et un commutateur de contexte peut se produire pendant un appel système. Je me demandais ce qui allait se passer dans le cas où le changement de contexte prend place au moment de l'appel système. Des exemples ?
2 réponses
vous devez comprendre qu'un contexte thread/process a plusieurs parties, l'une, directement associée à l'exécution et est conservée dans le CPU et certaines tables système en mémoire que le CPU utilise (par exemple les tables de page), et l'autre, qui est nécessaire pour le système D'exploitation, pour la comptabilité (pensez aux différents ID, poignées, permissions spéciales spécifiques au système D'exploitation, connexions réseau et autres).
un commutateur de contexte complet impliquerait l'échange de ces deux, le vieux fil courant / processus disparaît pendant un certain temps et le nouveau thread/processus. C'est l'essence de la programmation du fil/processus.
maintenant,les appels système sont très différents W. R. T. l'un l'autre.
considérez quelque chose de simple, par exemple, l'appel système pour demander la date et l'heure actuelles. Le CPU passe du mode utilisateur au mode noyau, en conservant les valeurs du registre du mode utilisateur, exécute un code du noyau pour obtenir les données nécessaires, le stocke soit dans la mémoire, soit dans les registres que l'appelant peut accéder, restituer les valeurs du registre en mode utilisateur et revenir. Il n'y a pas beaucoup de commutateur de contexte ici, seulement ce qui est nécessaire pour la transition entre les modes, l'utilisateur et le noyau.
considérer maintenant un appel système qui implique le blocage de l'appelant jusqu'à un certain événement ou la disponibilité des données. La manipulation de mutex et la lecture de fichiers seraient des exemples de tels appels système. Dans ce cas, le noyau est forcé d'enregistrer l'ensemble du contexte de l'appelant, le marquer comme bloqués jusqu'à la scheduler ne peut pas l'exécuter jusqu'à ce que l'événement ou les données arrivent, et charger le contexte d'un autre thread/processus prêt, de sorte qu'il peut exécuter.
C'est ainsi que les appels système sont reliés aux commutateurs de contexte.
l'exécution du noyau dans le contexte d'un utilisateur ou d'un processus signifie que chaque fois que le noyau travaille pour le compte d'un certain processus ou utilisateur, il doit prendre en considération le contexte de cet utilisateur/processus, par exemple le processus/thread/user ID courant, le répertoire courant, locale, accès permissions pour diverses ressources (par exemple des fichiers), tout cela, qui peut être différent entre les différents processus/threads/utilisateurs.
Si les processus ont des espaces d'adresse, l'adresse des espaces est également partie du contexte de processus. Ainsi, lorsque le noyau a besoin d'accéder à la mémoire d'un processus (pour lire/écrire des données de fichier ou des paquets réseau), il doit avoir accès à l'espace d'adresse du processus, IOW, il doit être dans son contexte (cela ne signifie pas, cependant, que le noyau doit charger la totalité contexte d'accéder à la mémoire dans un espace d'adressage spécifique).
c'Est qu'utile?
sélecteur de mode se produit lorsqu'un utilisateur souhaite accéder à des choses qui ne conviennent qu'à un mode noyau