Lines Matching full:per
15 decine di migliaia). Per esempio un blocco nella struttura inode è una classe,
21 possono essere interpretate come il loro ordine; per esempio L1 -> L2 suggerisce
23 vista di lockdep, i due blocchi (L1 ed L2) non sono per forza correlati: quella
33 rimossa quando il suo spazio in memoria viene reclamato. Per esempio, questo
61 graffe, per un totale di `2 * n` (`n`: bit STATO). Un esempio inventato::
69 Per un dato blocco, da sinistra verso destra, la posizione del bit indica l'uso
70 del blocco e di un eventuale blocco di lettura, per ognuno degli `n` STATI elencati
71 precedentemente. Il carattere mostrato per ogni bit indica:
89 Per un dato STATO, che il blocco sia mai stato acquisito in quel contesto di
104 fatta anche per '+'
109 Regole dello stato per un blocco singolo
117 Una classe softirq insicura è automaticamente insicura anche per hardirq. I
127 verificarsi uno stallo. Per esempio, questo blocco viene acquisito, ma prima di
132 Il validatore rileva e riporta gli usi di blocchi che violano queste regole per
135 Regole per le dipendenze di blocchi multipli
148 aspettano per sempre che l'altro termini. Il validatore è in grado di trovare
160 trattenuto in un contesto d'interruzione che, per definizione, ha la possibilità
167 Le suddette regole vengono applicate per qualsiasi sequenza di blocchi: quando
198 gerarchia), ed il kernel tratterrà i blocchi in questo ordine prefissato per
208 Per istruire il validatore riguardo a questo uso corretto dei blocchi sono stati
209 introdotte nuove primitive per specificare i "livelli di annidamento". Per
210 esempio, per i blocchi a mutua esclusione dei *block-dev* si avrebbe una
235 Si possono utilizzare due costrutti per verificare ed annotare se certi blocchi
241 generato un WARN()). Queste vengono usate abbondantemente nel kernel, per
252 dove aver trattenuto rq->lock è necessario per aggiornare in sicurezza il clock
256 solo per rq->lock ATM. Se per caso un blocco non viene trattenuto, queste
262 restituisce 'struct pin_cookie' che viene usato da lockdep_unpin_lock() per
263 verificare che nessuno abbia manomesso il blocco. Per esempio in
280 vitali per scovare problemi di sincronizzazione, ed inoltre forniscono lo stesso
287 Il validatore verifica la proprietà di chiusura in senso matematico. Ovvero, per
293 In pratica, per dimostrare l'esistenza di uno stallo non servono complessi
305 una verifica per ogni possibile combinazione di sincronizzazione fra processori,
315 assumiamo che un hash a 64-bit sia unico per ogni sequenza di
324 per la sua lentezza se le avessimo fatte davvero per ogni blocco trattenuto e
325 per ogni abilitazione delle interruzioni. La complessità della verifica è
326 O(N^2), quindi avremmo dovuto fare decine di migliaia di verifiche per ogni
327 evento, il tutto per poche centinaia di classi.
329 Il problema è stato risolto facendo una singola verifica per ogni 'scenario di
331 Per farlo, viene mantenuta una pila dei blocchi trattenuti, e viene calcolato un
332 hash a 64-bit unico per ogni sequenza. Quando la sequenza viene verificata per
353 caricamento crea un nuovo insieme di classi di blocco per tutti i blocchi di
360 inizializzati. Per esempio, una tabella hash con 8192 *bucket* dove ognuno ha
378 quella di trovare le classi non funzionanti. Per prima cosa, il seguente comando
389 essere utilizzato per identificare le classi di blocchi problematiche::
394 un'esecuzione successiva per identificare eventuali problemi. Questo stesso
407 rcu_read_lock()). D'ora in poi, per questi tipi di bloccatori, useremo la
410 W o E: per gli scrittori (bloccatori esclusivi) (W dall'inglese per
411 *Writer*, ed E per *Exclusive*).
413 r: per i lettori non ricorsivi (r dall'inglese per *reader*).
415 R: per i lettori ricorsivi (R dall'inglese per *Reader*).
417 S: per qualsiasi lettore (non ricorsivi + ricorsivi), dato che entrambe
418 sono bloccatori condivisi (S dall'inglese per *Shared*).
420 N: per gli scrittori ed i lettori non ricorsivi, dato che entrambe sono
452 Condizioni bloccanti per lettori/scrittori su uno stesso blocco
478 Al contrario dei blocchi per lettori non ricorsivi, quelli ricorsivi vengono
480 attende il rilascio. Per esempio::
490 non produce uno stallo per i lettori ricorsivi, in quanto il processo B rimane
495 Da notare che in funzione dell'operazione di blocco usate per l'acquisizione (in
499 ricorsivo). In altre parole, per un'istanza di blocco esistono tre tipi di
526 dipendenze. Tuttavia, vi mostreremo che 4 sono sufficienti per individuare gli
529 Per ogni dipendenza fra blocchi avremo::
534 contesto di esecuzione. Per quanto riguarda l'individuazione degli stalli, ci
539 lettori ricorsivi e non per L1 (perché bloccano gli stessi tipi) e possiamo
540 combinare scrittori e lettori non ricorsivi per L2 (perché vengono bloccati
566 loro. Per esempio::
581 Usiamo -(xN)-> per rappresentare i rami sia per -(EN)-> che -(SN)->, allo stesso
610 è sia sufficiente che necessario per avere gli stalli, dunque averli equivale
612 forte significa che può causare stalli, per questo lo definiamo "forte", ma ci
632 Per prima cosa facciamo sì che un processo/processore prenda L1 in L1 -> L2, poi
643 In aggiunta, possiamo trarre una simile conclusione per chi sta trattenendo L2:
666 Per un blocco Lx, il processo Px contribuisce alla dipendenza Lx-1 -> Lx e Px+1
671 -(xR)-> -(Sx)->. Questo è vero per ogni ciclo, dunque, questo è un ciclo forte.