8 - Périphériques initiateurs
}}}
{{{#!protected
Pas de question de cours cette fois. Je vais vous demander de lire et de commenter dans le compte-rendu les codes proposés.
== 01_sequentiel
[[Image(htdocs:img/image-seq.png,nolink,center,height=300)]]
Dans cette version, il n'y a pas d'OS, tout est fait dans la fonction `kinit()`
Les trois étapes (lecture disque, traitement, affichage) sont faites séquentiellement
**Questions**
- Ouvrez le code pour voir la boucle de traitement.
- Faites tourner la simulation, la durée de chaque étape s'affichent. Que pouvez-vous en conclure ?
- Essayez de retirer les invalidations du cache (dans `harch.c`), observez et expliquer le comportement.
- Expliquez l'usage des couples de variables globales (`BDBusy` et `BDLock`) et (`DMABusy` et `DMALock`) utilisées pour la synchronisation des étapes.
== 02_parallel
[[Image(htdocs:img/image-parallel.png,nolink,center,height=230)]]
Dans cette version, les trois étapes sont faites en parallèle sous la forme d'un pipeline avec deux couples de buffer utilisés en altenance.
{{{
- Disk->BD->BUFIN[0]
- Disk->BD->BUFIN[1] & BUFIN[0]->CPU->BUFOUT[O]
- Disk->BD->BUFIN[0] & BUFIN[1]->CPU->BUFOUT[1] & BUFOUT[0]->DMA->FBF
- Disk->BD->BUFIN[1] & BUFIN[0]->CPU->BUFOUT[0] & BUFOUT[1]->DMA->FBF
- Disk->BD->BUFIN[0] & BUFIN[1]->CPU->BUFOUT[1] & BUFOUT[0]->DMA->FBF
- Disk->BD->BUFIN[1] & BUFIN[0]->CPU->BUFOUT[0] & BUFOUT[1]->DMA->FBF
- Disk->BD->BUFIN[0] & BUFIN[1]->CPU->BUFOUT[1] & BUFOUT[0]->DMA->FBF
- Disk->BD->BUFIN[1] & BUFIN[0]->CPU->BUFOUT[0] & BUFOUT[1]->DMA->FBF
- etc.
}}}
**Questions**
- Qu'est ce qu'on gagne à procéder ainsi ?
- Est-ce qu'on peut gagner plus et si oui comment faire (en supposant qu'on a plusieurs processeurs dans le SoC).
== 03_sdl
Le code ici utilise la version de ko6 vue dans les TP précédents.
{{{
}}}