Changes between Version 7 and Version 8 of processus_thread


Ignore:
Timestamp:
May 26, 2016, 12:26:40 PM (9 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • processus_thread

    v7 v8  
    77Le PID (Process Identifier) est codé sur 32 bits, et il est unique dans le système : les 16 bits de poids fort contiennent
    88les coordonnées (X,Y) du cluster propriétaire Z, les 16 bits de poids faibles (LPID) contiennent le numéro local dans le cluster Z.
    9 Le descripteur d’un processus P et les tables qui lui sont associées ne sont répliqués - partiellement- que dans les clusters qui contiennent au moins un thread de P (appelés clusters actifs de P).
     9Le descripteur d’un processus P et les tables qui lui sont associées  sont répliqués - partiellement - dans les clusters qui contiennent au moins un thread de P (appelés clusters actifs de P).
     10Puisque qu'il existe plusieurs copies du descripteur de processus, il doit exister une copie de référence, située dans le cluster de référence. Attention: le '''cluster de référence''' peut être
     11différent du cluster propriétaire.
    1012
    11 Le descripteur de processus est défini par la structure task_t, et il contient les informations suivantes:
     13Le descripteur de processus est défini dans ALMOS-MK par la structure task_t, et il contient les informations suivantes:
    1214
    1315- PID :  processus identifier (contient les coordonnées du cluster propriétaire)
    1416- PPID : parent processus identifier,
    1517- XMIN, XMAX, YMIN, YMAX : recrangle recouvrant tous les clusters actifs
     18- CREF : coordonnées du cluster de référence
    1619- PT : table des pages du processus,
    1720- VSL : liste des vsegs du processus,
     
    2831 * un thread '''RPC''' est créé et ou activé par le noyau pour exécuter une ou plusieurs RPCs.
    2932
    30 QUESTION pourquoi distingue-t-on les thread KERNEL et les thread RPC ? [AG]
     33QUESTION : pourquoi distingue-t-on les thread KERNEL et les thread RPC ? [AG]
    3134
    3235Un thread peut être dans 6 états décrits dans la section [wiki:thead_scheduling D].
     
    5760=== 3.1) fork() ===
    5861
    59 Le processus père P s’exécute sur un coeur du cluster Z. Il fait un appel système fork() qui a principalement
     62Le processus père P s’exécute sur un coeur dans un cluster Z. Il fait un appel système fork() qui a principalement
    6063pour rôle de sélectionner un cluster cible X qui deviendra le cluster propriétaire du processus fils F, et de dupliquer
    6164le processus P dans le cluster Z. Le choix du cluster cible devrait en principe s’appuyer sur la DQDT, bien que
     
    6366
    6467L’appel system fork() crée dans le cluster Z un nouveau descripteur de processus pour le processus clone P’, ainsi qu’un descripteur de thread  pour le thread principal attaché au processus P’.
    65 Le descripteur du processus P’ contient en particulier la VSL(P’,Z), la PT(P’,Z), la FDT(P’,Z) qui sont des copies des tables correspondantes du processus P. En revanche la TRDL(P’,Z) ne contient que le thread nouvellement créé, ce qui signifie
    66 que le processus P’ clone est mono-thread.
    67 Puis l’appel système fork() demande au cluster cible X l’allocation d’un PID au moyen d’une TASK_FORK_RPC, en transmettant en argument l’adresse étendue du descripteur de processus P’. Cette adresse est enregistrée dans la table des processus du cluster, et le PID est enregistré dans le descripteur du processus P’ du cluster Z.
     68Le descripteur du processus P’ contient en particulier la VSL(P’,Z), la PT(P’,Z), la FDT(P’,Z) qui sont des copies des tables correspondantes du processus P. En revanche la TRDL(P’,Z) ne contient que le thread nouvellement créé, ce qui signifie que le processus P’ clone est mono-thread.
     69Puis l’appel système fork() demande au cluster cible X l’allocation d’un PID au moyen d’une TASK_FORK_RPC, en transmettant en argument l’adresse étendue du descripteur de processus P’. Cette adresse est enregistrée dans la table des processus du cluster X, et le PID est enregistré dans le descripteur du processus P’ du cluster Z.
    6870Finalement, le fork() enregistre le nouveau thread  dans l’ordonnanceur du coeur du cluster Z qui exécute le fork(), et rend la main au processus P.
     71A la fin d'un appel système fork(), le cluster propriétaire de P' est le cluster X, et le cluster de référence de P'est le cluster Z.
    6972
    7073=== 3.2) exec() ===
    7174
    72 Une fois l'opération fork() terminée, le processus fils P’ peut exécuter l'appel système exec(). Cet appel système exec() effectue une TASK_EXEC_RPC vers le cluster X, avec les arguments suivants: le PID du processus fils, le nom de la fonction à exécuter, les arguments de la fonction s'il y en a, les variables d'environnement.
    73 Cette RPC alloue un descripteur de processus pour le processus F, ainsi qu’un descripteur de thread. Il initialise ces descripteurs et les tables PT(F,X) , VSL(F,X), TRDL(F,X) en utilisant les arguments de la RPC. Il recopie le contenu de la FDT(P’,Z) dans la FDT(F,X), en utilisant un remote_memcpy(), puisqu’il dispose de l’adresse étendue de P’.
    74 Quand le processus P’ sur le cluster Z reçoit une réponse positive pour  cette EXEC_RPC,  le processus P’ intermédiaire
    75 se suicide.
     75Une fois l'opération fork() terminée, le processus fils P’ peut exécuter l'appel système exec(). Cet appel système exec() doit remplacer le processus P' par un nouveau processus F qui exécute une nouvelle image mémoire, mais conserve le PID du processus P', et donc possède le même propriétaire que P'. Pour ce nouveau processus F, on veut que le cluster de référence soit aussi le cluster propriétaire, c'est à dire le cluster X. Pour cela, le processus P' (qui s'exécute toujours sur le cluster Z) effectue une TASK_EXEC_RPC vers le cluster X, avec les arguments suivants: le PID du processus P', le nom du fichier contenant le code binaire à charger en mémoire, les arguments de la fonction s'il y en a, les variables d'environnement.
     76Cette RPC alloue dans le cluster X un descripteur de processus pour le processus F, ainsi qu’un descripteur de thread principal. Il initialise ces descripteurs et les tables PT(F,X) , VSL(F,X), TRDL(F,X) en utilisant les arguments de la RPC. Il recopie le contenu de la FDT(P’,Z) dans la FDT(F,X), en utilisant un remote_memcpy(), puisqu’il dispose de l’adresse étendue de P’.
     77Quand le processus P’ sur le cluster Z reçoit une réponse positive pour  cette EXEC_RPC,  le processus P’ intermédiaire se termine.
    7678
    7779Une fois que les structures sont initialisées, le thread principal du processus fils est attaché à l'ordonnanceur du cœur cible.