NOTE:
This is a version of Documentation/memory-barriers.txt translated into
Spanish by Carlos Bilbao <carlos.bilbao@amd.com>. If you find any
difference between this document and the original file or a problem with
the translation, please contact the maintainer of this file. Please also
note that the purpose of this file is to be easier to read for non English
(read: Spanish) speakers and is not intended as a fork. So if you have any
comments or updates for this file please update the original English file
first. The English version is definitive, and readers should look there if
they have any doubt.

			 ======================================
			 BARRERAS DE MEMORIA EN EL KERNEL LINUX
			 ======================================

Documento original: David Howells <dhowells@redhat.com>
    Paul E. McKenney <paulmck@linux.ibm.com>
    Will Deacon <will.deacon@arm.com>
    Peter Zijlstra <peterz@infradead.org>

Traducido por: Carlos Bilbao <carlos.bilbao@amd.com>
Nota: Si tiene alguna duda sobre la exactitud del contenido de esta
traducción, la única referencia válida es la documentación oficial en
inglés.

===========
ADVERTENCIA
===========

Este documento no es una especificación; es intencionalmente (por motivos
de brevedad) y sin querer (por ser humanos) incompleta. Este documento
pretende ser una guía para usar las diversas barreras de memoria
proporcionadas por Linux, pero ante cualquier duda (y hay muchas) por favor
pregunte. Algunas dudas pueden ser resueltas refiriéndose al modelo de
consistencia de memoria formal y documentación en tools/memory-model/. Sin
embargo, incluso este modelo debe ser visto como la opinión colectiva de
sus maintainers en lugar de que como un oráculo infalible.

De nuevo, este documento no es una especificación de lo que Linux espera
del hardware.

El propósito de este documento es doble:

 (1) especificar la funcionalidad mínima en la que se puede confiar para
     cualquier barrera en concreto, y

 (2) proporcionar una guía sobre cómo utilizar las barreras disponibles.

Tenga en cuenta que una arquitectura puede proporcionar más que el
requisito mínimo para cualquier barrera en particular, pero si la
arquitectura proporciona menos de eso, dicha arquitectura es incorrecta.

Tenga en cuenta también que es posible que una barrera no valga (sea no-op)
para alguna arquitectura porque por la forma en que funcione dicha
arquitectura, la barrera explícita resulte innecesaria en ese caso.

==========
CONTENIDOS
==========

 (*) Modelo abstracto de acceso a memoria.

     - Operaciones del dispositivo.
     - Garantías.

 (*) ¿Qué son las barreras de memoria?

     - Variedades de barrera de memoria.
     - ¿Qué no se puede asumir sobre las barreras de memoria?
     - Barreras de dirección-dependencia (históricas).
     - Dependencias de control.
     - Emparejamiento de barreras smp.
     - Ejemplos de secuencias de barrera de memoria.
     - Barreras de memoria de lectura frente a especulación de carga.
     - Atomicidad multicopia.

 (*) Barreras explícitas del kernel.

     - Barrera del compilador.
     - Barreras de memoria de la CPU.

 (*) Barreras de memoria implícitas del kernel.

     - Funciones de adquisición de cerrojo.
     - Funciones de desactivación de interrupciones.
     - Funciones de dormir y despertar.
     - Funciones varias.

 (*) Efectos de barrera adquiriendo intra-CPU.

     - Adquisición vs accesos a memoria.

 (*) ¿Dónde se necesitan barreras de memoria?

     - Interacción entre procesadores.
     - Operaciones atómicas.
     - Acceso a dispositivos.
     - Interrupciones.

 (*) Efectos de barrera de E/S del kernel.

 (*) Modelo de orden mínimo de ejecución asumido.

 (*) Efectos de la memoria caché de la CPU.

     - Coherencia de caché.
     - Coherencia de caché frente a DMA.
     - Coherencia de caché frente a MMIO.

 (*) Cosas que hacen las CPU.

     - Y luego está el Alfa.
     - Guests de máquinas virtuales.

 (*) Ejemplos de usos.

     - Buffers circulares.

 (*) Referencias.


====================================
MODELO ABSTRACTO DE ACCESO A MEMORIA
====================================

Considere el siguiente modelo abstracto del sistema:

		            :                :
		            :                :
		            :                :
		+-------+   :   +--------+   :   +-------+
		|       |   :   |        |   :   |       |
		|       |   :   |        |   :   |       |
		| CPU 1 |<----->| Memoria|<----->| CPU 2 |
		|       |   :   |        |   :   |       |
		|       |   :   |        |   :   |       |
		+-------+   :   +--------+   :   +-------+
		    ^       :       ^        :       ^
		    |       :       |        :       |
		    |       :       |        :       |
		    |       :       v        :       |
		    |       :   +--------+   :       |
		    |       :   |        |   :       |
		    |       :   | Disposi|   :       |
		    +---------->| tivo   |<----------+
		            :   |        |   :
		            :   |        |   :
		            :   +--------+   :
		            :                :

Cada CPU ejecuta un programa que genera operaciones de acceso a la memoria.
En la CPU abstracta, el orden de las operaciones de memoria es muy
relajado, y una CPU en realidad puede realizar las operaciones de memoria
en el orden que desee, siempre que la causalidad del programa parezca
mantenerse. De manera similar, el compilador también puede organizar las
instrucciones que emite en el orden que quiera, siempre que no afecte al
funcionamiento aparente del programa.

Entonces, en el diagrama anterior, los efectos de las operaciones de
memoria realizadas por un CPU son percibidos por el resto del sistema a
medida que las operaciones cruzan la interfaz entre la CPU y el resto del
sistema (las líneas discontinuas a puntos).

Por ejemplo, considere la siguiente secuencia de eventos:

	CPU 1		CPU 2
	===============	===============
	{ A == 1; B == 2 }
	A = 3;		x = B;
	B = 4;		y = A;

El conjunto de accesos visto por el sistema de memoria en el medio se puede
organizar en 24 combinaciones diferentes (donde LOAD es cargar y STORE es
guardar):

STORE A=3,	STORE B=4,	y=LOAD A->3,	x=LOAD B->4
STORE A=3,	STORE B=4,	x=LOAD B->4,	y=LOAD A->3
STORE A=3,	y=LOAD A->3,	STORE B=4,	x=LOAD B->4
STORE A=3,	y=LOAD A->3,	x=LOAD B->2,	STORE B=4
STORE A=3,	x=LOAD B->2,	STORE B=4,	y=LOAD A->3
STORE A=3,	x=LOAD B->2,	y=LOAD A->3,	STORE B=4
STORE B=4,	STORE A=3,	y=LOAD A->3,	x=LOAD B->4
STORE B=4, ...
...

y por lo tanto puede resultar en cuatro combinaciones diferentes de
valores:

x == 2, y == 1
x == 2, y == 3
x == 4, y == 1
x == 4, y == 3

Además, los stores asignados por una CPU al sistema de memoria pueden no
ser percibidos por los loads realizados por otra CPU en el mismo orden en
que fueron realizados.

Como otro ejemplo, considere esta secuencia de eventos:

	CPU 1		CPU 2
	===============	===============
	{ A == 1, B == 2, C == 3, P == &A, Q == &C }
	B = 4;		Q = P;
	P = &B;		D = *Q;

Aquí hay una dependencia obvia de la dirección, ya que el valor cargado en
D depende en la dirección recuperada de P por la CPU 2. Al final de la
secuencia, cualquiera de los siguientes resultados son posibles:

  (Q == &A) y (D == 1)
  (Q == &B) y (D == 2)
  (Q == &B) y (D == 4)

Tenga en cuenta que la CPU 2 nunca intentará cargar C en D porque la CPU
cargará P en Q antes de emitir la carga de *Q.

OPERACIONES DEL DISPOSITIVO
---------------------------

Algunos dispositivos presentan sus interfaces de control como colecciones
de ubicaciones de memoria, pero el orden en que se accede a los registros
de control es muy importante. Por ejemplo, imagine una tarjeta ethernet con
un conjunto de registros a los que se accede a través de un registro de
puerto de dirección (A) y un registro de datos del puerto (D). Para leer el
registro interno 5, el siguiente código podría entonces ser usado:

  *A = 5;
  x = *D;

pero esto podría aparecer como cualquiera de las siguientes dos secuencias:

  STORE *A = 5, x = LOAD *D
  x = LOAD *D, STORE *A = 5

el segundo de las cuales casi con certeza resultará en mal funcionamiento,
ya que se estableció la dirección _después_ de intentar leer el registro.


GARANTÍAS
---------

Hay algunas garantías mínimas que se pueden esperar de una CPU:

 (*) En cualquier CPU dada, los accesos a la memoria dependiente se
     emitirán en orden, con respeto a sí mismo. Esto significa que para:

	Q = READ_ONCE(P); D = READ_ONCE(*Q);

     donde READ_ONCE() es LEER_UNA_VEZ(), la CPU emitirá las siguientes
     operaciones de memoria:

	Q = LOAD P, D = LOAD *Q

     y siempre en ese orden. Sin embargo, en DEC Alpha, READ_ONCE() también
     emite una instrucción de barrera de memoria, de modo que una CPU DEC
     Alpha, sin embargo emite las siguientes operaciones de memoria:

	Q = LOAD P, MEMORY_BARRIER, D = LOAD *Q, MEMORY_BARRIER

     Ya sea en DEC Alpha o no, READ_ONCE() también evita que el compilador
     haga cosas inapropiadas.

 (*) Los loads y stores superpuestos dentro de una CPU en particular
     parecerán ser ordenados dentro de esa CPU. Esto significa que para:

	a = READ_ONCE(*X); WRITE_ONCE(*X, b);

     donde WRITE_ONCE() es ESCRIBIR_UNA_VEZ(), la CPU solo emitirá la
     siguiente secuencia de operaciones de memoria:

	a = LOAD *X, STORE *X = b

     Y para:

	WRITE_ONCE(*X, c); d = READ_ONCE(*X);

     la CPU solo emitirá:

	STORE *X = c, d = LOAD *X

  (Los loads y stores se superponen si están destinados a piezas
  superpuestas de memoria).

Y hay una serie de cosas que _deben_ o _no_ deben asumirse:

 (*) _No_debe_ asumirse que el compilador hará lo que usted quiera
     con referencias de memoria que no están protegidas por READ_ONCE() y
     WRITE ONCE(). Sin ellos, el compilador tiene derecho a hacer todo tipo
     de transformaciones "creativas", que se tratan en la sección BARRERA
     DEL COMPILADOR.

   (*) _No_debe_ suponerse que se emitirán loads y stores independientes
       en el orden dado. Esto significa que para:

	X = *A; Y = *B; *D = Z;

     podemos obtener cualquiera de las siguientes secuencias:

    X = LOAD *A,  Y = LOAD *B,  STORE *D = Z
   	X = LOAD *A,  STORE *D = Z, Y = LOAD *B
   	Y = LOAD *B,  X = LOAD *A,  STORE *D = Z
   	Y = LOAD *B,  STORE *D = Z, X = LOAD *A
   	STORE *D = Z, X = LOAD *A,  Y = LOAD *B
   	STORE *D = Z, Y = LOAD *B,  X = LOAD *A

 (*) Se _debe_ suponer que los accesos de memoria superpuestos pueden
     fusionarse o ser descartados. Esto significa que para:

	X = *A; Y = *(A + 4);

  podemos obtener cualquiera de las siguientes secuencias:

X = LOAD *A; Y = LOAD *(A + 4);
Y = LOAD *(A + 4); X = LOAD *A;
{X, Y} = LOAD {*A, *(A + 4) };

  Y para:

*A = X; *(A + 4) = Y;

  podemos obtener cualquiera de:

STORE *A = X; STORE *(A + 4) = Y;
STORE *(A + 4) = Y; STORE *A = X;
STORE {*A, *(A + 4) } = {X, Y};

Y hay anti-garantías:

(*) Estas garantías no se aplican a los campos de bits, porque los
    compiladores a menudo generan código para modificarlos usando
    secuencias de lectura-modificación-escritura no atómica. No intente
    utilizar campos de bits para sincronizar algoritmos paralelos.

(*) Incluso en los casos en que los campos de bits están protegidos por
    cerrojos (o "cerrojos", o "locks"), todos los componentes en un campo
    de bits dado deben estar protegidos por un candado. Si dos campos en un
    campo de bits dado están protegidos por diferentes locks, las
    secuencias de lectura-modificación-escritura no atómicas del lock
    pueden causar una actualización a una campo para corromper el valor de
    un campo adyacente.

(*) Estas garantías se aplican solo a escalares correctamente alineados y
    dimensionados. De "tamaño adecuado" significa actualmente variables que
    son del mismo tamaño que "char", "short", "int" y "long".
    "Adecuadamente alineado" significa la alineación natural, por lo tanto,
    no hay restricciones para "char", alineación de dos bytes para "short",
    alineación de cuatro bytes para "int", y alineación de cuatro u ocho
    bytes para "long", en sistemas de 32 y 64 bits, respectivamente. Tenga
    en cuenta que estos garantías se introdujeron en el estándar C11, así
    que tenga cuidado cuando utilice compiladores anteriores a C11 (por
    ejemplo, gcc 4.6). La parte de la norma que contiene esta garantía es
    la Sección 3.14, que define "ubicación de memoria" de la siguiente
    manera:

    ubicación de memoria
  ya sea un objeto de tipo escalar, o una secuencia máxima
  de campos de bits adyacentes, todos con ancho distinto de cero

  NOTE 1: Dos hilos de ejecución pueden actualizar y acceder
  ubicaciones de memoria separadas sin interferir entre
  ellos.

  NOTE 2: Un campo de bits y un miembro adyacente que no es un campo de
  bits están en ubicaciones de memoria separadas. Lo mismo sucede con
  dos campos de bits, si uno se declara dentro de un declaración de
  estructura anidada y el otro no, o si las dos están separados por una
  declaración de campo de bits de longitud cero, o si están separados por
  un miembro no declarado como campo de bits. No es seguro actualizar
  simultáneamente dos campos de bits en la misma estructura si entre
  todos los miembros declarados también hay campos de bits, sin importar
  cuál resulta ser el tamaño de estos campos de bits intermedios.


==================================
¿QUÉ SON LAS BARRERAS DE MEMORIA?
==================================

Como se puede leer arriba, las operaciones independientes de memoria se
realizan de manera efectiva en orden aleatorio, pero esto puede ser un
problema para la interacción CPU-CPU y para la E/S ("I/O"). Lo que se
requiere es alguna forma de intervenir para instruir al compilador y al
CPU para restringir el orden.

Las barreras de memoria son este tipo de intervenciones. Imponen una
percepción de orden parcial, sobre las operaciones de memoria a ambos lados
de la barrera.

Tal cumplimiento es importante porque las CPUs y otros dispositivos en un
sistema pueden usar una variedad de trucos para mejorar el rendimiento,
incluido el reordenamiento, diferimiento y combinación de operaciones de
memoria; cargas especulativas; predicción de "branches" especulativos y
varios tipos de almacenamiento en caché. Las barreras de memoria se
utilizan para anular o suprimir estos trucos, permitiendo que el código
controle sensatamente la interacción de múltiples CPU y/o dispositivos.


VARIEDADES DE BARRERA DE MEMORIA
---------------------------------

Las barreras de memoria vienen en cuatro variedades básicas:

 (1) Barreras de memoria al escribir o almacenar (Write or store memory
     barriers).

     Una barrera de memoria de escritura garantiza que todas las
     operaciones de STORE especificadas antes de que la barrera aparezca
     suceden antes de todas las operaciones STORE especificadas después
     de la barrera, con respecto a los otros componentes del sistema.

     Una barrera de escritura es un orden parcial solo en los stores; No
     es requerido que tenga ningún efecto sobre los loads.

     Se puede considerar que una CPU envía una secuencia de operaciones de
     store al sistema de memoria a medida que pasa el tiempo. Todos los
     stores _antes_ de una barrera de escritura ocurrirán _antes_ de todos
     los stores después de la barrera de escritura.

     [!] Tenga en cuenta que las barreras de escritura normalmente deben
     combinarse con read o barreras de address-dependency barriers
     (dependencia de dirección); consulte la subsección
     "Emparejamiento de barreras smp".


 (2) Barrera de dependencia de dirección (histórico).

     Una barrera de dependencia de dirección es una forma más débil de
     barrera de lectura. En el caso de que se realicen dos loads de manera
     que la segunda dependa del resultado de la primera (por ejemplo: el
     primer load recupera la dirección a la que se dirigirá el segundo
     load), una barrera de dependencia de dirección sería necesaria para
     asegurarse de que el objetivo de la segunda carga esté actualizado
     después de acceder a la dirección obtenida por la primera carga.

     Una barrera de dependencia de direcciones es una ordenación parcial en
     laods de direcciones interdependientes; no se requiere que tenga
     ningún efecto en los stores, ya sean cargas de memoria o cargas
     de memoria superpuestas.

     Como se mencionó en (1), las otras CPU en el sistema pueden verse como
     secuencias de stores en el sistema de memoria que la considerada CPU
     puede percibir. Una barrera de dependencia de dirección emitida por
     la CPU en cuestión garantiza que para cualquier carga que la preceda,
     si esa carga toca alguna secuencia de stores de otra CPU, entonces
     en el momento en que la barrera se complete, los efectos de todos los
     stores antes del cambio del load serán perceptibles por cualquier
     carga emitida después la barrera de la dependencia de la dirección.

     Consulte la subsección "Ejemplos de secuencias de barrera de memoria"
     para ver los diagramas mostrando las restricciones de orden.

     [!] Tenga en cuenta que la primera carga realmente tiene que tener una
     dependencia de _dirección_ y no es una dependencia de control. Si la
     dirección para la segunda carga depende de la primera carga, pero la
     dependencia es a través de un condicional en lugar de -en realidad-
     cargando la dirección en sí, entonces es una dependencia de _control_
     y se requiere una barrera de lectura completa o superior. Consulte la
     subsección "Dependencias de control" para más información.

     [!] Tenga en cuenta que las barreras de dependencia de dirección
     normalmente deben combinarse con barreras de escritura; consulte la
     subsección "Emparejamiento de barreras smp".

     [!] Desde el kernel v5.9, se eliminó la API del kernel para barreras
     de memoria de direcciones explícitas. Hoy en día, las APIs para marcar
     cargas de variables compartidas, como READ_ONCE() y rcu_dereference(),
     proporcionan barreras de dependencia de dirección implícitas.

 (3) Barreras de memoria al leer o cargar (Read or load memory
    barriers).

     Una barrera de lectura es una barrera de dependencia de direcciones,
     más una garantía de que todas las operaciones de LOAD especificadas
     antes de la barrera parecerán ocurrir antes de todas las operaciones
     de LOAD especificadas después de la barrera con respecto a los demás
     componentes del sistema.

     Una barrera de lectura es un orden parcial solo en cargas; no es
     necesario que tenga ningún efecto en los stores.

     Las barreras de memoria de lectura implican barreras de dependencia de
     direcciones, y por tanto puede sustituirlas por estas.

     [!] Tenga en mente que las barreras de lectura normalmente deben
     combinarse con barreras de escritura; consulte la subsección
     "Emparejamiento de barreras smp".

 (4) Barreras de memoria generales

     Una barrera de memoria general proporciona la garantía de que todas
     las operaciones LOAD y STORE especificadas antes de que la barrera
     aparezca suceden antes de que todas las operaciones LOAD y STORE
     especificadas después de la barrera con respecto a los demás
     componentes del sistema.

     Una barrera de memoria general es un orden parcial tanto en
     operaciones de carga como de almacenamiento.

     Las barreras de memoria generales implican barreras de memoria tanto
     de lectura como de escritura, de modo que pueden sustituir a
     cualquiera.

Y un par de variedades implícitas:

 (5)  ACQUIRE (de adquisición).

     Esto actúa como una barrera permeable unidireccional. Garantiza que
     toda las operaciones de memoria después de la operación ACQUIRE
     parezcan suceder después de la ACQUIRE con respecto a los demás
     componentes del sistema. Las operaciones ACQUIRE incluyen operaciones
     LOCK y smp_load_acquire(), y operaciones smp_cond_load_acquire().

     Las operaciones de memoria que ocurren antes de una operación ACQUIRE
     pueden parecer suceder después de que se complete.

     Una operación ACQUIRE casi siempre debe estar emparejada con una
     operación RELEASE (de liberación).


 (6) Operaciones RELEASE (de liberación).

     Esto también actúa como una barrera permeable unidireccional.
     Garantiza que todas las operaciones de memoria antes de la operación
     RELEASE parecerán ocurrir antes de la operación RELEASE con respecto a
     los demás componentes del sistema. Las operaciones de RELEASE incluyen
     operaciones de UNLOCK y operaciones smp_store_release().

     Las operaciones de memoria que ocurren después de una operación
     RELEASE pueden parecer suceder antes de que se complete.

     El uso de las operaciones ACQUIRE y RELEASE generalmente excluye la
     necesidad de otros tipos de barrera de memoria. Además, un par
     RELEASE+ACQUIRE NO garantiza actuar como una barrera de memoria
     completa. Sin embargo, después de un ACQUIRE de una variable dada,
     todos los accesos a la memoria que preceden a cualquier anterior
     RELEASE en esa misma variable están garantizados como visibles. En
     otras palabras, dentro de la sección crítica de una variable dada,
     todos los accesos de todas las secciones críticas anteriores para esa
     variable habrán terminado de forma garantizada.

     Esto significa que ACQUIRE actúa como una operación mínima de
     "adquisición" y RELEASE actúa como una operación mínima de
     "liberación".

Un subconjunto de las operaciones atómicas descritas en atomic_t.txt
contiene variantes de ACQUIRE y RELEASE, además de definiciones
completamente ordenadas o relajadas (sin barrera semántica). Para
composiciones atómicas que realizan tanto un load como store, la semántica
ACQUIRE se aplica solo a la carga y la semántica RELEASE se aplica sólo a
la parte de la operación del store.

Las barreras de memoria solo son necesarias cuando existe la posibilidad de
interacción entre dos CPU o entre una CPU y un dispositivo. Si se puede
garantizar que no habrá tal interacción en ninguna pieza de código en
particular, entonces las barreras de memoria son innecesarias en ese
fragmento de código.

Tenga en cuenta que estas son las garantías _mínimas_. Diferentes
arquitecturas pueden proporcionar garantías más sustanciales, pero no se
puede confiar en estas fuera de esa arquitectura en específico.


¿QUÉ NO SE PUEDE ASUMIR SOBRE LAS BARRERAS DE LA MEMORIA?
---------------------------------------------------------

Hay ciertas cosas que las barreras de memoria del kernel Linux no
garantizan:

 (*) No hay garantía de que ninguno de los accesos a la memoria
     especificados antes de una barrera de memoria estará _completo_ al
     completarse una instrucción de barrera de memoria; se puede considerar
     que la barrera dibuja una línea en la cola de acceso del CPU que no
     pueden cruzar los accesos del tipo correspondiente.

 (*) No hay garantía de que la emisión de una barrera de memoria en una CPU
     tenga cualquier efecto directo en otra CPU o cualquier otro hardware
     en el sistema. El efecto indirecto será el orden en que la segunda CPU
     ve los efectos de los primeros accesos que ocurren de la CPU, pero lea
     el siguiente argumento:

 (*) No hay garantía de que una CPU vea el orden correcto de los efectos
     de los accesos de una segunda CPU, incluso _si_ la segunda CPU usa una
     barrera de memoria, a menos que la primera CPU _también_ use una
     barrera de memoria coincidente (vea el subapartado "Emparejamiento de
     barrera SMP").

 (*) No hay garantía de que alguna pieza intermedia fuera del hardware[*]
     del CPU no reordenará los accesos a la memoria. Los mecanismos de
     coherencia de caché del CPU deben propagar los efectos indirectos de
     una barrera de memoria entre las CPU, pero es posible que no lo hagan
     en orden.

	[*] Para obtener información sobre bus mastering DMA y coherencia, lea:

	    Documentation/driver-api/pci/pci.rst
	    Documentation/core-api/dma-api-howto.rst
	    Documentation/core-api/dma-api.rst


BARRERA DE DEPENDENCIA DE DIRECCIÓN (HISTÓRICO)
-----------------------------------------------

A partir de la versión 4.15 del kernel Linux, se agregó un smp_mb() a
READ_ONCE() para DEC Alpha, lo que significa que las únicas personas que
necesitan prestar atención a esta sección son aquellas que trabajan en el
código específico de la arquitectura DEC Alpha y aquellas que trabajan en
READ_ONCE() por dentro. Para aquellos que lo necesitan, y para aquellos que
estén interesados desde un punto de vista histórico, aquí está la historia
de las barreras de dependencia de dirección.

[!] Si bien las dependencias de direcciones se observan tanto en carga a
carga como en relaciones de carga a store, las barreras de dependencia de
dirección no son necesarias para situaciones de carga a store.

El requisito de las barreras de dependencia de dirección es un poco sutil,
y no siempre es obvio que sean necesarias. Para ilustrar, considere la
siguiente secuencia de eventos:

	CPU 1		      CPU 2
	===============	      ===============
	{ A == 1, B == 2, C == 3, P == &A, Q == &C }
	B = 4;
	<barrera de escritura>
	WRITE_ONCE(P, &B);
			      Q = READ_ONCE_OLD(P);
			      D = *Q;

[!] READ_ONCE_OLD() corresponde a READ_ONCE() del kernel anterior a 4.15,
que no implica una barrera de dependencia de direcciones.

Hay una clara dependencia de dirección aquí, y parecería que al final de
la secuencia, Q debe ser &A o &B, y que:

	(Q == &A) implica (D == 1)
	(Q == &B) implica (D == 4)

¡Pero! La percepción de la CPU 2 de P puede actualizarse _antes_ de su
percepción de B, por lo tanto dando lugar a la siguiente situación:

	(Q == &B) y (D == 2) ????

Si bien esto puede parecer una falla en el mantenimiento de la coherencia
o la causalidad, no lo es, y este comportamiento se puede observar en
ciertas CPU reales (como DEC Alfa).

Para lidiar con esto, READ_ONCE() proporciona una barrera de dependencia
de dirección implícita desde el lanzamiento del kernel v4.15:

	CPU 1		      CPU 2
	===============	      ===============
	{ A == 1, B == 2, C == 3, P == &A, Q == &C }
	B = 4;
	<barrera de escritura>
	WRITE_ONCE(P, &B);
			      Q = READ_ONCE(P);
			      <barrera de dependencia de dirección implícita>
			      D = *Q;

Esto refuerza la ocurrencia de una de las dos implicaciones, y previene la
tercera posibilidad de surgir.


[!] Tenga en cuenta que esta situación extremadamente contraria a la
intuición surge más fácilmente en máquinas con cachés divididos, de modo
que, por ejemplo, un banco de caché procesa líneas de caché pares y el otro
banco procesa líneas impares de caché. El puntero P podría almacenarse en
una línea de caché impar y la variable B podría almacenarse en una línea de
caché con número par. Entonces, si el banco de números pares de la memoria
caché de la CPU de lectura está extremadamente ocupado mientras que el
banco impar está inactivo, uno podría ver el nuevo valor del puntero P
(&B), pero el antiguo valor de la variable B (2).


No se requiere una barrera de dependencia de dirección para ordenar
escrituras dependientes porque las CPU que admite el kernel Linux no
escriben hasta que están seguros (1) de que la escritura realmente
sucederá, (2) de la ubicación de la escritura, y (3) del valor a escribir.
Pero, por favor, lea atentamente la sección "DEPENDENCIAS DEL CONTROL" y el
archivo Documentation/RCU/rcu_dereference.rst: el compilador puede romperse
y romper dependencias en muchas formas altamente creativas.

	CPU 1		      CPU 2
	===============	      ===============
	{ A == 1, B == 2, C = 3, P == &A, Q == &C }
	B = 4;
	<barrera de escritura>
	WRITE_ONCE(P, &B);
			      Q = READ_ONCE_OLD(P);
			      WRITE_ONCE(*Q, 5);

Por lo tanto, no se requiere ninguna barrera de dependencia de direcciones
para ordenar la lectura en Q con el load en *Q. En otras palabras, este
resultado está prohibido, incluso sin una barrera de dependencia de
dirección implícita del READ_ONCE() moderno:

	(Q == &B) && (B == 4)

Tenga en cuenta que este patrón debe ser raro. Después de todo, el objetivo
del orden de dependencia es -prevenir- escrituras en la estructura de
datos, junto con los costosos errores de caché asociados con tales
escrituras. Este patrón se puede utilizar para registrar raras condiciones
de error y similares, y el orden natural de las CPUs evita que se pierdan
tales registros.


Tenga en cuenta que el orden proporcionado por una dependencia de dirección
es local para la CPU que lo contiene. Lea la sección sobre "Atomicidad
multicopia" para más información.


La barrera de dependencia de dirección es muy importante para el sistema
RCU, por ejemplo. Vea rcu_assign_pointer() y rcu_dereference() en
include/linux/rcupdate.h. Esto permite que el objetivo actual de un puntero
RCU sea reemplazado con un nuevo objetivo modificado, sin que el objetivo
del reemplazo parezca estar inicializado de manera incompleta.

Consulte también la subsección sobre "Coherencia de caché" para obtener un
ejemplo más completo.

DEPENDENCIAS DE CONTROL
-----------------------

Las dependencias de control pueden ser un poco complicadas porque los
compiladores actuales no las entienden. El propósito de esta sección es
ayudarle a prevenir que la ignorancia del compilador rompa su código.

Una dependencia de control load-load (de carga a carga) requiere una
barrera de memoria de lectura completa, no simplemente una barrera
(implícita) de dependencia de direcciones para que funcione correctamente.
Considere el siguiente fragmento de código:

	q = READ_ONCE(a);
	<barrera implícita de dependencia de direcciones>
	if (q) {
		/* BUG: No hay dependencia de dirección!!! */
		p = READ_ONCE(b);
	}

Esto no tendrá el efecto deseado porque no hay una dependencia de dirección
real, sino más bien una dependencia de control que la CPU puede
cortocircuitar al intentar predecir el resultado por adelantado, para que
otras CPU vean la carga de b como si hubiera ocurrido antes que la carga de
a. En cuyo caso lo que realmente se requiere es:

  	q = READ_ONCE(a);
  	if (q) {
  		<barrera de lectura>
  		p = READ_ONCE(b);
  	}

Sin embargo, los stores no se especulan. Esto significa que ordenar -es-
provisto para dependencias de control de load-store, como en el siguiente
ejemplo:

	q = READ_ONCE(a);
	if (q) {
		WRITE_ONCE(b, 1);
	}

Las dependencias de control se emparejan normalmente con otros tipos de
barreras. Dicho esto, tenga en cuenta que ni READ_ONCE() ni WRITE_ONCE()
son opcionales! Sin READ_ONCE(), el compilador podría combinar la carga de
'a' con otras cargas de 'a'. Sin WRITE_ONCE(), el compilador podría
combinar el store de 'b' con otros stores de 'b'. Cualquiera de estos casos
puede dar lugar a efectos en el orden muy contrarios a la intuición.

Peor aún, si el compilador puede probar (decir) que el valor de la
variable 'a' siempre es distinta de cero, estaría dentro de sus derechos
para optimizar el ejemplo original eliminando la declaración "if", como:

	q = a;
	b = 1;  /* BUG: Compilador y CPU pueden ambos reordernar!!! */

Así que no deje de lado READ_ONCE().

Es tentador tratar de hacer cumplir el orden en stores idénticos en ambos
caminos del "if" de la siguiente manera:

	q = READ_ONCE(a);
	if (q) {
		barrier();
		WRITE_ONCE(b, 1);
		hacer_algo();
	} else {
		barrier();
		WRITE_ONCE(b, 1);
		hacer_otra_cosa();
	}

Desafortunadamente, los compiladores actuales transformarán esto de la
siguiente manera en casos de alto nivel de optimización:

  	q = READ_ONCE(a);
  	barrier();
  	WRITE_ONCE(b, 1);  /* BUG: No hay orden en load de a!!! */
  	if (q) {
  		/* WRITE_ONCE(b, 1); -- movido arriba, BUG!!! */
  		hacer_algo();
  	} else {
  		/* WRITE_ONCE(b, 1); -- movido arriba, BUG!!! */
  		hacer_otra_cosa();
  	}

Ahora no hay condicional entre la carga de 'a' y el store de 'b', lo que
significa que la CPU está en su derecho de reordenarlos: El condicional es
absolutamente necesario y debe estar presente en el código ensamblador
incluso después de que se hayan aplicado todas las optimizaciones del
compilador. Por lo tanto, si necesita ordenar en este ejemplo, necesita
explícitamente barreras de memoria, por ejemplo, smp_store_release():


	q = READ_ONCE(a);
	if (q) {
		smp_store_release(&b, 1);
		hacer_algo();
	} else {
		smp_store_release(&b, 1);
		hacer_otra_cosa();
	}

Por el contrario, sin barreras de memoria explícita, el control de un if
con dos opciones está garantizado solo cuando los stores difieren, por
ejemplo:

  	q = READ_ONCE(a);
  	if (q) {
  		WRITE_ONCE(b, 1);
  		hacer_algo();
  	} else {
  		WRITE_ONCE(b, 2);
  		hacer_otra_cosa();
  	}

Aún se requiere el inicial READ_ONCE() para evitar que el compilador toque
el valor de 'a'.

Además, debe tener cuidado con lo que hace con la variable local 'q', de lo
contrario, el compilador podría adivinar el valor y volver a eliminar el
necesario condicional. Por ejemplo:

  	q = READ_ONCE(a);
  	if (q % MAX) {
  		WRITE_ONCE(b, 1);
  		hacer_algo();
  	} else {
  		WRITE_ONCE(b, 2);
  		hacer_otra_cosa();
  	}

Si MAX se define como 1, entonces el compilador sabe que (q % MAX) es igual
a cero, en cuyo caso el compilador tiene derecho a transformar el código
anterior en el siguiente:

  	q = READ_ONCE(a);
  	WRITE_ONCE(b, 2);
  	hacer_otra_cosa();

Dada esta transformación, la CPU no está obligada a respetar el orden entre
la carga de la variable 'a' y el store de la variable 'b'. Es tentador
agregar una barrier(), pero esto no ayuda. El condicional se ha ido, y la
barrera no lo traerá de vuelta. Por lo tanto, si confia en este orden, debe
asegurarse de que MAX sea mayor que uno, tal vez de la siguiente manera:

  	q = READ_ONCE(a);
  	BUILD_BUG_ON(MAX <= 1); /* Orden de carga de a con store de b */
  	if (q % MAX) {
  		WRITE_ONCE(b, 1);
  		hacer_algo();
  	} else {
  		WRITE_ONCE(b, 2);
  		hacer_otra_cosa();
  	}

Tenga en cuenta una vez más que los stores de 'b' difieren. Si fueran
idénticos, como se señaló anteriormente, el compilador podría sacar ese
store fuera de la declaración 'if'.

También debe tener cuidado de no confiar demasiado en el cortocircuito
de la evaluación booleana. Considere este ejemplo:

  	q = READ_ONCE(a);
  	if (q || 1 > 0)
  	WRITE_ONCE(b, 1);

Debido a que la primera condición no puede fallar y la segunda condición es
siempre cierta, el compilador puede transformar este ejemplo de la
siguiente manera, rompiendo la dependencia del control:

  	q = READ_ONCE(a);
  	WRITE_ONCE(b, 1);

Este ejemplo subraya la necesidad de asegurarse de que el compilador no
pueda adivinar su código. Más generalmente, aunque READ_ONCE() fuerza
al compilador para emitir código para una carga dada, no fuerza al
compilador para usar los resultados.

Además, las dependencias de control se aplican solo a la cláusula then y
la cláusula else de la sentencia if en cuestión. En particular, no se
aplica necesariamente al código que sigue a la declaración if:

  	q = READ_ONCE(a);
  	if (q) {
  		WRITE_ONCE(b, 1);
  	} else {
  		WRITE_ONCE(b, 2);
  	}
  	WRITE_ONCE(c, 1);  /* BUG: No hay orden para la lectura de 'a'. */

Es tentador argumentar que, de hecho, existe un orden porque el compilador
no puede reordenar accesos volátiles y tampoco puede reordenar escrituras
en 'b' con la condición. Desafortunadamente para esta línea de
razonamiento, el compilador podría compilar las dos escrituras en 'b' como
instrucciones de movimiento condicional, como en este fantástico idioma
pseudo-ensamblador:

        	ld r1,a
        	cmp r1,$0
        	cmov,ne r4,$1
        	cmov,eq r4,$2
        	st r4,b
        	st $1,c

Una CPU débilmente ordenada no tendría dependencia de ningún tipo entre la
carga de 'a' y el store de 'c'. Las dependencias de control se extenderían
solo al par de instrucciones cmov y el store dependiente de ellas. En
resumen, las dependencias de control se aplican solo a los stores en la
cláusula then y la cláusula else de la sentencia if en cuestión (incluidas
las funciones invocado por esas dos cláusulas), no al código que sigue a
esa declaración if.


Tenga muy en cuenta que el orden proporcionado por una dependencia de
control es local a la CPU que lo contiene. Vea el apartado de "Atomicidad
multicopia" para más información.


En resumen:

  (*) Las dependencias de control pueden ordenar cargas anteriores para
      stores posteriores. Sin embargo, no garantizan ningún otro tipo de
      orden: No cargas previas contra cargas posteriores, ni
      almacenamientos previos y luego nada. Si necesita tales formas de
      orden, use smp_rmb(), smp_wmb() o, en el caso de stores anteriores y
      cargas posteriores, smp_mb().

  (*) Si ambos caminos de la declaración "if" comienzan con stores
      idénticos de la misma variable, entonces esos stores deben ser
      ordenados, ya sea precediéndoles a ambos con smp_mb() o usando
      smp_store_release() para realizar el store. Tenga en cuenta que -no-
      es suficiente usar barrier() al comienzo de cada caso de la
      declaración "if" porque, como se muestra en el ejemplo anterior, la
      optimización de los compiladores puede destruir la dependencia de
      control respetando al pie de la letra la ley de barrier().

  (*) Las dependencias de control requieren al menos un condicional en
      tiempo de ejecución entre la carga anterior y el almacenamiento
      posterior, y este condicional debe implicar la carga previa. Si el
      compilador es capaz de optimizar el condicional y quitarlo, también
      habrá optimizado el ordenar. El uso cuidadoso de READ_ONCE() y
      WRITE_ONCE() puede ayudar a preservar el necesario condicional.

  (*) Las dependencias de control requieren que el compilador evite
      reordenar las dependencia hasta su inexistencia. El uso cuidadoso de
      READ_ONCE() o atomic{,64}_read() puede ayudarle a preservar la
      dependencia de control. Consulte la sección BARRERA DEL COMPILADOR
      para obtener más información al respecto.

  (*) Las dependencias de control se aplican solo a la cláusula then y la
      cláusula else de la sentencia "if" que contiene la dependencia de
      control, incluyendo cualquier función a la que llamen dichas dos
      cláusulas. Las dependencias de control no se aplican al código que
      sigue a la instrucción if que contiene la dependencia de control.

  (*) Las dependencias de control se emparejan normalmente con otros tipos
      de barreras.

  (*) Las dependencias de control no proporcionan atomicidad multicopia. Si
      usted necesita todas las CPU para ver un store dado al mismo tiempo,
      emplee smp_mb().

  (*) Los compiladores no entienden las dependencias de control. Por lo
      tanto es su trabajo asegurarse de que no rompan su código.


EMPAREJAMIENTO DE BARRERAS SMP
------------------------------

Cuando se trata de interacciones CPU-CPU, ciertos tipos de barrera de
memoria deben estar siempre emparejados. La falta del apropiado
emparejamiento es casi seguro un error.

Las barreras generales se emparejan entre sí, aunque también se emparejan
con la mayoría de otro tipo de barreras, aunque sin atomicidad multicopia.
Una barrera de adquisición se empareja con una barrera de liberación, pero
ambas también pueden emparejarse con otras barreras, incluidas, por
supuesto, las barreras generales. Una barrera de escritura se empareja con
una barrera de dependencia de dirección, una dependencia de control, una
barrera de adquisición, una barrera de liberación, una barrera de lectura
o una barrera general. Del mismo modo, una barrera de lectura se empareja
con una de dependencia de control o barrera de dependencia de dirección con
una barrera de escritura, una barrera de adquisición, una barrera de
liberación o una barrera general:

	CPU 1		      CPU 2
	===============	      ===============
	WRITE_ONCE(a, 1);
	<barrera de escritura>
	WRITE_ONCE(b, 2);     x = READ_ONCE(b);
			      <barrera de lectura>
			      y = READ_ONCE(a);

O bien:

	CPU 1		      CPU 2
	===============	      ===============================
	a = 1;
	<barrera de escritura>
	WRITE_ONCE(b, &a);    x = READ_ONCE(b);
			      <barrera de dependencia de dirección implícita>
			      y = *x;

O incluso:

	CPU 1		      CPU 2
	===============	      ===============================
	r1 = READ_ONCE(y);
	<barrera general>
	WRITE_ONCE(x, 1);     if (r2 = READ_ONCE(x)) {
			         <barrera de control implícita>
			         WRITE_ONCE(y, 1);
			      }

	assert(r1 == 0 || r2 == 0);

Básicamente, la barrera de lectura siempre tiene que estar ahí, aunque
puede ser del tipo "más débil".

[!] Tenga en cuenta que normalmente se esperaría que los stores antes de la
barrera de escritura se hagan coincidir con los stores después de la
barrera de lectura o la barrera de dependencia de dirección, y viceversa:

	CPU 1                               CPU 2
	===================                 ===================
	WRITE_ONCE(a, 1);    }----   --->{  v = READ_ONCE(c);
	WRITE_ONCE(b, 2);    }    \ /    {  w = READ_ONCE(d);
	<barrera de escritura>            \        <barrera de lectura>
	WRITE_ONCE(c, 3);    }    / \    {  x = READ_ONCE(a);
	WRITE_ONCE(d, 4);    }----   --->{  y = READ_ONCE(b);


EJEMPLOS DE SECUENCIAS DE BARRERA DE MEMORIA
--------------------------------------------

En primer lugar, las barreras de escritura actúan como orden parcial en las
operaciones de store. Considere la siguiente secuencia de eventos:

	CPU 1
	=======================
	STORE A = 1
	STORE B = 2
	STORE C = 3
	<barrera de escritura>
	STORE D = 4
	STORE E = 5

Esta secuencia de eventos es finalizado para con el sistema de coherencia
de memoria en un orden que el resto del sistema podría percibir como el
conjunto desordenado { STORE A, STORE B, STORE C} todo ocurriendo antes del
conjunto desordenado { STORE D, STORE E}:


	+-------+       :      :
	|       |       +------+
	|       |------>| C=3  |     }     /\
	|       |  :    +------+     }-----  \  -----> Eventos perceptibles para
	|       |  :    | A=1  |     }        \/       el resto del sistema
	|       |  :    +------+     }
	| CPU 1 |  :    | B=2  |     }
	|       |       +------+     }
	|       |   wwwwwwwwwwwwwwww }   <--- En este momento la barrera de
	|       |       +------+     }        escritura requiere que todos los
	|       |  :    | E=5  |     }        stores anteriores a la barrera
	|       |  :    +------+     }        sean confirmados antes de que otros
	|       |------>| D=4  |     }        store puedan suceder
	|       |       +------+
	+-------+       :      :
	                   |
	                   | Secuencia por la cual los stores son confirmados al
	                   | sistema de memoria por parte del CPU 1
	                   V

En segundo lugar, las barreras de dependencia de dirección actúan como
órdenes parciales sobre la dirección de cargas dependientes. Considere la
siguiente secuencia de eventos:

	CPU 1			CPU 2
	=======================	=======================
		{ B = 7; X = 9; Y = 8; C = &Y }
	STORE A = 1
	STORE B = 2
	<barrera de escritura>
	STORE C = &B		LOAD X
	STORE D = 4		LOAD C (consigue &B)
				LOAD *C (lee B)

Sin intervención, la CPU 2 puede percibir los eventos en la CPU 1 en orden
aleatorio a efectos prácticos, a pesar de la barrera de escritura emitida
por la CPU 1:

	+-------+       :      :                :       :
	|       |       +------+                +-------+  | Secuencia de
	|       |------>| B=2  |-----       --->| Y->8  |  | actualizado de
	|       |  :    +------+     \          +-------+  | percepción en CPU 2
	| CPU 1 |  :    | A=1  |      \     --->| C->&Y |  V
	|       |       +------+       |        +-------+
	|       |   wwwwwwwwwwwwwwww   |        :       :
	|       |       +------+       |        :       :
	|       |  :    | C=&B |---    |        :       :       +-------+
	|       |  :    +------+   \   |        +-------+       |       |
	|       |------>| D=4  |    ----------->| C->&B |------>|       |
	|       |       +------+       |        +-------+       |       |
	+-------+       :      :       |        :       :       |       |
	                               |        :       :       |       |
	                               |        :       :       | CPU 2 |
	                               |        +-------+       |       |
	    Percepción de B      --->  |        | B->7  |------>|       |
	    aparentemente incorrecta!  |        +-------+       |       |
	                               |        :       :       |       |
	                               |        +-------+       |       |
	    La carga de X frena --->    \       | X->9  |------>|       |
	    el mantenimiento de          \      +-------+       |       |
	    la coherencia de B            ----->| B->2  |       +-------+
	                                        +-------+
	                                        :       :


En el ejemplo anterior, la CPU 2 percibe que B es 7, a pesar de la carga de
*C (que sería B) viniendo después del LOAD de C.

Sin embargo, si se colocara una barrera de dependencia de dirección entre
la carga de C y la carga de *C (es decir: B) en la CPU 2:

	CPU 1			CPU 2
	=======================	=======================
		{ B = 7; X = 9; Y = 8; C = &Y }
	STORE A = 1
	STORE B = 2
	<barrera de escritura>
	STORE C = &B		LOAD X
	STORE D = 4		LOAD C (consigue &B)
				<barrera de dependencia de dirección>
				LOAD *C (reads B)

entonces ocurrirá lo siguiente:

	+-------+       :      :                :       :
	|       |       +------+                +-------+
	|       |------>| B=2  |-----       --->| Y->8  |
	|       |  :    +------+     \          +-------+
	| CPU 1 |  :    | A=1  |      \     --->| C->&Y |
	|       |       +------+       |        +-------+
	|       |   wwwwwwwwwwwwwwww   |        :       :
	|       |       +------+       |        :       :
	|       |  :    | C=&B |---    |        :       :       +-------+
	|       |  :    +------+   \   |        +-------+       |       |
	|       |------>| D=4  |    ----------->| C->&B |------>|       |
	|       |       +------+       |        +-------+       |       |
	+-------+       :      :       |        :       :       |       |
	                               |        :       :       |       |
	                               |        :       :       | CPU 2 |
	                               |        +-------+       |       |
	                               |        | X->9  |------>|       |
	                               |        +-------+       |       |
	  Se asegura de que      --->   \   aaaaaaaaaaaaaaaaa   |       |
	  los efectos anteriores al      \      +-------+       |       |
	  store de C sean percibidos      ----->| B->2  |------>|       |
	  por los siguientes loads              +-------+       |       |
	                                        :       :       +-------+


Y en tercer lugar, una barrera de lectura actúa como un orden parcial sobre
las cargas. Considere la siguiente secuencia de eventos:

	CPU 1			CPU 2
	=======================	=======================
		{ A = 0, B = 9 }
	STORE A=1
	<barrera de escritura>
	STORE B=2
				LOAD B
				LOAD A

Sin intervención, la CPU 2 puede elegir percibir los eventos en la CPU 1 en
algún orden aleatorio a efectos prácticos, a pesar de la barrera de
escritura emitida por la CPU 1:

	+-------+       :      :                :       :
	|       |       +------+                +-------+
	|       |------>| A=1  |------      --->| A->0  |
	|       |       +------+      \         +-------+
	| CPU 1 |   wwwwwwwwwwwwwwww   \    --->| B->9  |
	|       |       +------+        |       +-------+
	|       |------>| B=2  |---     |       :       :
	|       |       +------+   \    |       :       :       +-------+
	+-------+       :      :    \   |       +-------+       |       |
	                             ---------->| B->2  |------>|       |
	                                |       +-------+       | CPU 2 |
	                                |       | A->0  |------>|       |
	                                |       +-------+       |       |
	                                |       :       :       +-------+
	                                 \      :       :
	                                  \     +-------+
	                                   ---->| A->1  |
	                                        +-------+
	                                        :       :

Sin embargo, si se colocara una barrera de lectura entre la carga de B y la
carga de A en la CPU 2:

	CPU 1			CPU 2
	=======================	=======================
		{ A = 0, B = 9 }
	STORE A=1
	<barrera de escritura>
	STORE B=2
				LOAD B
				<barrera de lectura>
				LOAD A

entonces el orden parcial impuesto por la CPU 1 será percibido
correctamente por la CPU 2:

	+-------+       :      :                :       :
	|       |       +------+                +-------+
	|       |------>| A=1  |------      --->| A->0  |
	|       |       +------+      \         +-------+
	| CPU 1 |   wwwwwwwwwwwwwwww   \    --->| B->9  |
	|       |       +------+        |       +-------+
	|       |------>| B=2  |---     |       :       :
	|       |       +------+   \    |       :       :       +-------+
	+-------+       :      :    \   |       +-------+       |       |
	                             ---------->| B->2  |------>|       |
	                                |       +-------+       | CPU 2 |
	                                |       :       :       |       |
	                                |       :       :       |       |
	  En este punto la barrera ----> \  rrrrrrrrrrrrrrrrr   |       |
	  de lectura consigue que         \     +-------+       |       |
	  todos los efectos anteriores     ---->| A->1  |------>|       |
	  al almacenamiento de B sean           +-------+       |       |
	  perceptibles por la CPU 2             :       :       +-------+


Para ilustrar esto de manera más completa, considere lo que podría pasar si
el código contenía una carga de A a cada lado de la barrera de lectura:

	CPU 1			CPU 2
	=======================	=======================
		{ A = 0, B = 9 }
	STORE A=1
	<barrera de escritura>
	STORE B=2
				LOAD B
				LOAD A [primer load de A]
				<rbarrera de lectura>
				LOAD A [segundo load de A]

Aunque las dos cargas de A ocurren después de la carga de B, ambas pueden
obtener diferentes valores:

	+-------+       :      :                :       :
	|       |       +------+                +-------+
	|       |------>| A=1  |------      --->| A->0  |
	|       |       +------+      \         +-------+
	| CPU 1 |   wwwwwwwwwwwwwwww   \    --->| B->9  |
	|       |       +------+        |       +-------+
	|       |------>| B=2  |---     |       :       :
	|       |       +------+   \    |       :       :       +-------+
	+-------+       :      :    \   |       +-------+       |       |
	                             ---------->| B->2  |------>|       |
	                                |       +-------+       | CPU 2 |
	                                |       :       :       |       |
	                                |       :       :       |       |
	                                |       +-------+       |       |
	                                |       | A->0  |------>| 1st   |
	                                |       +-------+       |       |
	  En este punto la barrera ----> \  rrrrrrrrrrrrrrrrr   |       |
	  de lectura consigue que         \     +-------+       |       |
	  todos los efectos anteriores     ---->| A->1  |------>|       |
	  al almacenamiento de B sean           +-------+       |       |
	  perceptibles por la CPU 2             :       :       +-------+

Pero puede ser que la actualización a A desde la CPU 1 se vuelva
perceptible para la CPU 2 antes de que la barrera de lectura se complete de
todos modos:

	+-------+       :      :                :       :
	|       |       +------+                +-------+
	|       |------>| A=1  |------      --->| A->0  |
	|       |       +------+      \         +-------+
	| CPU 1 |   wwwwwwwwwwwwwwww   \    --->| B->9  |
	|       |       +------+        |       +-------+
	|       |------>| B=2  |---     |       :       :
	|       |       +------+   \    |       :       :       +-------+
	+-------+       :      :    \   |       +-------+       |       |
	                             ---------->| B->2  |------>|       |
	                                |       +-------+       | CPU 2 |
	                                |       :       :       |       |
	                                 \      :       :       |       |
	                                  \     +-------+       |       |
	                                   ---->| A->1  |------>| 1st   |
	                                        +-------+       |       |
	                                    rrrrrrrrrrrrrrrrr   |       |
	                                        +-------+       |       |
	                                        | A->1  |------>| 2nd   |
	                                        +-------+       |       |
	                                        :       :       +-------+

La garantía es que la segunda carga siempre dará como resultado A == 1 si
la carga de B resultó en B == 2. No existe tal garantía para la primera
carga de A; esto puede dar como resultado A == 0 o A == 1.


BARRERAS DE MEMORIA DE LECTURA FRENTE A ESPECULACIÓN DE CARGA
-------------------------------------------------------------

Muchas CPU especulan con las cargas: es decir, ven que necesitarán cargar
un elemento de la memoria, y encuentran un momento en el que no están
usando el bus para ningún otra carga, y también en la carga por adelantado,
aunque en realidad no lo hayan llegado a ese punto en el flujo de ejecución
de instrucciones todavía. Esto permite que la instrucción de carga real
potencialmente complete de inmediato, porque la CPU ya tiene el valor a
mano.

Puede resultar que la CPU en realidad no necesitara el valor, tal vez
porque una condición eludió la carga, en cuyo caso puede descartar el valor
o simplemente almacenar en caché para su uso posterior.

Considere:

	CPU 1			CPU 2
	=======================	=======================
				LOAD B
				DIVIDE		} Instrucciones de división
				DIVIDE		} tardan mucho en terminar
				LOAD A

donde DIVIDE es DIVIDIR. Que podría aparecer como esto:

	                                        :       :       +-------+
	                                        +-------+       |       |
	                                    --->| B->2  |------>|       |
	                                        +-------+       | CPU 2 |
	                                        :       :DIVIDE |       |
	                                        +-------+       |       |
	La CPU ocupada con la división ---> --->| A->0  |~~~~   |       |
	especula sobre el LOAD de A             +-------+   ~   |       |
	                                        :       :   ~   |       |
	                                        :       :DIVIDE |       |
	                                        :       :   ~   |       |
	Una vez completadas las divisiones  --> :       :   ~-->|       |
	la CPU puede realizar el                :       :       |       |
	LOAD con efecto inmediato               :       :       +-------+


Colocando una barrera de lectura o una barrera de dependencia de dirección
justo antes de la segundo carga:



	CPU 1			CPU 2
	=======================	=======================
				LOAD B
				DIVIDE
				DIVIDE
				<rbarrera de lectura>
				LOAD A

obligará a reconsiderar cualquier valor obtenido especulativamente en una
medida dependiente del tipo de barrera utilizada. Si no se hizo ningún
cambio en la ubicación de memoria especulada, entonces el valor especulado
solo se usará:

	                                        :       :       +-------+
	                                        +-------+       |       |
	                                    --->| B->2  |------>|       |
	                                        +-------+       | CPU 2 |
	                                        :       :DIVIDE |       |
	                                        +-------+       |       |
  La CPU ocupada con la división ---> --->| A->0  |~~~~   |       |
  especula sobre el LOAD de A             +-------+   ~   |       |
	                                        :       :   ~   |       |
	                                        :       :DIVIDE |       |
	                                        :       :   ~   |       |
	                                        :       :   ~   |       |
	                                    rrrrrrrrrrrrrrrr~   |       |
	                                        :       :   ~   |       |
	                                        :       :   ~-->|       |
	                                        :       :       |       |
	                                        :       :       +-------+


pero si había una actualización o una invalidación de otra CPU pendiente,
entonces la especulación será cancelada y el valor recargado:

	                                        :       :       +-------+
	                                        +-------+       |       |
	                                    --->| B->2  |------>|       |
	                                        +-------+       | CPU 2 |
	                                        :       :DIVIDE |       |
	                                        +-------+       |       |
  La CPU ocupada con la división ---> --->| A->0  |~~~~   |       |
  especula sobre el LOAD de A             +-------+   ~   |       |
	                                        :       :   ~   |       |
	                                        :       :DIVIDE |       |
	                                        :       :   ~   |       |
	                                        :       :   ~   |       |
	                                    rrrrrrrrrrrrrrrrr   |       |
	                                        +-------+       |       |
	La especulación es descartada --->  --->| A->1  |------>|       |
	y un valor actualizado                  +-------+       |       |
	es conseguido                           :       :       +-------+

ATOMICIDAD MULTICOPIA
---------------------

La atomicidad multicopia es una noción profundamente intuitiva sobre el
orden que no es siempre proporcionada por los sistemas informáticos reales,
a saber, que un determinada store se vuelve visible al mismo tiempo para
todos las CPU o, alternativamente, que todas las CPU acuerdan el orden en
que todos los stores se vuelven visibles. Sin embargo, el soporte para
atomicidad multicopia completa descartaría valiosas optimizaciones
hardware, por lo que una versión más débil conocida como ``otra atomicidad
multicopia'' en cambio, solo garantiza que un store dado se vuelva visible
al mismo tiempo en todas las -otras- CPUs. El resto de este documento
discute esta versión más débil, pero por brevedad lo llamaremos simplemente
``atomicidad multicopia''.

El siguiente ejemplo demuestra la atomicidad multicopia:

	CPU 1			CPU 2			CPU 3
	=======================	=======================	=======================
		{ X = 0, Y = 0 }
	STORE X=1		r1=LOAD X (reads 1)	LOAD Y (reads 1)
				<barrera general>	<barrera de lectura>
				STORE Y=r1		LOAD X

Suponga que la carga de la CPU 2 desde X devuelve 1, que luego almacena en
Y, y la carga de la CPU 3 desde Y devuelve 1. Esto indica que el store de
la CPU 1 a X precede a la carga de la CPU 2 desde X y el store de esa CPU 2
a Y precede la carga de la CPU 3 desde Y. Además, las barreras de memoria
garantizan que la CPU 2 ejecuta su carga antes que su almacenamiento, y la
CPU 3 carga desde Y antes de cargar desde X. La pregunta entonces es
"¿Puede la carga de la CPU 3 desde X devolver 0?"

Debido a que la carga de la CPU 3 desde X en cierto sentido viene después
de la carga de la CPU 2, es natural esperar que la carga de la CPU 3 desde
X deba devolver 1. Esta expectativa se deriva de la atomicidad multicopia:
si una carga que se ejecuta en la CPU B sigue una carga de la misma
variable que se ejecuta en la CPU A (y la CPU A no almacenó originalmente
el valor que leyó), entonces en sistemas atómicos multicopia, la carga de
la CPU B debe devolver el mismo valor que hizo la carga de la CPU A o algún
valor posterior. Sin embargo, el kernel Linux no requiere que los sistemas
sean atómicos multicopia.

El uso de una barrera de memoria general en el ejemplo anterior compensa
cualquier falta de atomicidad multicopia. En el ejemplo, si la carga de la
CPU 2 de X devuelve 1 y la carga de la CPU 3 de Y devuelve 1, entonces la
carga de la CPU 3 desde X debe de hecho también devolver 1.

Sin embargo, las dependencias, las barreras de lectura y las barreras de
escritura no siempre son capaces de compensar la atomicidad no multicopia.
Por ejemplo, supongamos que la barrera general de la CPU 2 se elimina del
ejemplo anterior, dejando solo la dependencia de datos que se muestra a
continuación:

	CPU 1			CPU 2			CPU 3
	=======================	=======================	=======================
		{ X = 0, Y = 0 }
	STORE X=1		r1=LOAD X (escribe 1)	LOAD Y (lee 1)
				<dependencia de datos>	<barrera de lectura>
				STORE Y=r1		LOAD X (lee 0)

Esta sustitución permite que la atomicidad no multicopia se desenfrene: en
este ejemplo, es perfectamente legal que la carga de la CPU 2 desde X
devuelva 1, la carga de la CPU 3 desde Y devuelva 1, y su carga desde X
tenga valor 0.

El punto clave es que aunque la dependencia de datos de la CPU 2 ordena su
carga y store, no garantiza ordenar el store de la CPU 1. De forma que, si
este ejemplo se ejecuta en un sistema atómico no multicopia donde las CPU 1
y 2 comparten un buffer de almacenamiento o un nivel de caché, la CPU 2
podría tener acceso anticipado de escritura a CPU 1. Por lo tanto, se
requieren barreras generales para garantizar que todas las CPU acurden el
orden combinado de accesos múltiples.

Las barreras generales pueden compensar no solo la atomicidad no
multicopia, pero también pueden generar orden adicional que puede asegurar
que -todas- las CPU percibirán el mismo orden de -todas- las operaciones.
Por el contrario, una cadena de parejas de liberación-adquisición no
proporciona este orden adicional, lo que significa que solo se garantiza
que las CPU de la cadena estén de acuerdo en el orden combinado de los
accesos. Por ejemplo, cambiando a código C en deferencia al fantasma de
Herman Hollerith:

	int u, v, x, y, z;

	void cpu0(void)
	{
		r0 = smp_load_acquire(&x);
		WRITE_ONCE(u, 1);
		smp_store_release(&y, 1);
	}

	void cpu1(void)
	{
		r1 = smp_load_acquire(&y);
		r4 = READ_ONCE(v);
		r5 = READ_ONCE(u);
		smp_store_release(&z, 1);
	}

	void cpu2(void)
	{
		r2 = smp_load_acquire(&z);
		smp_store_release(&x, 1);
	}

	void cpu3(void)
	{
		WRITE_ONCE(v, 1);
		smp_mb();
		r3 = READ_ONCE(u);
	}

Dado que cpu0(), cpu1() y cpu2() participan en una cadena de parejas
smp_store_release()/smp_load_acquire(), el siguiente resultado estaría
prohibido:

	r0 == 1 && r1 == 1 && r2 == 1

Además, debido a la relación liberación-adquisición entre cpu0() y cpu1(),
cpu1() debe ver las escrituras de cpu0(), de modo que el siguiente
resultado estaría prohibido:

	r1 == 1 && r5 == 0

Sin embargo, el orden proporcionado por una cadena de
liberación-adquisición es local a las CPU que participan en esa cadena y no
se aplica a cpu3(), al menos aparte de los stores. Por lo tanto, es posible
el siguiente resultado:

	r0 == 0 && r1 == 1 && r2 == 1 && r3 == 0 && r4 == 0

Por otro lado, también el siguiente resultado es posible:

	r0 == 0 && r1 == 1 && r2 == 1 && r3 == 0 && r4 == 0 && r5 == 1

Aunque cpu0(), cpu1() y cpu2() verán sus respectivas lecturas y escrituras
en orden, las CPU que no participan en la cadena de liberación-adquisición
pueden estar en desacuerdo con el orden. Este desacuerdo se debe al hecho
de que las instrucciones de barrera de memoria débiles utilizadas para
implementar smp_load_acquire() y smp_store_release() no son necesarios para
ordenar stores anteriores contra cargas posteriores en todos los casos.
Esto significa que cpu3() puede ver el store de cpu0() suceder -después- de
la carga de cpu1() desde v, aunque tanto cpu0() como cpu1() están de
acuerdo en que estas dos operaciones ocurrieron en el orden previsto.

Sin embargo, tenga en cuenta que smp_load_acquire() no es mágico. En
particular, simplemente lee de su argumento en orden. Es decir, -no-
asegura que se leerá cualquier valor en particular. Por lo tanto, los
siguiente resultados son posibles:

	r0 == 0 && r1 == 0 && r2 == 0 && r5 == 0

Tenga en cuenta que este resultado puede ocurrir incluso en un mítico
sistema, consistente en secuencia, donde nunca se reordena nada.

Para reiterar, si su código requiere un orden completo de todas las
operaciones, utilice barreras generales en todo momento.


==============================
BARRERAS EXPLÍCITAS DEL KERNEL
==============================

El kernel Linux tiene una variedad de diferentes barreras que actúan a
diferentes niveles:

  (*) Barrera del compilador.

  (*) Barreras de memoria de la CPU.


BARRERA DEL COMPILADOR
-----------------------

El kernel de Linux tiene una función de barrera del compilador explícita
que evita que el el compilador mueva los accesos a la memoria de cualquier
lado al otro:

	barrier();

Esta es una barrera general: no hay variantes de barrier() para casos de
lectura-lectura o escritura-escritura. Sin embargo, READ_ONCE() y
WRITE_ONCE() pueden ser considerado como formas débiles de barrier() que
afectan solo específicos accesos marcados por READ_ONCE() o WRITE_ONCE().

La función barrier() produce los siguientes efectos:

 (*) Evita que el compilador reordene los accesos tras barrier() para
     preceder a cualquier acceso que preceda a barrier(). Un ejemplo de uso
     de esta propiedad es facilitar la comunicación entre código del
     interrupt-handler (encargo de gestionar interrupciones) y el código
     que fue interrumpido.

 (*) Dentro de un bucle ("loop"), obliga al compilador a cargar las
     variables utilizadas en ese loop condicional en cada paso a través de
     ese loop.

Las funciones READ_ONCE() y WRITE_ONCE() pueden evitar cualquier cantidad
de optimizaciones que, si bien son perfectamente seguras en código de un
solo subproceso, pueden resultar fatales en código concurrente. Aquí hay
algunos ejemplos de tal tipo de optimizaciones:

(*) El compilador está en su derecho de reordenar cargas y stores de la
    misma variable, y en algunos casos, la CPU está dentro de su
    derecho de reordenar cargas a la misma variable. Esto significa que
    el siguiente código:

 a[0] = x;
 a[1] = x;

     Podría resultar en un valor más antiguo de x almacenado en a[1] que en
     a[0]. Evite que tanto el compilador como la CPU hagan esto de la
     siguiente manera:

	a[0] = READ_ONCE(x);
	a[1] = READ_ONCE(x);

     En resumen, READ_ONCE() y WRITE_ONCE() proporcionan coherencia de
     caché para accesos desde múltiples CPUs a una sola variable.

     (*) El compilador tiene derecho a juntar cargas sucesivas de la misma
         variable. Tal fusión puede hacer que el compilador "optimice" el
         siguiente código:

    	while (tmp = a)
    		hacer_algo_con(tmp);

        en el siguiente código, que, aunque en cierto sentido es legítimo
        para un código de un solo subproceso, es casi seguro que no es lo
        que el desarrollador pretendía:

   	if (tmp = a)
   		for (;;)
   			hacer_algo_con(tmp);

        Use READ_ONCE() para evitar que el compilador le haga esto:

   	while (tmp = READ_ONCE(a))
   		hacer_algo_con(tmp);

 (*) El compilador tiene derecho a recargar una variable, por ejemplo,
    en los casos en que la alta presión de los registros impida que el
    compilador mantenga todos los datos de interés en registros. El
    compilador podría por lo tanto, optimizar la variable 'tmp' de nuestro
    ejemplo anterior:

	while (tmp = a)
		hacer_algo_con(tmp);

     Esto podría resultar en el siguiente código, que es perfectamente
     seguro en código de subproceso único, pero puede ser fatal en código
     concurrente:

	while (a)
		hacer_algo_con(a);

    Por ejemplo, la versión optimizada de este código podría resultar en
    pasar un cero a hacer_algo_con() en el caso de que la variable a sea
    modificada por alguna otra CPU, entre la instrucción "while" y la
    llamada a hacer_algo_con().

    De nuevo, use READ_ONCE() para evitar que el compilador haga esto:

	while (tmp = READ_ONCE(a))
		hacer_algo_con(tmp);

     Tenga en cuenta que si el compilador se queda sin registros, podría
     guardar tmp en la pila ("stack"). El overhead (coste en eficiencia) de
     este guardado y posterior restauración es por lo que los compiladores
     recargan las variables. Hacerlo es perfectamente seguro para código de
     subproceso único, por lo que debe informar al compilador sobre los
     casos donde no sea seguro.

 (*) El compilador está en su derecho de omitir una carga por completo si
     sabe cual será su valor. Por ejemplo, si el compilador puede probar
     que el valor de la variable 'a' siempre es cero, puede optimizar este
     código:

	while (tmp = a)
		hacer_algo_con(tmp);

     En esto:

	do { } while (0);

     Esta transformación es una victoria para un código de un solo
     subproceso, porque se deshace de una carga y un branch. El problema es
     que el compilador llevará a cabo su prueba asumiendo que la CPU actual
     es la única actualizando la variable 'a'. Si la variable 'a' es
     compartida, entonces la prueba del compilador será errónea. Use
     READ_ONCE() para decirle al compilador que no sabe tanto como cree:

	while (tmp = READ_ONCE(a))
		hacer_algo_con(tmp);

     Pero, por favor, tenga en cuenta que el compilador también está
     observando de cerca lo que usted hace con el valor después de
     READ_ONCE(). Por ejemplo, suponga que Ud. hace lo siguiente y MAX es
     una macro de preprocesador con el valor 1:

	while ((tmp = READ_ONCE(a)) % MAX)
		hacer_algo_con(tmp);

     Entonces el compilador sabe que el resultado del operador "%" aplicado
     a MAX siempre será cero, nuevamente permitiendo que el compilador
     optimice el código hasta su casi inexistencia. (Aún se cargará desde
     la variable 'a'.)

 (*) De manera similar, el compilador tiene derecho a omitir un store por
     completo si sabe que la variable ya tiene el valor almacenado.
     Nuevamente, el compilador asume que la CPU actual es la única que
     almacena la variable, lo que puede hacer que el compilador haga
     algo incorrecto para las variables compartidas. Por ejemplo, suponga
     que tiene lo siguiente:

	a = 0;
	... Código que no almacena la variable a ...
	a = 0;

     El compilador observa que el valor de la variable 'a' ya es cero, por
     lo que bien podría omitir el segundo store. Esto supondría una fatal
     sorpresa, si alguna otra CPU hubiera almacenado la variable 'a'
     mientras tanto.

     Use WRITE_ONCE() para evitar que el compilador haga este tipo de
     suposición equivocada:

	WRITE_ONCE(a, 0);
	... Código que no almacena la variable a  ...
	WRITE_ONCE(a, 0);

  (*) El compilador tiene derecho a reordenar los accesos a memoria a menos
     que le diga que no. Por ejemplo, considere la siguiente interacción
     entre el código de nivel de proceso y un controlador de interrupción:

	void nivel_de_procesamiento(void)
	{
		msg = ACQUIRE_mensaje();
		flag = true;
	}

	void controlador_interrupcion(void)
	{
		if (flag)
			procesar_mensaje(msg);
	}

     No hay nada que impida que el compilador transforme
     nivel_de_procesamiento() a lo siguiente, que de hecho, bien podría ser
     una victoria para código de un solo subproceso:

	void nivel_de_procesamiento(void)
	{
		flag = true;
		msg = ACQUIRE_mensaje();
	}

     Si la interrupción ocurre entre estas dos declaraciones, entonces
     controlador_interrupcion() podría recibir un mensaje ilegible. Use
     READ_ONCE() para evitar esto de la siguiente manera:

	void nivel_de_procesamiento(void)
	{
		WRITE_ONCE(msg, ACQUIRE_mensaje());
		WRITE_ONCE(flag, true);
	}

	void controlador_interrupcion(void)
	{
		if (READ_ONCE(flag))
			procesar_mensaje(READ_ONCE(msg));
	}

     Tenga en cuenta que los envoltorios ("wrappers") READ_ONCE() y
     WRITE_ONCE() en controlador_interrupcion() son necesarios si este
     controlador de interrupciones puede ser interrumpido por algo que
     también accede a 'flag' y 'msg', por ejemplo, una interrupción anidada
     o un NMI. De lo contrario, READ_ONCE() y WRITE_ONCE() no son
     necesarios en controlador_interrupcion() aparte de con fines de
     documentación. (Tenga también en cuenta que las interrupciones
     anidadas no ocurren típicamente en los kernels Linux modernos, de
     hecho, si un controlador de interrupciones regresa con interrupciones
     habilitadas, obtendrá un WARN_ONCE().)

     Debe suponer que el compilador puede mover READ_ONCE() y WRITE_ONCE()
     a código que no contiene READ_ONCE(), WRITE_ONCE(), barrier(), o
     primitivas similares.

     Este efecto también podría lograrse usando barrier(), pero READ_ONCE()
     y WRITE_ONCE() son más selectivos: Con READ_ONCE() y WRITE_ONCE(), el
     compilador solo necesita olvidar el contenido de ubicaciones de
     memoria indicadas, mientras que con barrier() el compilador debe
     descartar el valor de todas las ubicaciones de memoria que tiene
     actualmente almacenadas en caché, en cualquier registro de la máquina.
     Por supuesto, el compilador también debe respetar el orden en que
     ocurren READ_ONCE() y WRITE_ONCE(), aunque la CPU, efectivamente, no
     necesita hacerlo.

 (*) El compilador tiene derecho a inventar stores para una variable,
     como en el siguiente ejemplo:

	if (a)
		b = a;
	else
		b = 42;

    El compilador podría ahorrar un branch al optimizar esto de la
    siguiente manera:

    	b = 42;
    	if (a)
    		b = a;

     En el código de un solo subproceso, esto no solo es seguro, sino que
     también ahorra un branch. Desafortunadamente, en código concurrente,
     esta optimización podría causar que alguna otra CPU vea un valor falso
     de 42, incluso si la variable 'a' nunca fue cero, al cargar la
     variable 'b'. Use WRITE_ONCE() para evitar esto de la siguiente
     manera:

	if (a)
		WRITE_ONCE(b, a);
	else
		WRITE_ONCE(b, 42);

    El compilador también puede inventar cargas. Estos casos suelen ser
    menos perjudiciales, pero pueden dar como resultado "bouncing" de la
    línea de caché y, por lo tanto, bajo rendimiento y escalabilidad.
    Utilice READ_ONCE() para evitar cargas inventadas.

 (*) Para ubicaciones de memoria alineadas cuyo tamaño les permita
     acceder con una sola instrucción de referencia de memoria, evite el
     "desgarro de la carga" (load tearing) y "desgarro del store" (store
     tearing), en el que un solo gran acceso es reemplazado por múltiples
     accesos menores. Por ejemplo, dada una arquitectura que tiene
     instrucciones de almacenamiento de 16 bits con campos inmediatos de 7
     bits, el compilador podría tener la tentación de usar dos
     instrucciones inmediatas de almacenamiento de 16 bits para implementar
     el siguiente store de 32 bits:

	p = 0x00010002;

     Tenga en cuenta que GCC realmente usa este tipo de optimización, lo
     cual no es sorprendente dado que probablemente costaría más de dos
     instrucciones el construir la constante y luego almacenarla. Por lo
     tanto, esta optimización puede ser una victoria en un código de un
     solo subproceso. De hecho, un error reciente (desde que se solucionó)
     hizo que GCC usara incorrectamente esta optimización en un store
     volátil. En ausencia de tales errores, el uso de WRITE_ONCE() evita el
     desgarro del store en el siguiente ejemplo:

	struct __attribute__((__packed__)) foo {
		short a;
		int b;
		short c;
	};
	struct foo foo1, foo2;
	...

	foo2.a = foo1.a;
	foo2.b = foo1.b;
	foo2.c = foo1.c;

     Debido a que no hay envoltorios READ_ONCE() o WRITE_ONCE() y no
     hay markings volátiles, el compilador estaría en su derecho de
     implementar estas tres declaraciones de asignación como un par de
     cargas de 32 bits, seguido de un par de stores de 32 bits. Esto
     resultaría en una carga con desgarro en 'foo1.b' y store del desgarro
     en 'foo2.b'. READ_ONCE() y WRITE_ONCE() nuevamente evitan el desgarro
     en este ejemplo:

	foo2.a = foo1.a;
	WRITE_ONCE(foo2.b, READ_ONCE(foo1.b));
	foo2.c = foo1.c;

Aparte de esto, nunca es necesario usar READ_ONCE() y WRITE_ONCE() en una
variable que se ha marcado como volátil. Por ejemplo, dado que 'jiffies'
está marcado como volátil, nunca es necesario usar READ_ONCE(jiffies). La
razón de esto es que READ_ONCE() y WRITE_ONCE() se implementan como
conversiones volátiles, lo que no tiene efecto cuando su argumento ya está
marcado como volátil.

Tenga en cuenta que estas barreras del compilador no tienen un efecto
directo en la CPU, que luego puede reordenar las cosas como quiera.


BARRERAS DE MEMORIA DE LA CPU
-----------------------------

El kernel de Linux tiene siete barreras básicas de memoria de CPU:

TIPO			OBLIGATORIO	SMP CONDICIONAL
=======================	===============	===============
GENERAL			mb()		smp_mb()
WRITE			wmb()		smp_wmb()
READ			rmb()		smp_rmb()
DEPEDENCIA DE DIRECCIÓN			READ_ONCE()


Todas las barreras de memoria, excepto las barreras de dependencia de
direcciones, implican una barrera del compilador. Las dependencias de
direcciones no imponen ningún orden de compilación adicional.

Además: en el caso de las dependencias de direcciones, se esperaría que el
compilador emita las cargas en el orden correcto (por ejemplo, `a[b]`
tendría que cargar el valor de b antes de cargar a[b]), sin embargo, no hay
garantía alguna en la especificación de C sobre que el compilador no puede
especular el valor de b (por ejemplo, es igual a 1) y carga a[b] antes que
b (ej. tmp = a[1]; if (b != 1) tmp = a[b]; ). También existe el problema de
que un compilador vuelva a cargar b después de haber cargado a[b], teniendo
así una copia más nueva de b que a[b]. Aún no se ha conseguido un consenso
acerca de estos problemas, sin embargo, el macro READ_ONCE() es un buen
lugar para empezar a buscar.

Las barreras de memoria SMP se reducen a barreras de compilador cuando se
compila a monoprocesador, porque se supone que una CPU parecerá ser
auto-consistente, y ordenará correctamente los accesos superpuestos
respecto a sí misma. Sin embargo, consulte la subsección "Guests de
máquinas virtuales" mas adelante.

[!] Tenga en cuenta que las barreras de memoria SMP _deben_ usarse para
controlar el orden de referencias a memoria compartida en sistemas SMP,
aunque el uso de bloqueo en su lugar sea suficiente.

Las barreras obligatorias no deben usarse para controlar los efectos de
SMP, ya que dichas barreras imponen una sobrecarga innecesaria en los
sistemas SMP y UP. Se pueden, sin embargo, usar para controlar los efectos
MMIO en los accesos a través de ventanas E/S de memoria relajada. Estas
barreras son necesarias incluso en sistemas que no son SMP, ya que afectan
al orden en que las operaciones de memoria aparecen en un dispositivo, al
prohibir tanto al compilador como a la CPU que sean reordenados.


Hay algunas funciones de barrera más avanzadas:

 (*) smp_store_mb(var, valor)

     Asigna el valor a la variable y luego inserta una barrera de memoria
     completa después de ella. No se garantiza insertar nada más que una
     barrera del compilador en una compilación UP.


 (*) smp_mb__before_atomic();
 (*) smp_mb__after_atomic();

     Estos se pueden usar con funciones RMW atómicas que no implican
     barreras de memoria, pero donde el código necesita una barrera de
     memoria. Ejemplos de funciones RMW atómicas que no implican una
     barrera de memoria son, por ejemplo, agregar, restar, operaciones
     condicionales (fallidas), funciones _relaxed, pero no atomic_read o
     atomic_set. Un ejemplo común donde se puede requerir una barrera es
     cuando se usan operaciones atómicas como referencia de contador.

     Estos también se utilizan para funciones atómicas RMW bitop que no
     implican una barrera de memoria (como set_bit y clear_bit).

     Como ejemplo, considere una pieza de código que marca un objeto como
     muerto y luego disminuye el contador de referencias del objeto:

	obj->dead = 1;
	smp_mb__before_atomic();
	atomic_dec(&obj->ref_count);

     Esto asegura que la marca de muerte en el objeto se perciba como
     fijada *antes* de que disminuya el contador de referencia.

     Consulte Documentation/atomic_{t,bitops}.txt para obtener más
     información.


 (*) dma_wmb();
 (*) dma_rmb();
 (*) dma_mb();

     Estos son usados con memoria consistente para garantizar el orden de
     escrituras o lecturas de memoria compartida accesible tanto para la
     CPU como para un dispositivo compatible con DMA.

     Por ejemplo, considere un controlador de dispositivo que comparte
     memoria con otro dispositivo y usa un valor de estado del descriptor
     para indicar si el descriptor pertenece al dispositivo o a la CPU, y
     un "doorbell" (timbre, punto de acceso) para avisarle cuando haya
     nuevos descriptores disponibles:

	if (desc->status != DEVICE_OWN) {
		/* no leer los datos hasta que tengamos el descriptor */
		dma_rmb();

		/* leer/modificar datos */
		read_data = desc->data;
		desc->data = write_data;

		/* flush de modificaciones antes de la actualización de estado */
		dma_wmb();

		/* asignar propiedad */
		desc->status = DEVICE_OWN;

		/* notificar al dispositivo de nuevos descriptores */
		writel(DESC_NOTIFY, doorbell);
	}

     El dma_rmb() nos permite garantizar que el dispositivo ha liberado su
     propiedad antes de que leamos los datos del descriptor, y el dma_wmb()
     permite garantizar que los datos se escriben en el descriptor antes de
     que el dispositivo pueda ver que ahora tiene la propiedad. El dma_mb()
     implica tanto un dma_rmb() como un dma_wmb(). Tenga en cuenta que, al
     usar writel(), no se necesita un wmb() anterior para garantizar que
     las escrituras de la memoria caché coherente se hayan completado antes
     escribiendo a la región MMIO. El writel_relaxed() más barato no
     proporciona esta garantía y no debe utilizarse aquí.

     Consulte la subsección "Efectos de barrera de E/S del kernel" para
     obtener más información sobre accesorios de E/S relajados y el archivo
     Documentation/core-api/dma-api.rst para más información sobre memoria
     consistente.

 (*) pmem_wmb();

     Es es para uso con memoria persistente para garantizar que los stores
     para los que las modificaciones se escriben en el almacenamiento
     persistente llegaron a dominio de durabilidad de la plataforma.

     Por ejemplo, después de una escritura no temporal en la región pmem,
     usamos pmem_wmb() para garantizar que los stores hayan alcanzado el
     dominio de durabilidad de la plataforma. Esto garantiza que los stores
     han actualizado el almacenamiento persistente antes de cualquier
     acceso a datos o transferencia de datos causada por instrucciones
     posteriores. Esto es además del orden realizado por wmb().

     Para la carga desde memoria persistente, las barreras de memoria de
     lectura existentes son suficientes para garantizar el orden de
     lectura.

 (*) io_stop_wc();

     Para accesos a memoria con atributos de combinación de escritura (por
     ejemplo, los devueltos por ioremap_wc(), la CPU puede esperar a que
     los accesos anteriores se junten con posteriores. io_stop_wc() se
     puede utilizar para evitar la combinación de accesos a memoria de
     de escritura antes de esta macro, con los posteriores, cuando dicha
     espera tenga implicaciones en el rendimiento.

=========================================
BARRERAS DE MEMORIA IMPLÍCITAS DEL KERNEL
=========================================

Algunas de las otras funciones en el kernel Linux implican barreras de
memoria, entre estas encontramos funciones de bloqueo y planificación
("scheduling").

Esta especificación es una garantía _mínima_; cualquier arquitectura
particular puede proporcionar garantías más sustanciales, pero no se puede
confiar en estas fuera de código específico de arquitectura.


FUNCIONES DE ADQUISICIÓN DE CERROJO
-----------------------------------

El kernel Linux tiene una serie de abstracciones de bloqueo:

 (*) spin locks (cerrojos en loop)
 (*) R/W spin lock (cerrojos de escritura/lectura)
 (*) mutex
 (*) semáforos
 (*) R/W semáforos

En todos los casos existen variantes de las operaciones "ACQUIRE" y
"RELEASE" para cada uno de ellos. Todas estas operaciones implican ciertas
barreras:

 (1) Implicaciones de la operación ACQUIRE:

     Las operaciones de memoria emitidas después del ACQUIRE se completarán
     después de que la operación ACQUIRE haya finalizado.

     Las operaciones de memoria emitidas antes de ACQUIRE pueden
     completarse después que la operación ACQUIRE se ha completado.

 (2) Implicaciones de la operación RELEASE:

     Las operaciones de memoria emitidas antes de la RELEASE se
     completarán antes de que la operación de RELEASE se haya completado.

     Las operaciones de memoria emitidas después de la RELEASE pueden
     completarse antes de que la operación de RELEASE se haya completado.

 (3) Implicación de ACQUIRE vs ACQUIRE:

     Todas las operaciones ACQUIRE emitidas antes de otra operación
     ACQUIRE serán completadas antes de esa operación ACQUIRE.

 (4) Implicación de ACQUIRE vs RELEASE:

     Todas las operaciones ACQUIRE emitidas antes de una operación RELEASE
     serán completadas antes de la operación RELEASE.

 (5) Implicación de ACQUIRE condicional fallido:

     Ciertas variantes de bloqueo de la operación ACQUIRE pueden fallar, ya
     sea debido a no poder obtener el bloqueo de inmediato, o debido a que
     recibieron una señal de desbloqueo mientras dormían esperando que el
     cerrojo estuviera disponible. Los fallos en cerrojos no implican
     ningún tipo de barrera.

[!] Nota: una de las consecuencias de que los cerrojos en ACQUIRE y RELEASE
sean barreras unidireccionales, es que los efectos de las instrucciones
fuera de una sección crítica pueden filtrarse al interior de la sección
crítica.

No se puede suponer que un ACQUIRE seguido de una RELEASE sea una barrera
de memoria completa dado que es posible que un acceso anterior a ACQUIRE
suceda después del ACQUIRE, y un acceso posterior a la RELEASE suceda antes
del RELEASE, y los dos accesos puedan entonces cruzarse:

	*A = a;
	ACQUIRE M
	RELEASE M
	*B = b;

puede ocurrir como:

	ACQUIRE M, STORE *B, STORE *A, RELEASE M

Cuando ACQUIRE y RELEASE son bloqueo de adquisición y liberación,
respectivamente, este mismo orden puede ocurrir si el cerrojo ACQUIRE y
RELEASE son para la misma variable de bloqueo, pero solo desde la
perspectiva de otra CPU que no tiene ese bloqueo. En resumen, un ACQUIRE
seguido de un RELEASE NO puede entenderse como una barrera de memoria
completa.

De manera similar, el caso inverso de un RELEASE seguido de un ACQUIRE no
implica una barrera de memoria completa. Por lo tanto, la ejecución de la
CPU de los tramos críticos correspondientes a la RELEASE y la ACQUIRE
pueden cruzarse, de modo que:

	*A = a;
	RELEASE M
	ACQUIRE N
	*B = b;

puede ocurrir como:

	ACQUIRE N, STORE *B, STORE *A, RELEASE M

Podría parecer que este nuevo orden podría introducir un punto muerto.
Sin embargo, esto no puede suceder porque si tal punto muerto amenazara
con suceder, el RELEASE simplemente se completaría, evitando así el
interbloqueo ("deadlock", punto muerto).

	¿Por qué funciona esto?

	Un punto clave es que solo estamos hablando de la CPU re-haciendo el
  orden, no el compilador. Si el compilador (o, ya puestos, el
  desarrollador) cambió las operaciones, un deadlock -podría- ocurrir.

	Pero supongamos que la CPU reordenó las operaciones. En este caso, el
	desbloqueo precede al bloqueo en el código ensamblador. La CPU
  simplemente eligió intentar ejecutar primero la última operación de
  bloqueo. Si hay un interbloqueo, esta operación de bloqueo simplemente
  esperará (o tratará de dormir, pero hablaremos de eso más adelante). La
  CPU eventualmente ejecutará la operación de desbloqueo (que precedió a la
	operación de bloqueo en el código ensamblador), lo que desenmascará el
  potencial punto muerto, permitiendo que la operación de bloqueo tenga
  éxito.

	Pero, ¿y si el cerrojo es un cerrojo que duerme ("sleeplock")? En tal
  caso, el código intentará entrar al scheduler, donde eventualmente
  encontrará una barrera de memoria, que forzará la operación de desbloqueo
  anterior para completar, nuevamente desentrañando el punto muerto. Podría
	haber una carrera de desbloqueo del sueño ("sleep-unlock race"), pero la
  primitiva de bloqueo necesita resolver tales carreras correctamente en
  cualquier caso.

Es posible que los cerrojos y los semáforos no proporcionen ninguna
garantía de orden en sistemas compilados en UP, por lo que no se puede
contar con tal situación para lograr realmente nada en absoluto,
especialmente con respecto a los accesos de E/S, a menos que se combinen
con operaciones de inhabilitación de interrupciones.

Consulte también la sección "Efectos de barrera adquiriendo intra-CPU".


Como ejemplo, considere lo siguiente:

	*A = a;
	*B = b;
	ACQUIRE
	*C = c;
	*D = d;
	RELEASE
	*E = e;
	*F = f;

La siguiente secuencia de eventos es aceptable:

	ACQUIRE, {*F,*A}, *E, {*C,*D}, *B, RELEASE

  [+] Tenga en cuenta que {*F,*A} indica un acceso combinado.

Pero ninguno de los siguientes lo son:

	{*F,*A}, *B,	ACQUIRE, *C, *D,	RELEASE, *E
	*A, *B, *C,	ACQUIRE, *D,		RELEASE, *E, *F
	*A, *B,		ACQUIRE, *C,		RELEASE, *D, *E, *F
	*B,		ACQUIRE, *C, *D,	RELEASE, {*F,*A}, *E



FUNCIONES DE DESACTIVACIÓN DE INTERRUPCIONES
--------------------------------------------

Las funciones que deshabilitan interrupciones (equivalentes a ACQUIRE) y
habilitan interrupciones (equivalentes a RELEASE) actuarán únicamente como
barrera del compilador. Por consiguiente, si la memoria o la E/S requieren
barreras en tal situación, deben ser provistas por algún otro medio.


FUNCIONES DE DORMIR Y DESPERTAR
-------------------------------

Dormir y despertar son eventos marcados ("flagged") en los datos globales
que se pueden ver como una interacción entre dos piezas de datos: el estado
de la task (hilo, proceso, tarea) que espera el evento y los datos globales
utilizados para indicar el evento. Para asegurarse de que estos parezcan
suceder en el orden correcto, las primitivas para comenzar el proceso de ir
a dormir, y las primitivas para iniciar un despertar implican ciertas
barreras.

En primer lugar, el agente durmiente normalmente sigue algo similar a esta
secuencia de eventos:

	for (;;) {
		set_current_state(TASK_UNINTERRUPTIBLE);
		if (evento_indicado)
			break;
		schedule(); // planificar
	}

Una barrera de memoria general se obtiene automáticamente mediante
set_current_state() después de haber alterado el estado de la tarea:

	CPU 1
	===============================
	set_current_state(); // hacer_estado_actual()
	  smp_store_mb();
	    STORE current->state
	    <barrera general>
	LOAD evento_indicado

set_current_state() puede estar envuelto por:

	prepare_to_wait(); // preparese_para_esperar();
	prepare_to_wait_exclusive(); // prepararse_para_solo_esperar();

que por lo tanto también implican una barrera de memoria general después de
establecer el estado. Toda la secuencia anterior está disponible en varias
formas, todas las cuales obtienen la barrera de memoria en el lugar
correcto:

	wait_event();
	wait_event_interruptible();
	wait_event_interruptible_exclusive();
	wait_event_interruptible_timeout();
	wait_event_killable();
	wait_event_timeout();
	wait_on_bit();
	wait_on_bit_lock();


En segundo lugar, el código que realiza una activación normalmente se
asemeja a algo como esto:

	evento_indicado = 1;
	wake_up(&event_wait_queue); // despertar

o:

	evento_indicado = 1;
	wake_up_process(event_daemon); // despertar proceso

wake_up() ejecuta una barrera de memoria general si despierta algo. Si no
despierta nada, entonces una barrera de memoria puede o no ser ejecutada;
no debe confiar en ello. La barrera se produce antes del acceso al estado
de la tarea. En particular, se encuentra entre el STORE para indicar el
evento y el STORE para configurar TASK_RUNNING (hilo ejecutando):

	CPU 1 (Durmiente)			CPU 2 (Despertadora)
	===============================	===============================
	set_current_state();		STORE evento_indicado
	  smp_store_mb();		wake_up();
	    STORE current->state	  ...
	    <barrera general>		  <barrera general>
	LOAD evento_indicado		  if ((LOAD task->state) & TASK_NORMAL)
					    STORE task->state

donde "task" es el subproceso que se está despertando y es igual al
"current" (hilo actual) de la CPU 1.

Para reiterar, se garantiza la ejecución de una barrera de memoria general
mediante wake_up() si algo está realmente despierto, pero de lo contrario
no existe tal garantía. Para entender esto, considere la siguiente
secuencia de eventos, donde X e Y son ambos cero inicialmente:

	CPU 1				CPU 2
	===============================	===============================
	X = 1;				Y = 1;
	smp_mb();			wake_up();
	LOAD Y				LOAD X

Si ocurre una reactivación ("wakeup"), una (al menos) de las dos cargas
debe ver 1. Si, por otro lado, no ocurre una reactivación, ambas cargas
pueden ver 0.

wake_up_process() siempre ejecuta una barrera de memoria general. La
barrera, de nuevo, ocurre antes de que se acceda al estado del hilo. En
particular, si wake_up(), en el fragmento anterior, fuera reemplazado por
una llamada a wake_up_process(), las dos cargas verían 1, garantizado.

Las funciones de activación disponibles incluyen:

	complete();
	wake_up();
	wake_up_all();
	wake_up_bit();
	wake_up_interruptible();
	wake_up_interruptible_all();
	wake_up_interruptible_nr();
	wake_up_interruptible_poll();
	wake_up_interruptible_sync();
	wake_up_interruptible_sync_poll();
	wake_up_locked();
	wake_up_locked_poll();
	wake_up_nr();
	wake_up_poll();
	wake_up_process();

En términos de orden de la memoria, todas estas funciones proporcionan las
mismas garantías que un wake_up() (o más fuertes).

[!] Tenga en cuenta que las barreras de la memoria implicadas por el
durmiente y el despierto _no_ ordenan varios stores antes del despertar con
respecto a cargas de los valores guardados después de que el durmiente haya
llamado a set_current_state(). Por ejemplo, si el durmiente hace:

	set_current_state(TASK_INTERRUPTIBLE);
	if (evento_indicado)
		break;
	__set_current_state(TASK_RUNNING);
	hacer_algo(my_data);

y el que despierta hace:

	my_data = valor;
	evento_indicado = 1;
	wake_up(&event_wait_queue);

no existe garantía de que el cambio a event_indicated sea percibido por
el durmiente de manera que venga después del cambio a my_data. En tal
circunstancia, el código en ambos lados debe sacar sus propias barreras de
memoria entre los separados accesos a datos. Por lo tanto, el durmiente
anterior debería hacer:

	set_current_state(TASK_INTERRUPTIBLE);
	if (evento_indicado) {
		smp_rmb();
		hacer_algo(my_data);
	}

y el que despierta debería hacer:

	my_data = value;
	smp_wmb();
	evento_indicado = 1;
	wake_up(&event_wait_queue);

FUNCIONES VARIAS
----------------

Otras funciones que implican barreras:

 (*) schedule() y similares implican barreras completas de memoria.


========================================
EFECTOS DE BARRERA ADQUIRIENDO INTRA-CPU
========================================

En los sistemas SMP, las primitivas de bloqueo proveen una forma más
sustancial de barrera: una que afecta el orden de acceso a la memoria en
otras CPU, dentro del contexto de conflicto en cualquier bloqueo en
particular.


ADQUISICIÓN VS ACCESOS A MEMORIA
--------------------------------

Considere lo siguiente: el sistema tiene un par de spinlocks (M) y (Q), y
tres CPU; entonces la siguiente secuencia de eventos debería ocurrir:

	CPU 1				CPU 2
	===============================	===============================
	WRITE_ONCE(*A, a);		WRITE_ONCE(*E, e);
	ACQUIRE M			ACQUIRE Q
	WRITE_ONCE(*B, b);		WRITE_ONCE(*F, f);
	WRITE_ONCE(*C, c);		WRITE_ONCE(*G, g);
	RELEASE M			RELEASE Q
	WRITE_ONCE(*D, d);		WRITE_ONCE(*H, h);

Entonces no hay garantía sobre en qué orden verá la CPU 3 los accesos a *A
hasta que *H ocurra, además de las restricciones impuestas por los bloqueos
separados en las distintas CPUs. Podría, por ejemplo, ver:

	*E, ACQUIRE M, ACQUIRE Q, *G, *C, *F, *A, *B, RELEASE Q, *D, *H, RELEASE M

Pero no verá ninguno de:

	*B, *C or *D preceding ACQUIRE M
	*A, *B or *C following RELEASE M
	*F, *G or *H preceding ACQUIRE Q
	*E, *F or *G following RELEASE Q

========================================
¿DÓNDE SE NECESITAN BARRERAS DE MEMORIA?
========================================

Bajo operación normal, el re-ordenamiento de una operación de memoria
generalmente no va a suponer un problema, ya que para una pieza de código
lineal de un solo subproceso seguirá pareciendo que funciona correctamente,
incluso si está en un kernel SMP. Existen, sin embargo, cuatro
circunstancias en las que reordenar definitivamente _podría_ ser un
problema:

 (*) Interacción entre procesadores.

 (*) Operaciones atómicas.

 (*) Acceso a dispositivos.

 (*) Interrupciones.


INTERACCIÓN ENTRE PROCESADORES
------------------------------

Cuando se da un sistema con más de un procesador, más de una CPU en el
sistema puede estar trabajando en el mismo conjunto de datos al mismo
tiempo. Esto puede causar problemas de sincronización, y la forma habitual
de tratar con estos es utilizar cerrojos. Sin embargo, los cerrojos son
bastante caros, por lo que puede ser preferible operar sin el uso de un
cerrojo a ser posible. En cuyo caso, es posible que las operaciones que
afectan a ambas CPU deban ordenarse cuidadosamente para evitar un
funcionamiento incorrecto.

Considere, por ejemplo, la ruta lenta del semáforo R/W. Aquí hay un proceso
de espera en cola del semáforo, en virtud de que tiene una parte de su pila
vinculada a la lista de procesos en espera del semáforo:

	struct rw_semaphore {
		...
		spinlock_t lock;
		struct list_head waiters;
	};

	struct rwsem_waiter {
		struct list_head list;
		struct task_struct *task;
	};

Para despertar a un proceso que espera ("waiter") en particular, las
funciones up_read() o up_write() tienen que:

 (1) leer el siguiente puntero del registro de este proceso que espera,
     para saber dónde está el registro del siguiente waiter;

 (2) leer el puntero a la estructura de tareas del waiter;

 (3) borrar el puntero de la tarea para decirle al waiter que se le ha dado
     el semáforo;

 (4) llamar a wake_up_process() en la tarea; y

 (5) liberar la referencia retenida en la estructura de tareas del waiter.

En otras palabras, tiene que realizar esta secuencia de eventos:

	LOAD waiter->list.next;
	LOAD waiter->task;
	STORE waiter->task;
	CALL wakeup
	RELEASE task

y si alguno de estos pasos ocurre fuera de orden, entonces todo puede que
funcione defectuosamente.

Una vez que se ha puesto en cola y soltado el bloqueo de semáforo, el
proceso que espera no consigue el candado de nuevo; en cambio, solo espera
a que se borre su puntero de tarea antes de continuar. Dado que el registro
está en la pila del proceso que espera, esto significa que si el puntero de
la tarea se borra _antes_ de que se lea el siguiente puntero de la lista,
otra CPU podría comenzar a procesar el proceso que espera y podría romper
el stack del proceso que espera antes de que la función up*() tenga la
oportunidad de leer el puntero que sigue.

Considere entonces lo que podría suceder con la secuencia de eventos
anterior:

	CPU 1				CPU 2
	===============================	===============================
					down_xxx()
					Poner waiter en la "queue" (cola)
					Dormir
	up_yyy()
	LOAD waiter->task;
	STORE waiter->task;
					Despertado por otro evento
	<preempt>
					Reanudar el procesamiento
					down_xxx() regresa
					llamada a foo()
					foo() estropea *waiter
	</preempt>
	LOAD waiter->list.next;
	--- OOPS ---

Esto podría solucionarse usando el bloqueo de semáforo, pero luego la
función down_xxx() tiene que obtener innecesariamente el spinlock
nuevamente, después de ser despertado el hilo.

La forma de lidiar con esto es insertar una barrera de memoria SMP general:

	LOAD waiter->list.next;
	LOAD waiter->task;
	smp_mb();
	STORE waiter->task;
	CALL wakeup
	RELEASE task

En este caso, la barrera garantiza que todos los accesos a memoria antes de
la barrera parecerán suceder antes de todos los accesos a memoria después
de dicha barrera con respecto a las demás CPU del sistema. _No_ garantiza
que todos los accesos a memoria antes de la barrera se completarán en el
momento en que la instrucción de la barrera en sí se complete.

En un sistema UP, donde esto no sería un problema, la función smp_mb() es
solo una barrera del compilador, asegurándose así de que el compilador
emita las instrucciones en el orden correcto sin realmente intervenir en la
CPU. Como solo hay un CPU, la lógica de orden de dependencias de esa CPU se
encargará de todo lo demás.


OPERACIONES ATÓMICAS
--------------------

Si bien son, técnicamente, consideraciones de interacción entre
procesadores, las operaciones atómicas se destacan especialmente porque
algunas de ellas implican barreras de memoria completa y algunas otras no,
pero se confía mucho en ellos en su conjunto a lo largo del kernel.

Consulte Documentation/atomic_t.txt para obtener más información.


ACCESO A DISPOSITIVOS
---------------------

Un driver puede ser interrumpido por su propia rutina de servicio de
interrupción y, por lo tanto, las dos partes del driver pueden interferir
con los intentos de controlar o acceder al dispositivo.

Esto puede aliviarse, al menos en parte, desactivando las interrupciones
locales (una forma de bloqueo), de modo que las operaciones críticas sean
todas contenidas dentro la sección de interrupción desactivada en el
controlador. Mientras la interrupción del driver está ejecutando la rutina,
es posible que el "core" del controlador no se ejecute en la misma CPU y no
se permita que su interrupción vuelva a ocurrir hasta que la interrupción
actual haya sido resuelta, por lo tanto, el controlador de interrupción no
necesita bloquearse contra esto.

Sin embargo, considere un driver que estaba hablando con una tarjeta
ethernet que tiene un registro de direcciones y un registro de datos. Si
el core de ese controlador habla con la tarjeta estando en desactivación de
interrupción y luego se invoca el controlador de interrupción del
controlador:

	IRQ LOCALES DESACTIVADAS
	writew(ADDR, 3);
	writew(DATA, y);
	IRQ LOCALES ACTIVADAS
	<interrupción>
	writew(ADDR, 4);
	q = readw(DATA);
	</interrupción>

El almacenamiento en el registro de datos puede ocurrir después del segundo
almacenamiento en el registro de direcciones si las reglas de orden son lo
suficientemente relajadas:

  	STORE *ADDR = 3, STORE *ADDR = 4, STORE *DATA = y, q = LOAD *DATA

Si se relajan las reglas de orden, se debe asumir que los accesos
realizados dentro de la sección con interrupción deshabilitada pueden
filtrarse fuera de esta y pueden intercalarse con accesos realizados en una
interrupción - y viceversa - a menos que se utilicenn barreras implícita o
explícitas.

Normalmente, esto no será un problema porque los accesos de E/S realizados
dentro de tales secciones incluirán operaciones de carga síncronas en
registros E/S estrictamente ordenados, que forman barreras de E/S
implícitas.


Una situación similar puede ocurrir entre una rutina de interrupción y dos
rutinas ejecutándose en separadas CPU que se comunican entre sí. Si tal
caso es probable, entonces se deben usar bloqueos de desactivación de
interrupciones para garantizar el orden.


=====================================
 Efectos de barrera de E/S del kernel
=====================================

La interfaz con periféricos a través de accesos de E/S es profundamente
específica para cada arquitectura y dispositivo. Por lo tanto, los drivers
que son inherentemente no portátiles pueden depender de comportamientos
específicos de sus sistemas de destino, con el fin de lograr la
sincronización de la manera más ligera posible. Para drivers que deseen ser
portátiles entre múltiples arquitecturas e implementaciones de bus, el
kernel ofrece una serie de funciones de acceso que proporcionan varios
grados de garantías de orden:

 (*) readX(), writeX():

	Las funciones de acceso MMIO readX() y writeX() usan un puntero al
	periférico al que se accede como un parámetro __iomem *. para punteros
	asignados los atributos de E/S predeterminados (por ejemplo, los
        devueltos por ioremap()), las garantías de orden son las siguientes:

	1. Se ordenan todos los accesos readX() y writeX() a un mismo periférico
	   entre estos. Esto asegura que los registros de acceso MMIO por el
	   mismo subproceso de la CPU a un dispositivo en particular llegarán en
	   el orden del programa.

	2. Se ordena un writeX() emitido por un subproceso de CPU que contiene un
	   spinlock antes de un writeX() al mismo periférico desde otro
           subproceso de CPU, si emitido después de una adquisición posterior del
	   mismo spinlock. Esto garantiza que ese registro MMIO escribe en un
           dispositivo en particular, mientras que se obtiene un spinlock en un
           orden consistente con las adquisiciones del cerrojo.

	3. Un writeX() por un subproceso de la CPU al periférico primero esperará
	   a la finalización de todas las escrituras anteriores en la memoria
           emitidas por, o bien propagadas por, el mismo subproceso. Esto asegura
	   que las escrituras de la CPU a un búfer DMA de salida asignadas por
           dma_alloc_coherent() serán visibles para un motor ("engine") DMA
           cuando la CPU escriba en sus registros de control MMIO, para activar
           la transferencia.

	4. Un readX() de un subproceso del CPU, desde el periférico, se
	   completará antes de que cualquier lectura subsiguiente de memoria por
	   el mismo subproceso pueda comenzar. Esto asegura que las lecturas de
           la CPU desde un búfer DMA entrantes asignadas por
           dma_alloc_coherent(), no verán datos obsoletos después de leer el
           registro de estado MMIO del motor DMA, para establecer que la
           transferencia DMA se haya completado.

	5. Un readX() por un subproceso del CPU, desde el periférico, se
	   completará antes de que cualquier bucle delay() subsiguiente pueda
           comenzar a ejecutarse en el mismo subproceso. Esto asegura que dos
           escrituras del CPU a registros MMIO en un periférico llegarán al menos
	   con 1us de diferencia, si la primera escritura se lee inmediatamente
           de vuelta con readX() y se llama a udelay(1) antes del segundo
           writeX():

		writel(42, DEVICE_REGISTER_0); // Llega al dispositivo ...
		readl(DEVICE_REGISTER_0);
		udelay(1);
		writel(42, DEVICE_REGISTER_1); // al menos 1us antes de esto....

Las propiedades de orden de los punteros __iomem obtenidos con valores de
atributos que no sean los valores por defecto (por ejemplo, los devueltos
por ioremap_wc()) son específicos de la arquitectura subyacente y, por lo
tanto, las garantías enumeradas anteriormente no pueden por lo general ser
aseguradas para accesos a este tipo de "mappings" (asignaciones).

 (*) readX_relaxed(), writeX_relaxed():

	Son similares a readX() y writeX(), pero proporcionan una garantía de
        orden de memoria más débil. Específicamente, no garantizan orden con
	respecto al bloqueo, los accesos normales a la memoria o los bucles
        delay() (es decir, los puntos 2-5 arriba) pero todavía se garantiza que
        se ordenarán con respecto a otros accesos desde el mismo hilo de la CPU,
        al mismo periférico, cuando se opera en punteros __iomem asignados con el
        valor predeterminado para los atributos de E/S.

 (*) readsX(), writesX():

	Los puntos de entrada readsX() y writesX() MMIO están diseñados para
        acceder FIFOs mapeados en memoria y basados en registros que residen en
        periféricos, que no son capaces de realizar DMA. Por tanto, sólo
        proporcionan garantías de orden readX_relaxed() y writeX_relaxed(), como
        se documentó anteriormente.

 (*) inX(), outX():

	Los puntos de entrada inX() y outX() están destinados a acceder a mapas
        de puertos "legacy" (antiguos) de periféricos de E/S, que pueden requerir
	instrucciones especiales en algunas arquitecturas (especialmente, en
        x86). El número de puerto del periférico que se está accedido se pasa
        como un argumento.

	Dado que muchas arquitecturas de CPU acceden finalmente a estos
        periféricos a través de un mapeo interno de memoria virtual, las
        garantías de orden portátiles proporcionadas por inX() y outX() son las
        mismas que las proporcionadas por readX() y writeX(), respectivamente, al
        acceder a una asignación con los valores de atributos de E/S
        predeterminados (los que haya por defecto).

        Los drivers de dispositivos pueden esperar que outX() emita una
        transacción de escritura no publicada, que espera una respuesta de
        finalización del periférico de E/S antes de regresar. Esto no está
        garantizado por todas las arquitecturas y por lo tanto no forma parte de
        la semántica de orden portátil.

 (*) insX(), outsX():

        Como arriba, los puntos de entrada insX() y outsX() proporcionan el mismo
        orden garantizado por readsX() y writesX() respectivamente, al acceder a
        un mapping con los atributos de E/S predeterminados.

 (*) ioreadX(), iowriteX():

        Estos funcionarán adecuadamente para el tipo de acceso que realmente están
        haciendo, ya sea inX()/outX() o readX()/writeX().

Con la excepción de los puntos de entrada (insX(), outsX(), readsX() y
writesX()), todo lo anterior supone que el periférico subyacente es
little-endian y, por lo tanto, realizará operaciones de intercambio de
bytes en arquitecturas big-endian.


===========================================
MODELO DE ORDEN MÍNIMO DE EJECUCIÓN ASUMIDO
===========================================

Debe suponerse que la CPU conceptual está débilmente ordenada, pero que
mantiene la apariencia de causalidad del programa con respecto a sí misma.
Algunas CPU (como i386 o x86_64) están más limitadas que otras (como
powerpc o frv), por lo que el caso más relajado (es decir, DEC Alpha) se
debe asumir fuera de código específico de arquitectura.

Esto significa que se debe considerar que la CPU ejecutará su flujo de
instrucciones en el orden que se quiera - o incluso en paralelo - siempre
que si una instrucción en el flujo depende de una instrucción anterior,
entonces dicha instrucción anterior debe ser lo suficientemente completa[*]
antes de que la posterior instrucción puede proceder; en otras palabras:
siempre que la apariencia de causalidad se mantenga.

 [*] Algunas instrucciones tienen más de un efecto, como cambiar el
     código de condición, cambio de registros o cambio de memoria - y
     distintas instrucciones pueden depender de diferentes efectos.

Una CPU puede también descartar cualquier secuencia de instrucciones que
termine sin tener efecto final. Por ejemplo, si dos instrucciones
adyacentes cargan un valor inmediato en el mismo registro, la primera puede
descartarse.


De manera similar, se debe suponer que el compilador podría reordenar la
corriente de instrucciones de la manera que crea conveniente, nuevamente
siempre que la apariencia de causalidad se mantenga.


=====================================
EFECTOS DE LA MEMORIA CACHÉ DE LA CPU
=====================================

La forma en que se perciben las operaciones de memoria caché en todo el
sistema se ve afectada, hasta cierto punto, por los cachés que se
encuentran entre las CPU y la memoria, y por el sistema de coherencia en
memoria que mantiene la consistencia de estado en el sistema.

En cuanto a la forma en que una CPU interactúa con otra parte del sistema a
través del caché, el sistema de memoria tiene que incluir los cachés de la
CPU y barreras de memoria, que en su mayor parte actúan en la interfaz
entre la CPU y su caché (las barreras de memoria lógicamente actúan sobre
la línea de puntos en el siguiente diagrama):

	    <--- CPU --->         :       <----------- Memoria ----------->
	                          :
	+--------+    +--------+  :   +--------+    +-----------+
	|  Core  |    | Cola   |  :   | Cache  |    |           |    +---------+
	|  CPU   |    | de     |  :   | CPU    |    |           |    |         |
	|        |--->| acceso |----->|        |<-->|           |    |         |
	|        |    | a      |  :   |        |    |           |--->| Memoria |
	|        |    | memoria|  :   |        |    |           |    |         |
	+--------+    +--------+  :   +--------+    | Mecanismo |    |         |
	                          :                 | de        |    +---------+
	                          :                 | Coherencia|
	                          :                 | de la     |    +--------+
	+--------+    +--------+  :   +--------+    | cache     |    |	      |
	|  Core  |    | Cola   |  :   | Cache  |    |           |    |        |
	|  CPU   |    | de     |  :   | CPU    |    |           |--->| Dispos |
	|        |--->| acceso |----->|        |<-->|           |    | itivo  |
	|        |    | a      |  :   |        |    |           |    |        |
	|        |    | memoria|  :   |        |    |           |    +--------+
	+--------+    +--------+  :   +--------+    +-----------+
	                          :
	                          :

Aunque es posible que una carga o store en particular no aparezca fuera de
la CPU que lo emitió, ya que puede haber sido satisfecha dentro del propio
caché de la CPU, seguirá pareciendo como si el acceso total a la memoria
hubiera tenido lugar para las otras CPUs, ya que los mecanismos de
coherencia de caché migrarán la cacheline sobre la CPU que accede y se
propagarán los efectos en caso de conflicto.

El núcleo de la CPU puede ejecutar instrucciones en el orden que considere
adecuado, siempre que parezca mantenerse la causalidad esperada del
programa. Algunas de las instrucciones generan operaciones de carga y
almacenamiento que luego van a la cola de accesos a memoria a realizar. El
núcleo puede colocarlos en la cola en cualquier orden que desee, y
continuar su ejecución hasta que se vea obligado a esperar que una
instrucción sea completada.

De lo que se ocupan las barreras de la memoria es de controlar el orden en
que los accesos cruzan, desde el lado de la CPU, hasta el lado de memoria,
y el orden en que los otros observadores perciben los efectos en el sistema
que sucedan por esto.

[!] Las barreras de memoria _no_ son necesarias dentro de una CPU
determinada, ya que las CPU siempre ven sus propias cargas y stores como si
hubieran sucedido en el orden del programa.

[!] Los accesos a MMIO u otros dispositivos pueden pasar por alto el
sistema de caché. Esto depende de las propiedades de la ventana de memoria
a través de la cual se accede a los dispositivos y/o el uso de
instrucciones especiales de comunicación con dispositivo que pueda tener la
CPU.


COHERENCIA DE CACHÉ FRENTE A DMA
---------------------------------

No todos los sistemas mantienen coherencia de caché con respecto a los
dispositivos que realizan DMA. En tales casos, un dispositivo que intente
DMA puede obtener datos obsoletos de la RAM, porque las líneas de caché
"sucias" pueden residir en los cachés de varias CPU, y es posible que no
se hayan vuelto a escribir en la RAM todavía. Para hacer frente a esto, la
parte apropiada del kernel debe vaciar los bits superpuestos de caché en
cada CPU (y tal vez también invalidarlos).

Además, los datos enviados por DMA a RAM, por un dispositivo, pueden ser
sobrescritos por líneas de caché sucias que se escriben de nuevo en la RAM
desde el caché de una CPU, después de que el dispositivo haya puesto sus
propios datos, o las líneas de caché presentes en el caché de la CPU pueden
simplemente ocultar el hecho de que la memoria RAM se haya actualizado,
hasta el momento en que la caché se descarta de la memoria caché de la CPU
y se vuelve a cargar. Para hacer frente a esto, la parte apropiada del
kernel debe invalidar los bits superpuestos del caché en cada CPU.

Consulte Documentation/core-api/cachetlb.rst para obtener más información
sobre administración de la memoria caché.


COHERENCIA DE CACHÉ FRENTE A MMIO
---------------------------------

La E/S mapeada en memoria generalmente se lleva a cabo a través de
ubicaciones de memoria que forman parte de una ventana del espacio de
memoria de la CPU, que tiene diferentes propiedades asignadas que la
ventana habitual dirigida a RAM.

Entre dichas propiedades, suele existir el hecho de que tales accesos
eluden el almacenamiento en caché por completo e ir directamente a los
buses del dispositivo. Esto significa que los accesos MMIO pueden, en
efecto, superar los accesos a la memoria caché que se emitieron
anteriormente. Una barrera de memoria no es suficiente en tal caso, sino
que el caché debe ser vaciado entre la escritura de la memoria caché, y el
acceso MMIO, si los dos son de cualquier manera dependiente.


=======================
COSAS QUE HACEN LAS CPU
=======================

Un programador podría dar por sentado que la CPU realizará las operaciones
de memoria exactamente en el orden especificado, de modo que si a la CPU se
entrega, por ejemplo, el siguiente fragmento de código a ejecutar:

	a = READ_ONCE(*A);
	WRITE_ONCE(*B, b);
	c = READ_ONCE(*C);
	d = READ_ONCE(*D);
	WRITE_ONCE(*E, e);

esperarían entonces que la CPU complete la operación de memoria para cada
instrucción antes de pasar a la siguiente, lo que lleva a una definida
secuencia de operaciones vistas por observadores externos en el sistema:

  	LOAD *A, STORE *B, LOAD *C, LOAD *D, STORE *E.

La realidad es, por supuesto, mucho más intrincada. Para muchas CPU y
compiladores, la anterior suposición no se sostiene porque:

 (*) es más probable que las cargas deban completarse de inmediato para
     permitir progreso en la ejecución, mientras que los stores a menudo se
     pueden aplazar sin problema;

 (*) las cargas se pueden hacer especulativamente, y el resultado es
     descartado si resulta innecesario;

 (*) las cargas se pueden hacer de forma especulativa, lo que lleva a que
     se haya obtenido el resultado en el momento equivocado de la secuencia
     de eventos esperada;

 (*) el orden de los accesos a memoria se puede reorganizar para promover
     un mejor uso de los buses y cachés de la CPU;

 (*) las cargas y los stores se pueden combinar para mejorar el rendimiento
     cuando se habla con memoria o hardware de E/S, que puede realizar
     accesos por lotes a ubicaciones adyacentes, reduciendo así los costes
     de configuración de transacciones (la memoria y los dispositivos PCI
     pueden ambos pueden hacer esto); y

 (*) la caché de datos de la CPU puede afectar al orden, y mientras sus
     mecanismos de coherencia pueden aliviar esto, una vez que el store
     haya accedido al caché- no hay garantía de que la gestión de la
     coherencia se propague en orden a otras CPU.

Entonces, digamos que lo que otra CPU podría observar en el fragmento de
código anterior es:

	LOAD *A, ..., LOAD {*C,*D}, STORE *E, STORE *B

	(Donde "LOAD {*C,*D}" es una carga combinada)


Sin embargo, se garantiza que una CPU es autoconsistente: verá que sus
 _propios_ accesos parecen estar correctamente ordenados, sin necesidad de
barrera de memoria. Por ejemplo con el siguiente código:

	U = READ_ONCE(*A);
	WRITE_ONCE(*A, V);
	WRITE_ONCE(*A, W);
	X = READ_ONCE(*A);
	WRITE_ONCE(*A, Y);
	Z = READ_ONCE(*A);

y asumiendo que no hay intervención de una influencia externa, se puede
suponer que el resultado final se parecerá a:

	U == el valor original de *A
	X == W
	Z == Y
	*A == Y

El código anterior puede hacer que la CPU genere la secuencia completa de
accesos de memoria:

	U=LOAD *A, STORE *A=V, STORE *A=W, X=LOAD *A, STORE *A=Y, Z=LOAD *A

en ese orden, pero, sin intervención, la secuencia puede contener casi
cualquier combinación de elementos combinados o descartados, siempre que la
perspectiva del programa del mundo siga siendo consistente. Tenga en cuenta
que READ_ONCE() y WRITE_ONCE() -no- son opcionales en el ejemplo anterior,
ya que hay arquitecturas donde una CPU determinada podría reordenar cargas
sucesivas en la misma ubicación. En tales arquitecturas, READ_ONCE() y
WRITE_ONCE() hacen lo que sea necesario para evitar esto, por ejemplo, en
Itanium los casts volátiles utilizados por READ_ONCE() y WRITE_ONCE() hacen
que GCC emita las instrucciones especiales ld.acq y st.rel
(respectivamente) que impiden dicha reordenación.

El compilador también puede combinar, descartar o diferir elementos de la
secuencia antes incluso de que la CPU los vea.

Por ejemplo:

	*A = V;
	*A = W;

puede reducirse a:

	*A = W;

ya que, sin una barrera de escritura o WRITE_ONCE(), puede que se asuma
que el efecto del almacenamiento de V a *A se pierde. Similarmente:

  	*A = Y;
  	Z = *A;

puede, sin una barrera de memoria o un READ_ONCE() y WRITE_ONCE(), esto
sea reducido a:

  	*A = Y;
  	Z = Y;

y la operación LOAD nunca aparezca fuera de la CPU.


Y LUEGO ESTÁ EL ALFA
--------------------

La CPU DEC Alpha es una de las CPU más relajadas que existen. No solo eso,
algunas versiones de la CPU Alpha tienen un caché de datos dividido, lo que
les permite tener dos líneas de caché relacionadas semánticamente,
actualizadas en momentos separados. Aquí es donde la barrera de dependencia
de dirección realmente se vuelve necesaria, ya que se sincronizan ambos
cachés con el sistema de coherencia de memoria, lo que hace que parezca un
cambio en el puntero, frente a que los nuevos datos se produzcan en el
orden correcto.

Alpha define el modelo de memoria del kernel Linux, aunque a partir de
v4.15, la adición al kernel de Linux de smp_mb() a READ_ONCE() en Alpha
redujo en gran medida su impacto en el modelo de memoria.


GUESTS DE MÁQUINAS VIRTUALES
-----------------------------

Los "guests" (invitados) que se ejecutan en máquinas virtuales pueden verse
afectados por los efectos de SMP incluso si el "host" (huésped) en sí se
compila sin compatibilidad con SMP. Este es un efecto de la interacción con
un host SMP mientras ejecuta un kernel UP. El uso obligatorio de barreras
para este caso de uso sería posible, pero a menudo no son óptimas.

Para hacer frente a este caso de manera óptima, están disponibles macros de
bajo nivel virt_mb() etc. Estas tienen el mismo efecto que smp_mb(), etc.
cuando SMP está habilitado, pero generan código idéntico para sistemas SMP
y no SMP. Por ejemplo, los invitados de máquinas virtuales debería usar
virt_mb() en lugar de smp_mb() al sincronizar contra un (posiblemente SMP)
anfitrión.

Estos son equivalentes a sus contrapartes smp_mb() etc. en todos los demás
aspectos, en particular, no controlan los efectos MMIO: para controlar los
efectos MMIO, utilice barreras obligatorias.


================
EJEMPLOS DE USOS
================

BUFFERS CIRCULARES
------------------

Las barreras de memoria se pueden utilizar para implementar almacenamiento
en búfer circular, sin necesidad de un cerrojo para serializar al productor
con el consumidor. Vea:

	Documentation/core-api/circular-buffers.rst

para más detalles.


===========
REFERENCIAS
===========

Alpha AXP Architecture Reference Manual, Segunda Edición (por Sites & Witek,
Digital Press)
	Capítulo 5.2: Physical Address Space Characteristics
	Capítulo 5.4: Caches and Write Buffers
	Capítulo 5.5: Data Sharing
	Capítulo 5.6: Read/Write Ordering

AMD64 Architecture Programmer's Manual Volumen 2: System Programming
	Capítulo 7.1: Memory-Access Ordering
	Capítulo 7.4: Buffering and Combining Memory Writes

ARM Architecture Reference Manual (ARMv8, for ARMv8-A architecture profile)
	Capítulo B2: The AArch64 Application Level Memory Model

IA-32 Intel Architecture Software Developer's Manual, Volumen 3:
System Programming Guide
	Capítulo 7.1: Locked Atomic Operations
	Capítulo 7.2: Memory Ordering
	Capítulo 7.4: Serializing Instructions

The SPARC Architecture Manual, Version 9
	Capítulo 8: Memory Models
	Appendix D: Formal Specification of the Memory Models
	Appendix J: Programming with the Memory Models

Storage in the PowerPC (por Stone and Fitzgerald)

UltraSPARC Programmer Reference Manual
	Capítulo 5: Memory Accesses and Cacheability
	Capítulo 15: Sparc-V9 Memory Models

UltraSPARC III Cu User's Manual
	Capítulo 9: Memory Models

UltraSPARC IIIi Processor User's Manual
	Capítulo 8: Memory Models

UltraSPARC Architecture 2005
	Capítulo 9: Memory
	Appendix D: Formal Specifications of the Memory Models

UltraSPARC T1 Supplement to the UltraSPARC Architecture 2005
	Capítulo 8: Memory Models
	Appendix F: Caches and Cache Coherency

Solaris Internals, Core Kernel Architecture, p63-68:
	Capítulo 3.3: Hardware Considerations for Locks and
			Synchronization

Unix Systems for Modern Architectures, Symmetric Multiprocessing and Caching
for Kernel Programmers:
	Capítulo 13: Other Memory Models

Intel Itanium Architecture Software Developer's Manual: Volumen 1:
	Sección 2.6: Speculation
	Sección 4.4: Memory Access
