Domanda

Mi sono sempre chiesto che cosa sono: ogni volta che sento su di loro, le immagini di dispositivi a volano-like futuristici andare a ballare (rolling?) Attraverso la mia mente ...

Cosa sono?

È stato utile?

Soluzione

Quando si utilizza serrature regolari (mutex, le sezioni critiche, ecc), il sistema operativo mette il tuo thread nello stato di attesa e preempts esso pianificando altri thread sullo stesso nucleo. Questo ha una penalizzazione delle prestazioni se il tempo di attesa è molto breve, perché il filo deve ora attendere una prelazione per ricevere di nuovo tempo di CPU.

Inoltre, oggetti del kernel non sono disponibili in ogni stato del kernel, ad esempio in un gestore di interrupt o quando paging non è disponibile ecc

spinlocks non causano prelazione ma aspettare in un ciclo ( "spin") fino a quando le altre uscite principali della serratura. Ciò impedisce che il filo di perdere le sue href="https://en.wikipedia.org/wiki/Preemption_(computing)#Time_slice" quantistica e continuano appena il blocco viene rilasciato. Il semplice meccanismo di spinlocks permettono un kernel di utilizzare in quasi ogni stato.

Ecco perché su una singola macchina nucleo uno spinlock è semplicemente un "interrupt disabilitare" o "alzare IRQL" che impedisce scheduling filo completamente.

spinlocks infine consentire kernel per evitare s "Big Kernel Lock" (un blocco acquisita quando nucleo entra kernel e rilasciato all'uscita) e hanno bloccaggio granulare su primitive kernel, causando meglio multielaborazione su macchine multicore quindi migliori prestazioni .

EDIT: Una domanda si avvicinò: "Vuol dire che dovrei usare spinlocks ove possibile?" e cercherò di rispondere:

Come ho già detto, spinlocks sono utili solo in luoghi dove hanno anticipato i tempi di attesa è più breve di un quantum (leggi: millisecondi) e prelazione non ha molto senso (per esempio kernel oggetti non sono disponibili).

Se il tempo di attesa è sconosciuta, o se siete in modalità spinlocks dell'utente non sono efficienti. Si consumano 100% il tempo di CPU sul core di attesa durante il controllo se uno spinlock è disponibile. Si impedisce altri thread di esecuzione su quel nucleo fino al vostro quantistica scade. Questo scenario è fattibile solo per brevi sequenze a livello kernel e un'opzione improbabile per un'applicazione in modalità utente.

Ecco una domanda a risolvere in modo che: spinlocks, come utili sono Essi

Altri suggerimenti

Di 'una risorsa è protetto da una serratura, un filo che vuole l'accesso alla risorsa ha bisogno di acquisire il blocco prima. Se il blocco non è disponibile, il filo potrebbe ripetutamente verificare se il blocco è stato liberato. Durante questo periodo il filo occupato aspetta, il controllo per il blocco, utilizzando CPU, ma non fare qualsiasi lavoro utile. Tale blocco è definito come un blocco di selezione.

E 'praticamente un ciclo che continua a andare fino a una certa condizione è soddisfatta:

while(cantGoOn) {};
 while(something != TRUE ){};
 // it happend
 move_on();

E 'un tipo di blocco che fa occupato in attesa

E 'considerato un anti-modello, fatta eccezione per molto basso livello di programmazione driver (dove può accadere che chiama una "corretta" la funzione attesa ha più luminosa di bloccaggio semplicemente occupato per alcuni cicli).

Si veda ad esempio spinlocks in Linux kernel .

spinlocks sono quelli in cui thread attende finché il blocco è disponibile. Questo sarà normalmente utilizzato per evitare sovraccarico di ottenere gli oggetti di kernel quando v'è un ambito di acquisizione dell'oggetto kernel entro un certo periodo di tempo piccole.

Esempio:

While(SpinCount-- && Kernel Object is not free)
{}

try acquiring Kernel object

Si consiglia di utilizzare uno spinlock quando si pensa che è più conveniente per entrare in un loop di attesa occupato e in comune una risorsa invece di bloccare quando la risorsa è bloccato.

  

Spinning può essere utile quando serrature sono a grana fine e grande numero (ad esempio, un blocco per nodo in una lista collegata) e quando i tempi di attesa di blocco sono sempre estremamente breve. In generale, mentre si tiene un blocco di selezione, si dovrebbe evitare di bloccare, chiamando tutto ciò che si può bloccare, tenendo più di uno spin lock in una sola volta, facendo in modo dinamico inviato chiamate (interfaccia e virtuals), rendendo spedito staticamente le chiamate a qualsiasi codice di un doesn' t proprio, o allocazione di memoria.

     

E 'anche importante notare che SpinLock è un tipo di valore, per motivi di prestazioni. In quanto tale, si deve essere molto attenti a non copiare accidentalmente un esempio SpinLock, come le due istanze (l'originale e la copia) sarebbero quindi essere completamente indipendenti l'uno dall'altro, il che comporterebbe probabilmente un comportamento errato dell'applicazione. Se un'istanza SpinLock deve essere passati in giro, dovrebbe essere passato per riferimento invece che per valore.

In poche parole, spinlock impiega atomica confronto e di scambio (CAS) o il test-and-set come istruzioni per realizzare serratura libera, attendere filo libera linguaggio sicura. Tali strutture scala bene in macchine multi-core.

E 'un anello che gira intorno fino a quando una condizione è soddisfatta.

Beh, sì - il punto di serrature di spin (vs un tradizionale sezioni critiche, ecc) è che essi offrono prestazioni migliori in alcune circostanze (sistemi multicore ..), perché non danno immediatamente il resto del quantum del thread .

Spinlock, è un tipo di blocco, che non è in grado di blocco e non-sonno-grado. Qualsiasi thread che vogliono acquisire uno spinlock per qualsiasi risorsa condivisa o critico continuamente girare, sprecando il ciclo di elaborazione della CPU fino a che non acquisire il blocco per la risorsa specificata. Una volta spinlock è acquisito, ma cercare di completare l'opera nella sua quantistica e quindi rilasciare la risorsa, rispettivamente. Spinlock è la più alta priorità tipo di serratura, semplicemente può dire, esso è non-preemptive tipo di serratura.

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