Nel kernel di Linux, per memorizzare le regioni di memoria di un processo, Linux utilizza sia un elenco collegato che un albero rosso-nero. find_vma è una funzione che individua la prima regione di memoria il cui campo vm_end è maggiore dell'indirizzo passato attraverso l'albero nero rosso. Tuttavia, trovo che non ci sia protezione (come un lucchetto) per l'albero nero rosso dentro find_vma(). Cosa succede se un altro thread chiama la funzione rb_erase per eliminare alcuni elementi sull'albero allo stesso?è un albero nero rosso nel kernel non protetto?
5
A
risposta
2
Sì, la chiamata della funzione find_vma è protetta dall'accesso simultaneo tramite semaforo. Nello scheduler anche la funzione viene utilizzata con le chiamate al semaforo.
2209 down_read(&mm->mmap_sem);
2210 vma = find_vma(mm, start);
....
up_read(&mm->mmap_sem);
mmap_sem is used to protect this function call which is a read-write semaphore.
struct rw_semaphore mmap_sem; defined inside struct mm_struct.
Problemi correlati
- 1. Albero rosso-nero - Nero Limite di altezza
- 2. Mucchio o albero rosso-nero?
- 3. Un albero rosso-nero è la mia struttura dati ideale?
- 4. Può esistere ogni albero rosso-nero valido?
- 5. Come la mappa ad albero utilizza l'algoritmo albero nero rosso
- 6. Trie vs albero rosso-nero: quale è meglio nello spazio e nel tempo?
- 7. Utilizzo dell'implementazione interna di albero rosso-nero di STL
- 8. Ordine di inserimento nel caso peggiore altezza nera di un albero nero rosso
- 9. Alberi rosso-nero - Cancellazione di un nodo con due bambini non fogliari
- 10. Perché l'implementazione basata sull'albero rosso-nero per Java TreeMap?
- 11. Cambio hearbeat led su beaglebone nero con overlay albero dispositivo
- 12. Javascript: serve una discreta implementazione dell'albero nero rosso
- 13. Initramfs integrato nel kernel Linux personalizzato non è in esecuzione
- 14. Come salvare la memoria quando si memorizzano le informazioni sul colore in Alberi rosso-nero?
- 15. Caricamento modulo kernel nel kernel Android
- 16. Xcode: libpods.a è rosso
- 17. È possibile eseguire un kernel pypy nel notebook Jupyter?
- 18. Il segno di spunta Ascii è sempre rosso nel cellulare
- 19. L'indirizzo nel kernel
- 20. Come memorizzare un albero nel database SQL
- 21. Impossibile visualizzare un albero Git nel terminale
- 22. Errore nel caricatore bootstrap e nel kernel
- 23. ignora l'interno protetto con protetto!
- 24. su typecheck nel kernel linux
- 25. Cronometraggio nel kernel Linux 2.6
- 26. Un albero binario contiene un altro albero?
- 27. . Il prodotto in serie è rosso, non importa cosa
- 28. Spring Security - controlla se l'URL web è protetto/protetto
- 29. build.gradle è protetto dalla decompilazione?
- 30. Quanto è protetto ProtectedData.Protect (DPAPI)?
Non è gestito tramite RCU? – Joe
Sembra che 'find_vma' stesso debba essere chiamato con una certa protezione dall'accesso simultaneo (modifica). @Joe: Diversamente dalle liste, l'albero rb non può essere protetto da RCU. – Tsyvarev
@Tsyvarev Grazie per la risposta. Sono d'accordo con te. Ad esempio, in [sys_msync] (http://lxr.free-electrons.com/source/mm/filemap.c?v=2.4.37#L2381) (la chiamata di sistema di 'msync'), chiama' down_read (& current-> mm-> mmap_sem) 'prima e poi' find_vma'. Questo protegge l'albero nero rosso? – HuangJie