= Mutek''p'' = [[PageOutline]] Bienvenue sur le site du projet.[[BR]] MUTEKP est un noyau de système d’exploitation pour des architectures multiprocesseur intégrées sur puce de type MPSoCs. Muni d'un code claire et facile à lire, MUTEKP a été crée dans le but de disposer d’un noyau embarqué à vocation pédagogique[[BR]] implémentant l’API des threads POSIX sur des architectures MPSoCs en mettant en avant les concepts système utilisés.[[BR]] Il servira comme support pédagogique dans différents modules du MASTER ACSI. = Manuel d'utilisation = == I. Organisation des bibliothèques système == La figure suivante illustre la modalisation du système : [[Image(modalisation_mutekp.PNG, nolink)]][[BR]] Les bibliothèques constituant le système sont : * pthread : contient l’implémentation d’un sous-ensemble des thread POSIX. * libc : contient l’implémentation des services système tel que malloc, printf, pipe, memcpy …etc. * mwmr : contient l’implémentation du protocole MWMR. * cpu : contient le code système en assembleur qui dépend de type des processeurs de la plate-forme. * arch : contient le code C qui dépend de la plate-forme tel que des configurations système vis-à-vis des composants de la plate-forme, les ISR d’interruption des différant types de cibles …etc. Les bibliothèques pthread, libc et mwmr sont indépendantes de la spécification de la plate-forme. En cas de modification au niveau de la configuration matériel, il suffit d’adapter le code système des deux bibliothèques cpu et arch pour pouvoir déployer MUTEKP sur la nouvelle plate-forme. == II. API du système == MUTEKP fourni trois bibliothèques pour les threads de l’application : * Un sous-ensemble de l'API des threads POSIX : * [wiki:pthread_attr_init]: initier la structure d’un attribut. * [wiki:pthread_create]: créer une tâche * [wiki:pthread_exit]: mettre fin à une tâche avec une valeur de retour * [wiki:pthread_self]: Donner l’indenté du thread appelant. * [wiki:pthread_equal]: tester l’égalité entre deux identificateur. * [wiki:pthread_yield]: céder le processeur pour un autre thread. * [wiki:pthread_join]: attendre la fin d’un thread. * [wiki:pthread_spin_init]: initialiser un verrou à une attente active. * [wiki:pthread_spin_destroy]: détruire un verrou. * [wiki:pthread_spin_lock]: verrouiller le verrou à une attente active. * [wiki:pthread_spin_trylock]: version non bloquante de pthread_spin_lock. * [wiki:pthread_spin_unlock]: déverrouiller le verrou à une attente active. * Les fonctions implémentant le protocole MWMR : * [wiki:mwmr_read]: lecture d’un FIFO MWMR. * [wiki:mwmr_write]: écriture dans un FIFO MWMR. * [wiki:mwmr_init]: création et initialisation d’un FIFO MWMR. * Quelques fonctions de la bibliothèque libC : * [wiki:printf]: afficher une chaîne de caractère formatée. * [wiki:malloc]: allocation de mémoire dynamique. * [wiki:pipe]: créer un tube de communication (par flux d’octets) enter deux threads. * [wiki:read]: pour lire d’un buffer ou un tube. * [wiki:write]: pour écrire dans un buffer ou un tube. * [wiki:memset]: remplir une zone mémoire par une valeur donnée. * [wiki:memcpy]: copie une zone moire source vers une autre zone mémoire distination. La norme POSIX ne propose pas dans son API pthread aucun appel permettant d’affecter ou de spécifier un thread à un processeur donné.[[BR]] MUTEKP propose l’appel [wiki:pthread_attr_setprocid_np] qui permet d’affecter un numéro de processeur à un attribut. Cela permettra de préciser sur quel processeur le nouveau thread va-t-il s’exécuter. == III. L’Organisation des fichiers systèmes == == IV. La génération d’une application == == V. Description de la plateforme == = Manuel de développement = == I. La plate-forme matérielle == == II. Architecture du MUTEKP == == III. Introduction au noyau MUTEKP == === III.1 Le concept d’un thread dans le système === === III.2 États d’un thread === === III.3 Les transitions d’états === === III.4 Ordonnancement des threads === === III.5 Organisation et gestion de la mémoire === ==== III.5.1 L’organisation mémoire ==== ==== III.5.2 La gestion mémoire ==== === III.6 Le buffer système === == IV. Détaille du noyau et les structures de données système == === IV.1 Gestion des threads === ==== IV.1.1 La structure de donnée du thread ==== ==== IV.1.2 La structure de donnée Ordonnanceur et la table d’ordonnancement ==== === IV.2 Gestion de la mémoire === ==== IV.2.1 La structure gestionnaire mémoire ==== === IV.3 Gestion des périphériques === ==== IV.3.1 La structure gestionnaire des verrous ==== ==== IV.3.2 Représentation des cibles (TTY, Timer et ICU) ==== === IV.4 Gestion des interruptions === [wiki:BrouillonAlmaless] [wiki:test]