Quel est le «canal en attente» d'un processus?

35

L'onglet Processus du moniteur système GNOME contient une colonne "Canal en attente". Les valeurs les plus courantes que je vois ici sont poll_schedule_timeout , mais je vois aussi d'autres valeurs: 0 , do_exit , do_wait , futex_wait_queue_me , pipe_wait , __ skb_recv_datagram et unix_stream_data_wait . . .

Alors, que signifie cette colonne "Waiting Channel"? Et peut-être que signifient certaines de ces valeurs?

    
posée 8128 30.12.2010 - 17:46
la source

2 réponses

41

Le canal en attente est l'endroit dans le noyau où la tâche est actuellement en attente. Une tâche doit attendre une ressource, qui peuvent être des données ou un temps de traitement. Ces deux comprennent les sockets réseau, le matériel, les fichiers, etc. car la plupart d’entre eux ne sont que des fichiers, dans des systèmes de type Unix.

  • 0 : le processus n'attend pas

  • poll_schedule_timeout

    poll() est un appel système 1 utilisé pour gérer les E / S. C'est similaire à select() . 2

    Les applications qui utilisent des E / S non bloquantes utilisent ces appels pour voir si elles peut lire ou écrire dans un fichier, sans avoir à le bloquer. Elles sont souvent utilisé pour les flux d’entrée / sortie, qui ne peuvent pas être bloqués (sinon, peut-être que votre souris s’arrêterait pour bouger).

    Le canal en attente poll_schedule_timeout indique qu’une tâche est en cours. en attente d'E / S, soit du matériel comme des claviers et des souris, des périphériques audio ou même des prises réseau.

    1. Une fonction dans le noyau
    2. Ils sont définis dans <linux/poll.h> . poll était une implémentation d'abord vu dans System V, select est l'équivalent BSD UNIX.
  • futex_wait_queue_me :

    Pour expliquer cela, nous devons regarder Locks. Un verrou est un état enregistré dans le système qui indique qu'une tâche fonctionne avec une ressource. Il peut y avoir, pour Par exemple, une seule tâche qui lit un fichier. Cette tâche verrouillerait le fichier, toute toute autre tâche 1 qui essaie de lire le fichier sait qu’il est verrouillé et attend la serrure pour s'en aller, avant qu'elle puisse y accéder. La même chose arrive pour temps processeur.

    La version moderne de Linux (sur la plupart des architectures) utilise un Futex (espace utilisateur rapide) mutex) verrouille le noyau. Mutex, exclusion mutuelle, renvoie à l'idée que une ressource commune est accessible uniquement par une tâche à la fois. Pour cela, des drapeaux dans le système sont définis.

    Si un processus attend une ressource verrouillée, cela s'appelle Occupé en attente ou "Spinning", en se référant au fait qu'il essaie d'y accéder encore et encore, jusqu'à ce qu'il puisse. Une tâche est dite bloquée lorsqu'elle tourne.

    Les verrous Futex peuvent être considérés comme un nombre dans l’espace utilisateur, qui peut être incrémenté. ou décrémentés par une tâche (dans les cas où la ressource est accessible par tâches multiples, ce nombre peut devenir supérieur à un). C'est le nombre montré dans le diagramme 4 .

    Ces tâches se mettent en file d'attente dans la file d'attente , une simple file de tâches nécessitant du travail, une fois que le temps de traitement est disponible, les tâches font leur travail et sont supprimées de la file d'attente.

    futex_wait_queue_me met en file d'attente une tâche. Il attend ensuite un signal, une heure out ou un réveil. Les tâches qui se trouvent dans ce canal en attente ne sont pas en attente sur la file d'attente, ils attendent d'être mis en file d'attente.

    1. Une tâche peut être un processus 3 ou un thread 2 .
    2. Un fil de discussion est une sous-section d'un processus. De nombreux threads peuvent fonctionner en parallèle
    3. Un processus est un programme complet. Il se compose d'un ou de plusieurs threads, bien qu'un programme puisse également comporter plusieurs processus.
    4. N'oubliez pas qu'il s'agit toujours d'une vue de très haut niveau, sans tenir compte des détails de la mise en oeuvre
  • __skb_recv_datagram

    Attendez quelques données sur une prise réseau verrouillée.

  • sk_wait_data

    Attendez quelques données sur une prise réseau.

  • do_exit

    Il s’agit de la dernière étape de la fermeture d’un processus. do_exit() appelle le schedule() next pour planifier un autre processus. Lorsque do_exit() est appelé, le processus est un ZOMBIE .

  • do_wait

    Un processus est ajouté à la file d'attente des planificateurs.

  • pipe_wait , unix_stream_data_wait

    Un processus attend les données d'un sous-processus. Cela se produit, par exemple, lorsque vous exécutez ce type de code:

    echo | sleep 10 && echo hallo              # pipe
    

    ou

    cat < hello.c                              # unix data stream
    
  • hrtimer_nanosleep

    Le processus est en veille, à l'aide de la méthode hrtimer_nanosleep() . Cette méthode peut être utilisée par un programme pour dormir pendant des intervalles de temps spécifiques, avec une précision de l'ordre de la nanoseconde.

Ce ne sont pas tous, mais je n’en ai pas observé d’autres. Postez un commentaire si j'ai oublié quelque chose.

    
réponse donnée Stefano Palazzo 09.01.2011 - 23:29
la source
11

La valeur du canal en attente est le nom de la fonction du noyau dans laquelle le processus est actuellement bloqué.

Le nom est généralement lié à un appel système, qui aura un page de manuel.

  • futex_wait_queue_me est associé à futex . Il fait référence à un type de mutex verrouiller (exclusion mutuelle d'espace utilisateur rapide) utilisé pour planifier de nombreuses les processus fonctionnent sur un processeur. L'état indique que votre processus est mis en file d'attente pour recevoir le verrou. 2
  • do_wait est lié à attendre .
  • etc.

Si vous voulez vraiment des informations plus détaillées, vous pouvez vérifier le noyau source .

Si vous tapez cat /proc/some_pid/stack dans un terminal, vous obtiendrez un résultat comme celui-ci:

[<c0227f4e>] poll_schedule_timeout+0x3e/0x60
[<c022879f>] do_select+0x55f/0x670
[<c0228f40>] core_sys_select+0x140/0x240
[<c0229241>] sys_select+0x31/0xc0
[<c05c9cc4>] syscall_call+0x7/0xb
[<ffffffff>] 0xffffffff

Et sur la première ligne, vous obtenez ce qui est affiché sur le moniteur du système. Pour autant que je sache, poll_schedule_timeout indique que votre processus attend quelque chose.

Il traite des E / S asynchrones et interrogation .

Source (s): 1. canal d'attente de processus (WCHAN) et alarme? - 2. Réponse AskUbuntu

    
réponse donnée Maxime R. 30.12.2010 - 19:01
la source

Lire d'autres questions sur les étiquettes