Options de bibliothèque d'unités d'exécution
Cette section décrit les attributs spéciaux des unités d'exécution, des exclusions mutuelles et des variables de condition.
La norme POSIX pour la bibliothèque d'unités d'exécution spécifie l'implémentation de certaines parties comme étant facultatives. Toutes les sous-routines définies par l'API de bibliothèque d'unités d'exécution sont toujours disponibles. Selon les options disponibles, certaines sous-routines peuvent ne pas être implémentées. Les sous-routines non implémentées peuvent être appelées par des applications, mais elles renvoient toujours le code d'erreur ENOSYS .
Attributs de pile
Une pile est allouée à chaque unité d'exécution. La gestion de la pile dépend de l'implémentation. Par conséquent, les informations suivantes ne s'appliquent qu'à AIX, bien que des fonctionnalités similaires puissent exister sur d'autres systèmes.
La pile est allouée de manière dynamique lors de la création de l'unité d'exécution. L'utilisation d'attributs d'unité d'exécution avancés permet à l'utilisateur de contrôler la taille et l'adresse de la pile. Les informations suivantes ne s'appliquent pas à l'unité d'exécution initiale, qui est créée par le système.
Taille de PILE
L'option de taille de pile permet de contrôler l'attribut stacksize d'un objet d'attributs d'unité d'exécution. Cet attribut indique la taille de pile minimale à utiliser pour l'unité d'exécution créée.
- Attribut stacksize de l'objet d'attributs d'unité d'exécution
- pthread_attr_getstacksize renvoie la valeur de l'attribut
- et les sous-routines pthread_attr_setstacksize définissent la valeur
La valeur par défaut de l'attribut stacksize est 96 Ko. La valeur minimale de l'attribut stacksize est 16 Ko. Si la valeur affectée est inférieure à la valeur minimale, la valeur minimale est allouée.
- Une zone rouge, qui est à la fois protégée en lecture et en écriture pour la détection des débordements de pile. Il n'y a pas de zone rouge dans les programmes qui utilisent de grandes pages.
- Une pile par défaut.
- Structure pthread.
- Structure d'unité d'exécution.
- Structure d'attribut d'unité d'exécution.
Option POSIX d'adresse de pile
L'option d'adresse de pile permet de contrôler l'attribut stackaddr d'un objet d'attributs d'unité d'exécution. Cet attribut indique l'emplacement de stockage à utiliser pour la pile de l'unité d'exécution créée.
- L'attribut stackaddr de l'objet d'attributs d'unité d'exécution indique l'adresse de la pile qui sera allouée à une unité d'exécution.
- La sous-routine pthread_attr_getstackaddr renvoie la valeur de l'attribut.
- et la sous-routine pthread_attr_setstackaddr définit la valeur.
Si aucune adresse de pile n'est spécifiée, la pile est allouée par le système à une adresse arbitraire. Si vous devez disposer de la pile à un emplacement connu, vous pouvez utiliser l'attribut stackaddr . Par exemple, si vous avez besoin d'une pile très volumineuse, vous pouvez définir son adresse sur un segment non utilisé, garantissant ainsi la réussite de l'allocation.
Si une adresse de pile est spécifiée lors de l'appel de la sous-routine pthread_create , le système tente d'allouer la pile à l'adresse indiquée. En cas d'échec, la sous-routine pthread_create renvoie EINVAL. Etant donné que la sous-routine pthread_attr_setstackaddr n'alloue pas réellement la pile, elle ne renvoie une erreur que si l'adresse de pile spécifiée dépasse l'espace d'adressage.
Option POSIX de planification des priorités
L'option de planification des priorités permet de contrôler la planification de l'exécution au niveau de l'unité d'exécution. Lorsque cette option est désactivée, toutes les unités d'exécution d'un processus partagent les propriétés de planification du processus. Lorsque cette option est activée, chaque unité d'exécution possède ses propres propriétés de planification. Pour les unités d'exécution de portée de conflit local, les propriétés de planification sont gérées au niveau du processus par un planificateur de bibliothèque, tandis que pour les unités d'exécution de portée de conflit global, les propriétés de planification sont gérées au niveau du système par le planificateur de noyau.
Les attributs et sous-routines Folowing sont disponibles lorsque l'option est implémentée:
- Attribut inheritsched de l'objet Attributs d'unité d'exécution
- Attribut schedparam de l'objet d'attributs d'unité d'exécution et de l'unité d'exécution
- L'attribut schedpolicy des objets d'attributs d'unité d'exécution et de l'unité d'exécution
- L'attribut contention-scope des objets d'attributs d'unité d'exécution et de l'unité d'exécution
- Les sous-routines pthread_attr_getschedparam et pthread_attr_setschedparam
- La sous-routine pthread_getschedparam
Vérification de la disponibilité d'une option
Les options peuvent être vérifiées au moment de la compilation ou de l'exécution. Les programmes portables doivent vérifier la disponibilité des options avant de les utiliser, de sorte qu'elles ne doivent pas être réécrites lorsqu'elles sont portées sur d'autres systèmes.
Vérification au moment de la compilation
#ifndef _POSIX_THREAD_ATTR_STACKSIZE
#error "The stack size POSIX option is required"
#endif- _POSIX_REENTRANT_FONCTIONS
- Indique que les fonctions réentrantes sont requises
- _POSIX_THREADS
- Indique l'implémentation de la bibliothèque d'unités d'exécution
Vérification de l'exécution
La sous-routine sysconf peut être utilisée pour obtenir la disponibilité des options sur le système où le programme est exécuté. Cela est utile lorsque vous portez des programmes entre des systèmes qui ont une compatibilité binaire, par exemple deux versions d' AIX.
La liste suivante indique les symboles associés à chaque option et qui doivent être utilisés pour le paramètre Nom de la sous-routine sysconf . Les constantes symboliques sont définies dans le fichier d'en-tête unistd.h .
- Adresse de pile
- _SC_THREAD_ATTR_STACKADDR
- Taille de PILE
- tAILLE DE LA PILE DE L'ATTR_SC_THREAD
- Planification des priorités
- _SC_THREAD_PRIORITY_ORDONNANCEMENT
- Héritage de priorité
- _SC_THREAD_PRIO_INHERIT
- Protection prioritaire
- _SC_THREAD_PRIO_PROTECT
- Partage de processus
- _SC_THREAD_PROCESS_SHARED
- _SC_REENTRANT_FONCTIONS
- Indique que les fonctions réentrantes sont requises.
- _SC_UNITÉS d'exécution
- Indique l'implémentation de la bibliothèque d'unités d'exécution.
Partage de processus
AIX et la plupart des systèmes UNIX permettent à plusieurs processus de partager un espace de données commun, connu sous le nom de mémoire partagée. Les attributs de partage de processus pour les variables de condition et les mutex sont destinés à permettre à ces objets d'être alloués dans la mémoire partagée afin de prendre en charge la synchronisation entre les threads appartenant à différents processus. Cependant, comme il n'existe pas d'interface standard pour la gestion de la mémoire partagée, l'option POSIX de partage de processus n'est pas implémentée dans la bibliothèque d'unités d'exécution AIX .
Types de données des unités d'exécution
- pthread_t
- Identifie une unité d'exécution
- attr_pthread_t
- Identifie un objet d'attributs d'unité d'exécution
- pthread_cond_t
- Identifie une variable de condition
- pthread_condattr_t
- Identifie un objet d'attributs de condition
- clé_pthread_t
- Identifie une clé de données spécifique à une unité d'exécution
- pthread_mutex_t
- Identifie un mutex
- pthread_mutexattr_t
- Identifie un objet d'attributs d'exclusion mutuelle
- pthread_once_t
- Identifie un objet d'initialisation unique
Limites et valeurs par défaut
- Le nombre maximal d'unités d'exécution par processus est de 512. Le nombre maximal d'unités d'exécution peut être extrait lors de la compilation à l'aide de la constante symbolique PTHREAD_THREADS_MAX définie dans le fichier d'en-tête pthread.h . Si une application est compilée avec l'indicateur -D_LARGE_THREADS , le nombre maximal d'unités d'exécution par processus est de 32767.
- La taille de pile minimale pour une unité d'exécution est 8 K. La taille de pile par défaut est de 96 Ko. Ce nombre peut être extrait lors de la compilation à l'aide de la constante symbolique PTHREAD_STACK_MIN définie dans le fichier d'en-tête pthread.h .Remarque: La taille de pile maximale est de 256 Mo, soit la taille d'un segment. Cette limite est indiquée par la constante symbolique PTHREAD_STACK_MAX dans le fichier d'en-tête pthread.h .
- Le nombre maximal de clés de données spécifiques à une unité d'exécution est limité à 508. Ce nombre peut être extrait lors de la compilation à l'aide de la constante symbolique PTHREAD_KEYS_MAX définie dans le fichier d'en-tête pthread.h .
Valeurs d'attribut par défaut
- La valeur par défaut de la constante symbolique DEFAULT_DETACHSTATE est PTHREAD_CREATE_DÉTACHÉ, qui indique la valeur par défaut de l'attribut detachstate .
- La valeur par défaut de la constante symbolique DEFAULT_JOINABLE est PTHREAD_CREATE_JOINABLE, qui indique la valeur par défaut de l'état joinable.
- La valeur par défaut de la constante symbolique DEFAULT_INHERIT est PTHREAD_INHERIT_SCHED, qui indique la valeur par défaut de l'attribut inheritsched .
- La valeur par défaut de la constante symbolique DEFAULT_PRIO est 1, ce qui indique la valeur par défaut pour lasched_priode l'attribut schedparam .
- La valeur par défaut de la constante symbolique DEFAULT_SCHED est SCHED_OTHER, qui spécifie la valeur par défaut de l'attribut schedpolicy d'un objet d'attributs d'unité d'exécution.
- La valeur par défaut de la constante symbolique DEFAULT_SCOPE est PTHREAD_SCOPE_LOCAL, qui indique la valeur par défaut de l'attribut contention-scope .