Le processus de l’espace utilisateur prévient-il le thread du kernel?

Actuellement, je lis “Comprendre le kernel Linux, 3ème édition” et p.22 je peux lire:

Dans le cas le plus simple, le processeur exécute un chemin de contrôle du kernel séquentiellement de la première instruction à la dernière. Lorsque l’un des événements suivants se produit, cependant, la CPU intercale les chemins de contrôle du kernel:

  • Un processus exécuté en mode utilisateur appelle un appel système et le chemin de contrôle du kernel correspondant vérifie que la demande ne peut pas être satisfaite immédiatement; il appelle ensuite le planificateur pour sélectionner un nouveau processus à exécuter. En conséquence, un commutateur de processus se produit. Le premier chemin de contrôle du kernel n’est pas terminé et le processeur reprend l’exécution d’un autre chemin de contrôle du kernel. Dans ce cas, les deux chemins de contrôle sont exécutés pour le compte de deux processus différents.

Le chemin de contrôle du kernel peut être interrompu par un processus d’espace utilisateur effectuant un appel système? Je pensais que la priorité était plutôt:

  • les interruptions
  • threads du kernel
  • processus d’espace utilisateur

J’ai vérifié les errata et je n’ai rien trouvé à ce sujet.

Vous avez raison à propos de la liste de priorités, mais ce que le livre essaie de dire, je pense, est:

  • Lorsqu’un processus (utilisateur) effectue un appel système, le kernel commence à s’exécuter en son nom.
  • Si l’appel système peut être terminé (le chemin de contrôle du kernel ne fonctionne pas dans un roadblock), il retournera généralement directement au processus appelant – appel de la fonction getpid() .
  • D’autre part, si l’appel système ne peut pas être terminé (par exemple, le système de disque doit lire un bloc dans le pool de mémoire tampon du kernel avant que ses données puissent être renvoyées au processus appelant), le planificateur est utilisé pour sélectionner un nouveau processus à exécuter – préemption du processus utilisateur (thread de contrôle du kernel qui s’exécutait pour le compte de).
  • En temps voulu, l’appel système d’origine pourra continuer, et le processus utilisateur d’origine (thread de contrôle du kernel qui s’exécutait pour le compte du) pourra continuer et éventuellement terminer, en redonnant le contrôle au processus de l’espace utilisateur s’exécutant dans espace utilisateur et non dans le kernel.

Donc “Non”: le “chemin du kernel” ne peut pas être interrompu par un processus d’espace utilisateur effectuant un appel système.

Le chemin du kernel peut être interrompu pendant qu’il exécute un appel système au nom d’un processus d’espace utilisateur car: une interruption se produit ou le chemin du kernel doit attendre qu’une ressource soit disponible ou …