Domanda

  1. Can due CPU tengono due "diversi" di spin serrature contemporaneamente allo stesso tempo?

  2. Quindi ... significa questo:? Una CPU (monoprocessore) sigle non può contenere due spinlocks "diversi", allo stesso tempo

  3. Quindi ... significa questo:. Il numero di spinlocks su una singola CPU non può essere> 1

PS:. "Diverso" che implica spinlock associata a diverse risorse di memoria


Qualcuno sa come spinlocks funziona internamente? ... Insomma, fanno congelare bus durante le operazioni di set di prova? Googled ma nessuna risposta assoluta.

È stato utile?

Soluzione

Uno spin-lock è più o meno solo un int condiviso, al quale sono sincronizzati scrive. Non v'è nessuna bandiera speciale per il processore. Così si può acquistare più di una spin-serratura. (Non si dovrebbe ...)

Per evitare monoprocessore sistema di bloccarsi, finestre solleva l'IRQL a DISPATCH_LEVEL. Il processore può avere una sola 'filo' esecuzione a DISPATCH_LEVEL, così bloccando multipli spin-serrature, allo stesso tempo, è sicuro su questi sistemi.

L'applicazione dovrebbe essere come questo: (non è vero al 100%, e può divergere a causa di dettagli)

LONG lock = 0;

KeAcquireSpinlock( ... )
{
    // raise irql. etc.
    while( InterlockedExchange( &lock, 1 ) != 0 ) 
        /* do nothing*/;
}

KeReleaseSpinLock( ... )
{
     InterlockedExchange( &lock, 0 );
     // lower irql ... etc.
}

garanzie InterlockedExchange che lo scambio avvenga atomicamente per tutti i processori sullo stesso bus di memoria. Così deve bloccare il bus di memoria, o almeno forza la proprietà esclusiva della linea di cache specifica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top