= Politique d'attribution des boîtes aux lettres des WTI = [[PageOutline]] L'architecture [https://www-soc.lip6.fr/trac/tsar TSAR] possède un composant [http://www.soclib.fr/trac/dev/wiki/Component/VciIopic Iopic]. Ce composant permet à un périphérique externe d'écrire à une adresse donnée. Ce périphérique est principalement utilisé pour écrire dans certains registres du composant [http://www.soclib.fr/trac/dev/wiki/Component/VciXicu Xicu]. Ces registres sont des boîtes aux lettres, lorsque l'une de ces boîtes a été écrite alors l'Xicu lévera une interruption et le processeur concerné exécutera l'ISR associée. [[Image(WTI.png)]] On appelle ces interruptions des **Write Triggered Interruptions (WTI)** car elles sont déclenchées par une opération d'écriture dans les registres boîtes aux lettres de l'Xicu. == Attribution des boîtes aux lettres == Chaque cluster possède une Xicu qui contient 16 boîtes aux lettres, 4 sont réservées pour les interruptions inter-processeur (Inter Process Interruption ou IPI). Les périphériques externes peuvent donc utiliser 12 de ces boîtes aux lettres afin de signaler la fin de l'opération d'entrée sortie et qu'il faut donc lancer l'ISR associée à ce périphérique. Nous avons choisi une politique d'attribution des boîtes aux lettres inspirée de celle du [https://www-soc.lip6.fr/trac/giet-vm/wiki/kernel_interrupts GIET-VM]. Chaque cœur est responsable d'un certains nombre de boîte aux lettres, c'est-à-dire qu'il exécutera les ISR des interruptions venant de ses boîtes aux lettres. Afin d'équilibrer la charge entre les différents cœur il a été décidé d'utiliser une stratégie d'allocation basée sur le [https://fr.wikipedia.org/wiki/Round-robin_(informatique) round robin]. Un **index** indiquera la boîte suivant la dernière boîtes aux lettres allouées, la recherche d'une boîte libre s'effectuera circulairement à partir de cet index. [[Image(responsibility.svg)]] Sur la figure, B8 est la dernière boîte à avoir été allouée (l'index pointe sur B9). La recherche aura donc lieu à partir de B9, or B9 est déjà utilisée. Par conséquent ce sera B10 qui sera allouée, l'index pointera sur B11 et ce sera le processeur P3 qui exécutera l'ISR. == Déroulement d'une opération d'entrée/sortie avec un périphérique externe == Chaque périphérique externe est protégé par un verrou global, donc pour pouvoir réaliser une opération d'entrée/sortie avec l'un de ces périphériques il faut d'abord prendre ce verrou. Nous avons décidé qu'avant de prendre le verrou du périphérique le processeur devait s'assurer d'avoir obtenu une boîte aux lettres. En effet, il est plus facile d'obtenir une boîte aux lettres car il y en a 12 par cluster et qu'elles sont partagées uniquement par les cœur du cluster. //A contrario//, les périphériques sont uniques et tous les cœurs de l'architecture sont en concurrence pour les accéder. Une fois la boîte aux lettres et le verrou du périphérique obtenus il faudra configurer l'Iopic afin que celui-ci écrive dans la boîte aux lettres. [[Image(allocation.svg)]]