Domanda

Attualmente sto sfogliando il manuale dell'architettura ARM per il core ARMv7.Nel capitolo A3.5.3 sull'atomicità degli accessi alla memoria, si afferma:

Se un carico atomico a copia singola si sovrappone a un archivio atomico a copia singola e per uno qualsiasi dei byte sovrapposti il ​​carico restituisce i dati scritti dalla scrittura inserita nell'ordine di coerenza di quel byte dal negozio atomico a copia singola, quindi il carico deve restituire Dati da un punto nell'ordine di coerenza non prima delle scritture inserite nell'ordine di coerenza dal negozio atomico a copia singola di tutti i byte sovrapposti.

Non essendo madrelingua inglese, ammetto di avere un po' di difficoltà nel comprendere questa frase.

Esiste uno scenario in cui le scritture su un byte di memoria non sono inserite nell'ordine di coerenza e quindi quanto sopra non si applica?In caso contrario, ho ragione nel dire che abbreviare e riformulare la frase come segue:

Se il carico restituisce almeno un byte della scrittura, il carico deve restituire tutti i byte sovrapposti da un punto non prima di dove la scrittura li ha inseriti nell'ordine di coerenza di tutti i byte sovrapposti.

ha ancora lo stesso significato?

È stato utile?

Soluzione

Vedo quella dicitura nell'ARM ARMv8, che cerca davvero di rimuovere ogni possibile ambiguità in molti punti (anche se rende praticamente illeggibile la sezione di ordinamento della memoria).

In termini di comprensione generale (al contrario di in realtà implementazione le specifiche), un po' di ambiguità non sempre fa male, quindi anche se non riesce a farcela assolutamente chiaro cosa significa "posizione di memoria", penso che il vecchio manuale v7 (DDI0406C.b) sia una lettura migliore in questo caso:

Un'operazione di lettura o scrittura è atomica a copia singola se le seguenti condizioni sono entrambe vere:

  • Dopo un numero qualsiasi di operazioni di scrittura in una posizione di memoria, il valore della posizione di memoria è il valore scritto da una delle operazioni di scrittura.È impossibile che parte del valore della posizione di memoria provenga da un'operazione di scrittura e un'altra parte del valore provenga da un'operazione di scrittura diversa

  • Quando un'operazione di lettura e un'operazione di scrittura vengono eseguite nella stessa posizione di memoria, il valore ottenuto dall'operazione di lettura è uno tra:

    • il valore della posizione di memoria prima dell'operazione di scrittura
    • il valore della posizione di memoria dopo l'operazione di scrittura.

    Non accade mai che il valore dell'operazione di lettura sia in parte il valore della posizione di memoria prima dell'operazione di scrittura e in parte il valore della posizione di memoria dopo l'operazione di scrittura.

Quindi la tua comprensione è giusta: il punto determinante di un'operazione atomica a copia singola è che in qualsiasi momento puoi vedere solo o Tutto di esso, o nessuno di esso.

C'è un caso nella v7 in cui (se lo interpreto correttamente) due negozi atomici normalmente a copia singola che si trovano nella stessa posizione contemporaneamente ma con dimensioni diverse infrangono ogni garanzia di atomicità, quindi in teoria potresti osservarne alcuni mix inaspettato di byte lì: sembra essere stato rimosso nella v8.

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