Mise en œuvre du threading

Je voulais savoir comment implémenter ma propre bibliothèque de threads.
Ce que j’ai est un processeur (architecture PowerPC) et la bibliothèque standard C.

Existe-t-il une implémentation légère open source que je puisse examiner?

Dans sa forme la plus simple, un thread aura besoin de:

  1. Un peu de mémoire pour la stack
  2. Quelque part pour stocker son contexte (c.-à-d. Contenu du registre, compteur de programme, pointeur de stack, etc.)

En plus de cela, vous devrez implémenter un simple “kernel” qui sera responsable du changement de thread. Et si vous essayez d’implémenter un threading préventif, vous aurez également besoin d’une source périodique d’interruptions. par exemple. une timer. Dans ce cas, vous pouvez exécuter votre code de commutation de thread dans l’interruption du minuteur.

Examinez les routines setjmp () / longjmp () et la structure jmp_buf correspondante. Cela vous donnera un access facile au pointeur de stack afin que vous puissiez affecter votre propre espace de stack et vous fournira un moyen simple de capturer tout le contenu du registre pour fournir le contexte de votre thread.

Typiquement, la fonction longjmp () est un wrapper pour un retour d’instruction d’interruption, ce qui est très pratique si la fonctionnalité de planification de thread est utilisée dans l’interruption du minuteur. Vous devrez cependant vérifier l’implémentation de longjmp () et jmp_buf pour votre plate-forme.

Essayez de rechercher des implémentations de threads sur des microprocesseurs plus petits, qui n’ont généralement pas de système d’exploitation. par exemple. Atmel AVR ou Microchip PIC. Par exemple: discussion sur AVRFreaks

Pour une bibliothèque de threads décente, vous avez besoin de:

  • opérations atomiques pour éviter les courses (pour implémenter par exemple un mutex)
  • un certain support OS pour faire la planification et éviter les files d’attente
  • un support OS pour implémenter le changement de contexte

Tous les trois quittent la scope de ce que C99 vous offre. Les opérations atomiques sont introduites dans C11. Jusqu’à présent, les implémentations de C11 ne semblaient pas prêtes. Elles sont donc généralement implémentées dans un assembleur. Pour les deux derniers, vous devrez vous fier à votre système d’exploitation.

Peut-être que vous pourriez regarder C ++ qui supporte les threads. Je commencerais par choisir quelques-unes de leurs primitives les plus utiles (par exemple, les futures), voir comment elles fonctionnent et faire une mise en œuvre simple.