Frage

  1. Can zwei CPUs halten zwei "unterschiedliche" Drehsperren gleichzeitig zur gleichen Zeit?

  2. So ... bedeutet das: eine Sigle (Uniprozessor) CPU kann nicht zwei "anders" spinlocks zugleich halten

  3. So ... bedeutet das:. Die Anzahl der Spinlocks auf einer einzigen CPU kann nicht sein> 1

PS:. "Anders" impliziert spinlock im Zusammenhang mit verschiedenen Speicherressourcen


Weiß jemand, wie spinlocks intern arbeiten? ... ich meine, frieren sie Bus während Testset Operationen? Ich habe gegoogelt aber keine absolute Antwort.

War es hilfreich?

Lösung

Ein Spin-Lock ist mehr oder weniger nur eine gemeinsame int, auf die Schreib synchronisiert ist. Es gibt keine spezielle Flagge für den Prozessor. So können Sie mehr als ein Spin-Lock erwerben. (Sie sollten nicht ...)

Uni-Prozessor-System Um zu verhindern, Einsperren, Fenster werfen die IRQL DISPATCH_LEVEL. Der Prozessor nur einen ‚Faden‘ hat, kann bei DISPATCH_LEVEL ausgeführt wird, so dass mehrere Spin-Sperren zugleich sperrt, ist sicher auf diesen Systemen.

Die Umsetzung so sein sollte: (nicht 100% wahr und kann aufgrund Details abweichen)

LONG lock = 0;

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

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

InterlockedExchange garantiert, dass der Austausch geschieht atomar für alle Prozessoren auf dem gleichen Speicherbus. So muss es den Speicher-Bus sperrt oder zumindest Kraftalleineigentum der jeweiligen Cache-Zeile.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top