Da quello che ho potuto capire:Linux spin_lock vs NT KeAcquireSpinLock
- NT
KeAcquireSpinLock
equivale aspin_lock_bh
: quella IRQL eleva a DISPATCH_LEVEL, le altre maschere le mezze interrupt fondo - funzionalmente lo stesso. Mentre la variante NT mantiene OldIrql, la variante di Linux non sembra memorizzare "wereInterruptsAlreadyMasked" ovunque. Questo significa chespin_unlock_bh
li smaschera sempre? - NT
KeAcquireInterruptSpinLock
è comespin_lock_irqsave
.
Qual è l'equivalente NT di spin_lock
?
Se spin_unlock_bh
smaschera sempre interrupt (in NT-parlare, scende sempre IRQL a < DISPATCH_LEVEL), significa spin_lock
è simile a KeAcquireSpinLockAtDpcLevel
?
Come indicato: il blocco della finestra viene eseguito tramite il processo IRQL. Quindi se questo concetto non è presente su linux quindi seguendo la logica spin_lock non ha effettivamente un equivalente diretto dato che entrambi i sistemi operativi usano meccanismi leggermente diversi per ottenere la stessa cosa – LordDoskias
IRQL è un'astrazione oltre a mascheramento di interrupt e Linux ovviamente ha quello Quello che mi chiedo è lo scenario per cui spin_lock è utile, e perché la gente di NT non ha supportato questo scenario? – Ilya
Inoltre, ho rivisto la mia domanda seguendo alcune altre cose che ho capito: spin_lock_bg. – Ilya