2010-07-21 2 views
3

Quel est l'état du processus lorsqu'il appelle un appel système?Etat du processus lors de l'appel de syscall?

Je veux dire, ne pas Asume c'est un syscall E/S comme lire ou écrire ...

C'est le processus itselft qui exécute le code du noyau, ou le processus est suspendus et autres, il est comme un « thread noyau » qui exécute le gestionnaire syscall (et sait quel processus appelé (courant))?

Je ne suis pas sûr si les changements de l'exécution à prêt, ou l'exécution à bloqué.

Répondre

1

C'est le processus lui-même qui passe en mode noyau et exécute l'appel système - bien qu'il bascule dans une pile de noyau pour le faire. Un processus s'exécutant à l'intérieur du noyau a un état en cours d'exécution, et peut être préempté et se retrouver dans l'état Runnable.

+0

Merci :) _____ – makakko

2

Cela dépend de ce que fait le syscall. Supposons qu'il existe un appel système hypothétique qui calcule PI à un grand nombre de chiffres et place le résultat dans un tampon spécifié par l'application, alors le processus sera probablement dans l'état "R". Passer au mode noyau ne l'arrête pas dans le contexte de la tâche ayant effectué l'appel.

Bien sûr, de nombreux appels système attendent des choses - considérez sleep() par exemple, qui libère le processeur plutôt que de tourner. Cela met le processus en veille, ayant enregistré un minuteur du noyau pour le réveiller.

Beaucoup de syscalls ne dorment jamais, les goûts de getpid() qui récupèrent juste les informations qui sont toujours en RAM. Et beaucoup qui dorment parfois ne le font pas forcément, par exemple, si vous appelez read() sur des données déjà dans un tampon de noyau.

+0

Super, merci .. – makakko

Questions connexes