Je lisais un article qui décrit le basculement entre l'espace utilisateur et l'espace noyau qui se produit lors d'un appel système. L'article dit
Une application attend la fin de l'appel système avant de reprendre l'exécution en mode utilisateur.
Maintenant, jusqu'à présent, je supposais que certains appels système le sont blocking
, tandis que d'autres le sont non-blocking
. Avec le commentaire ci-dessus, je suis maintenant confus. Est-ce à dire que tous les appels système bloquent ou ai-je mal compris un concept?
Réponses:
Vous semblez surcharger le terme «blocage».
Tout changement de contexte que vous effectuez vers le noyau, vous devez attendre qu'il revienne au mode utilisateur avant que votre application puisse continuer. Ce n'est pas ce qu'on appelle généralement le «blocage».
Dans la conception actuelle du noyau, les appels de blocage sont des appels où le noyau ne renvoie que lorsque la demande est terminée (ou qu'une erreur se produit). Ces appels prennent généralement plus de temps et conduisent généralement à la planification de votre processus. Par exemple, de nombreux appels IO bloquent.
Il existe des appels système qui fournissent des E / S asynchrones et ils ne sont pas bloquants. Notez qu'il y a toujours un changement de contexte qui se produit ici, seule l'application doit prendre en charge la nature asynchrone de l'appel.
Le document semble vouloir supprimer ce changement de contexte (appels système sans exception) et essayer de rendre tous les appels asynchrones.
la source