Quel est le besoin de la structure thread_info pour localiser struct task_struct?

En lisant les pilotes de périphériques Linux, je pourrais comprendre que le descripteur de process (de type struct task_struct ) contient toutes les informations concernant une tâche particulière. Les descripteurs de process sont alloués dynamicment par l'allocateur de dalle.

Ce que je voudrais savoir, c'est la nécessité d'introduire une nouvelle structure appelée thread_info qui est stockée au bas de la stack (en supposant que x86). Pourquoi est-ce fait?

Pourquoi l'adresse de l'adresse de tâche en cours d'exécution ( struct task_struct ) n'a-t-elle pas pu être struct task_struct dans la stack du kernel?

La raison pour laquelle nous avons besoin de thread_info est due au fait que nous allouons la memory pour task_struct à l'aide de Slab Allocator. Maintenant vous pouvez requestr quelle est la relation entre ceux-ci?

Pour comprendre que vous devez comprendre comment fonctionne Slab Allocator.

Sans le Slab Allocator, les développeurs du kernel pourraient allouer de la memory pour task_struct dans la stack du kernel pour le process particulier afin de pouvoir y accéder facilement. Maintenant avec l'avènement de Slab Allocator, la memory est allouée à la task_struct comme déterminé par le Slab Allocator. Donc, avec le Slab Allocator, vous avez task_struct stocké ailleurs et pas dans la stack du kernel du process particulier. Maintenant, les développeurs du kernel ont introduit thread_info et ont placé un pointeur à l'endroit où réside la task_struct . Et c'est pourquoi nous devons vivre avec thread_info .

Vous pouvez lire sur Slab Allocator dans le livre de Robert Love Linux Kernel Development.

Les process légers n'ont pas de task_struct ; une stack et une petite quantité d'informations seraient suffisantes. Plusieurs LWP partagent la même task_struct , qui contient toutes les descriptions de ressources.