pregunta de bloqueo x86 en CPU multinúcleo


¿Es cierto que el prefijo de comando x86 ASM "LOCK" causa que todos los núcleos se congelen mientras se ejecuta la instrucción siguiente a "LOCK"?

Leí esto en una entrada de blog y no tiene sentido. No puedo encontrar nada que indique si esto es cierto o no.

Author: starblue, 2010-07-27

2 answers

Se trata de bloquear el bus de memoria para esa dirección. El Manual del Desarrollador de Software de Arquitecturas Intel 64 e IA-32-Volumen 3A: Guía de Programación de Sistemas, Parte 1 nos dice:

7.1.4 Efectos de una Operación de BLOQUEO en Cachés Internos del Procesador.

Para los procesadores Intel486 y Pentium, la señal LOCK # es siempre afirmado en el autobús durante un BLOQUEO operación, incluso si el área de memoria el bloqueo se almacena en caché en el procesador.

Para el procesador P6 y más reciente familias, si el área de la memoria es bloqueado durante una operación de BLOQUEO es en caché en el procesador que es realizar la operación de BLOQUEO como memoria de escritura y es completamente contenido en una línea de caché, el es posible que el procesador no afirme el BLOQUEO# señal en el bus . En su lugar, lo hará modificar la ubicación de la memoria internamente y permitir [su] coherencia caché mecanismo para asegurar que la operación se lleva a cabo atómicamente. Este operación se llama "bloqueo de caché." El mecanismo de coherencia de caché evita automáticamente dos o más procesadores que tienen la misma área de memoria de modificación simultánea datos en esa área. (énfasis añadido)

Aquí aprendemos que los chips P6 y más nuevos son lo suficientemente inteligentes como para determinar si realmente tienen que bloquear el bus o simplemente pueden confiar en el almacenamiento en caché inteligente. Creo que esta es una optimización ordenada.

He discutido esto más en mi entrada de blog " ¿Cómo se bloquean ¿Bloqueo?"

 44
Author: Jeff Moser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-26 22:10:32

No, pero puede forzar a otros procesadores a esperar mientras éste accede a la memoria. Si estos estados de espera alguna vez hacen una diferencia depende de la medida en que los procesadores se ejecutan en una caché.

 6
Author: Steven Sudit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-26 21:30:19