Changes between Version 18 and Version 19 of AS6-TME-B7


Ignore:
Timestamp:
Apr 12, 2022, 3:22:03 PM (2 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AS6-TME-B7

    v18 v19  
    3939 * Une opération de déverrouillage pour le mettre à 0 : `spin_unlock(lock)`
    4040 * Parfois, on a des API où `spin_lock()` est nommée `lock_acquire()` et `spin_unlock()` est nommée `lock_release()`, mais c'est la même idée. `spin` fait bien pensée que c'est une attente active, c'est mieux je trouve.
    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}}}
     441. 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}}}
     511. 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.
    5455'''
    5556}}}
     
    5758{{{#!protected ------------------------------------------------------------------
    5859'''
    59  *
     60 * Non, le couple d'instructions LL/SC n'a pas le problème ABA. En effet, si on fait un compteur avec LL/SC. LL lit une valeur, on l'incrémente, et on tente d'écrire la valeur incrémentée avec un SC. S'il y eu des changement sur le compteur en mémoire, le SC sera refusé.
     61Ce qui ne serait pas le cas avec un CAS.
    6062'''
    6163}}}
     
    74761. Un thread passe de l'état RUNNING à l'état ZOMBIE lorsqu'il appelle `thread_exit()`. Quand passe-t-il à l'état DEAD ?
    7577{{{#!protected ------------------------------------------------------------------
    76 '''
    77  *
     78'''  *
    7879'''
    7980}}}