En la ingeniería de programas informáticos, un spinlock es una cerradura donde el hilo de rosca espera simplemente en un lazo (" spins") en varias ocasiones la comprobación hasta la cerradura está disponible. Pues el hilo de rosca sigue siendo activo pero no está realizando una tarea útil, el uso de tal cerradura es una clase que espera ocupado. Una vez que están adquiridos, los spinlocks serán llevados a cabo generalmente hasta que se lancen explícitamente, aunque en algunas puestas en práctica puedan ser lanzados automáticamente si los bloques del hilo de rosca (" del aka; va al sleep").

Spinlocks es eficiente si los hilos de rosca son solamente probables ser bloqueados por un corto período de tiempo, pues evitan gastos indirectos la conmutación de contexto de cambio de hora de proceso de del sistema operativo o . Por esta razón, los spinlocks son los núcleos interiores de uso frecuente del sistema operativo sin embargo, los spinlocks llegan a ser derrochadores si están llevados a cabo para más de largo, la prevención de otra rosca de funcionar y de requerir el cambio de hora. Cuanto más de largo usted sostiene la cerradura, mayor es el riesgo que usted será interrumpido por el planificador de O/S mientras que lo sostiene. Si sucede esto, otros hilos de rosca serán dejados el " spinning" (en varias ocasiones intentando adquirir la cerradura), a pesar de que usted no está haciendo progreso hacia la liberación de él. Esto es especialmente verdad en un sistema del solo-procesador, donde está probable cada hilo de rosca que espera de la misma prioridad perder su timeslice asignado entero (" quantum") el giro hasta el hilo de rosca que se sostiene la cerradura finalmente se cambia la hora.

La ejecución de las cerraduras de vuelta es correctamente difícil, porque uno debe tomar cuenta de la posibilidad del acceso simultáneo a la cerradura para prevenir las condiciones de raza que esto es generalmente solamente posible con instrucciones de lenguaje de ensamblaje especial, tales como atómico Prueba-y-fijar las operaciones de, y no puede ser ejecutado de los idiomas de alto nivel como el C . En arquitecturas sin tales operaciones, o si se requiere la puesta en práctica del idioma de alto nivel, un algoritmo de fijación no atómico se puede utilizar, e. el algoritmo de Peterson. Pero observar que tal puesta en práctica puede requerir más memoria que un spinlock, ser más lento permitir progreso después de abrir, y no puede ser realizable en un idioma de alto nivel si la ejecución fuera de servicio es funcionando.

Puesta en práctica del ejemplo

El ejemplo siguiente utiliza x86 de lenguaje de ensamblaje para ejecutar un spinlock. Trabajará en cualquier procesador compatible 80386 de Intel .

cerradura: # la variable de la cerradura. 1 = se trabó, 0 = abierto. DD 0 spin_lock: el eax de los movimientos, 1 # fijó el registro de EAX a 1. lazo: eax del xchg, # atómico intercambio el registro de EAX con # la variable de la cerradura. # esto almacenará siempre 1 a la cerradura, yéndose # valor anterior en el registro de EAX. probar el eax, eax # prueba EAX consigo mismo. Entre otras cosas, esto # fijar la bandera cero del procesador si EAX es 0. # si EAX es 0, después la cerradura fue abierto y # acabamos de trabarlo. # de otra manera, EAX es 1 y no adquirimos la cerradura. lazo # salto del jnz de nuevo a la instrucción de XCHG si es la bandera cero # no fijado, la cerradura era bloqueada, y necesitamos hacer girar. enriar # la cerradura se ha adquirido, vuelven a la llamada # función. spin_unlock: el eax de los movimientos, 0 # fijó el registro de EAX a 0. eax del xchg, # atómico intercambio el registro de EAX con # la variable de la cerradura. enriar # la cerradura se ha lanzado.

Optimizaciones significativas

El antedicho es una puesta en práctica simple que es fácil de entender (para un programador que entiende el ensamblador X86 ), y trabaja en todas las CPU de la arquitectura x86. Sin embargo un número de optimizaciones del funcionamiento son posibles:

En puestas en práctica posteriores de la arquitectura x86, el spin_unlock del puede utilizar con seguridad un MOVIMIENTO abierto en vez del XCHG bloqueado, que es mucho más rápido. Esto es debido a la memoria sutil que pide las reglas de que apoyan esto, aunque el MOVIMIENTO no es una barrera completa de la memoria. Sin embargo algunos procesadores (algunos procesadores de Cyrix, algunas revisiones del Pentium favorable de Intel (debido a los insectos), y el Pentium anterior y los sistemas del SMP I486 ) harán la cosa y los datos incorrectos protegidos por la cerradura podrían ser corrompidos. En la mayoría de las arquitecturas non-x86, las instrucciones explícitas de la barrera de la memoria o las instrucciones atómicas (como en el ejemplo) se deben utilizar, o allí pueden ser " especial; unlock" instrucciones (como en el IA64 ) que proporcionan ordenar necesaria de la memoria.

Para reducir el tráfico de autobús inter-CPU, cuando la cerradura no se adquiere, el código debe colocar la lectura sin intentar escribir cualquier cosa, hasta que lea un valor cambiado. Debido a el MESI la puesta en antememoria de los protocolos, éste hace la línea del escondrijo para que la cerradura se convierta en " Shared" ; entonces hay notable ningún tráfico de autobús de mientras que una CPU está esperando la cerradura. Esta optimización es eficaz en todas las arquitecturas de la CPU que tengan un escondrijo por la CPU, porque MESI es tan ubicuo.

Para reducir el consumo de energía, durante el lazo antedicho la instrucción del nop del representante se utiliza que dice las CPU algún x86 relajar y ahorrar energía. (Se no hace caso en otras). Esta instrucción puede también mejorar la imparcialidad de la adquisición de la cerradura, aunque la imparcialidad es más de un problema con algunas otras arquitecturas de la CPU.

Alternativas

La desventaja primaria de un spinlock es que pierde tiempo mientras que espera para adquirir la cerradura que se pudo pasar productivo a otra parte. Hay dos alternativas que evitan esto:

no adquiere la cerradura. En muchas situaciones es posible a las estructuras de datos de diseño que el no requiere la fijación de, e. usando por datos del hilo de rosca, o usando los datos por-CPU e inhabilitando interrupciones.

  • Cambiar a un diverso hilo de rosca mientras que espera (a veces llamado Sleeplocks del '). Esto implica típicamente el atar del hilo de rosca actual a una coleta de los hilos de rosca que esperan la cerradura, entonces cambiando otro. Este esquema también tiene las ventajas que garantiza que no ocurre el hambre del recurso mientras todos los hilos de rosca abandonen eventual las cerraduras que adquieren y las decisiones de previsión pueden ser tomadas sobre las cuales el hilo de rosca debe progresar primero.

    Algunos sistemas operativos utilizan un acercamiento híbrido donde un spinlock se utiliza inicialmente, pero el hilo de rosca se suspende si no progresa rápidamente. El Solaris utilizará un spinlock al intentar tener acceso a un recurso se trabó por un hilo de rosca de actual-funcionamiento, pero dormirá si el hilo de rosca no está funcionando actual (que sucede siempre en sistemas del solo-procesador).

    Ver también

    sincronización
    Callejón sin salida
    Seqlock
  • .

  • Zenithic
  • Spinlock
    Random links:Pullman de George | Livingston, Carolina del Sur | Orderville, Utah | Arpillera | Sam Ervin

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">