41 | | * Il y a des implémentations avec des timeouts, ou avec distribution de tickets pour un traitement dans l'ordre,... |
42 | | ''' |
43 | | }}} |
44 | | 1. Nous avons vu 4 mécanismes permettant de réaliser une "séquence atomique" pour les opérations read-modify-write. Que signifie "séquence atomique"? Est-ce que cela a un rapport avec les interruptions ? Parmi les 4 solutions, laquelle allons-nous utiliser et pourquoi ? |
45 | | {{{#!protected ------------------------------------------------------------------ |
46 | | ''' |
47 | | * |
48 | | ''' |
49 | | }}} |
50 | | 1. Si deux threads A et B veulent prendre un verrou libre V et effectue la séquence LL/SC sur le verrou V : A exécute LL en premier et voit le verrou libre, puis B exécute à son LL et voit aussi le verrou libre? Les deux threads vont faire un SC. En fonction de l'ordre des SC, qui va pouvoir prendre le verrou ? |
51 | | {{{#!protected ------------------------------------------------------------------ |
52 | | ''' |
53 | | * |
| 41 | * Il y a des implémentations avec des timeouts, ou avec distribution de tickets pour un traitement dans l'ordre, et d'autres. |
| 42 | ''' |
| 43 | }}} |
| 44 | 1. Nous avons vu 4 mécanismes permettant de réaliser une "séquence atomique" pour les opérations read-modify-write. Que signifie ici "séquence atomique"? Est-ce que cela a un rapport avec les interruptions ? Parmi les 4 solutions, laquelle allons-nous utiliser et pourquoi ? |
| 45 | {{{#!protected ------------------------------------------------------------------ |
| 46 | ''' |
| 47 | * Une séquence atomique, dans notre contexte, est une séquence d'instructions qui ne peut être interrompue, ou si elle l'est on peut le savoir. Ça n'a pas de rapport directe avec les interruption, mais en général, les séquences atomiques ne sont pas interruptibles et sont bornées dans le temps. |
| 48 | * On utilise les couples d'instructions LL/SC parce que le MIPS ne propose pas les instructions CAS et TAS et qu'il n'y a pas de mémoire de verrou. |
| 49 | ''' |
| 50 | }}} |
| 51 | 1. Si deux threads A et B veulent prendre un verrou libre V et effectue la séquence LL/SC sur le verrou V : A exécute LL en premier et voit le verrou libre, puis B exécute à son LL et voit aussi le verrou libre. Les deux threads vont faire un SC. En fonction de l'ordre des SC, qui va pouvoir prendre le verrou ? |
| 52 | {{{#!protected ------------------------------------------------------------------ |
| 53 | ''' |
| 54 | * C'est le premier qui fait SC qui emporte la mise, avec la séquence vue en cours pour le spin_lock. Puisque le suivant, se verra refuser son SC étant donnée qu'il y a eu une opération mémoire autre que LL sur ce verrou. |