Pregunta

Siempre me he preguntado lo que son: cada vez que escucho acerca de ellos, las imágenes de los dispositivos futuristas volante como ir a bailar (rodando?) Por mi mente ...

¿Qué son?

¿Fue útil?

Solución

Cuando se utiliza cerraduras regulares (mutex, tramos críticos, etc.), el sistema operativo pone el hilo en el estado de espera y antepone que mediante la programación de otros hilos en el mismo núcleo. Esto tiene una penalización de rendimiento si el tiempo de espera es muy corto, porque el hilo ahora tiene que esperar a que un derecho de prioridad para recibir tiempo de CPU de nuevo.

Además, los objetos del núcleo no están disponibles en todos los estados del núcleo, tal como en un manejador de interrupciones o cuando paginación no está disponible etc.

Los Spinlocks no causan derecho de prioridad, pero esperan en un bucle ( "spin") hasta que las otras núcleo libera el bloqueo. Esto evita que el hilo de la pérdida de sus href="https://en.wikipedia.org/wiki/Preemption_(computing)#Time_slice" cuántica y siguen tan pronto como la cerradura se libera. El sencillo mecanismo de spinlocks permitir que un kernel para utilizarlo en casi cualquier estado.

Es por eso que en una sola máquina de la base de un spinlock es simplemente un "interrupciones desactivar" o "elevar IRQL" que impide por completo la programación de subprocesos.

Los Spinlocks en última instancia, permitir que los granos para evitar s "Big Kernel Lock" (una cerradura adquirida cuando el núcleo entra núcleo y puesto en libertad en la salida) y tienen bloqueo granular sobre las primitivas del núcleo, provocando una mejor multi-procesamiento en máquinas multi-núcleo de este modo un mejor rendimiento .

EDIT: Una pregunta surgió: "¿Quiere decir que debo usar spinlocks siempre que sea posible eso?" y voy a tratar de responder a ella:

Como ya he mencionado, spinlocks sólo son útiles en los lugares donde anticiparon el tiempo de espera es más corto que un quantum (léase: milisegundos) y de preferencia no tiene mucho sentido (por ejemplo kernel objetos no están disponibles).

Si el tiempo de espera es desconocida, o si se encuentra en modo de usuario spinlocks no son eficientes. Que consume el 100% de tiempo de CPU en el núcleo de espera mientras se comprueba si un spinlock está disponible. Se impide que otros subprocesos que se ejecutan en ese núcleo hasta que su quantum expira. Este escenario sólo es factible para las explosiones cortas a nivel de núcleo y una opción poco probable para una aplicación en modo de usuario.

Esta es una pregunta a abordar de manera que: spinlocks, ¿qué utilidad tienen ellos

Otros consejos

Digamos que un recurso está protegido por una cerradura, un hilo que quiere tener acceso a las necesidades de recursos para adquirir el bloqueo en primer lugar. Si el bloqueo no está disponible, el hilo podría comprobar varias veces si el bloqueo se ha liberado. Durante este tiempo las ocupado espera de rosca, la comprobación de la cerradura, el uso de la CPU, pero no hacer ningún trabajo útil. un bloqueo de este tipo se denomina como un bloqueo de giro.

Es más o menos un bucle que sigue adelante hasta una determinada condición se cumple:

while(cantGoOn) {};
 while(something != TRUE ){};
 // it happend
 move_on();

Es un tipo de bloqueo que hace ocupado esperando

Se considera un anti-patrón, excepto para la programación de controlador de bajo nivel muy (donde puede suceder que llamar a una función de espera "adecuada" tiene más sobrecarga que simplemente ocupado de bloqueo durante algunos ciclos).

spinlocks en el núcleo de Linux .

spinlocks son aquellos en los que el hilo espera hasta que el bloqueo está disponible. Esto normalmente se utiliza para evitar la sobrecarga de la obtención de los objetos de núcleo cuando hay un alcance de adquirir el objeto de núcleo dentro de un pequeño periodo de tiempo.

Ejemplo:

While(SpinCount-- && Kernel Object is not free)
{}

try acquiring Kernel object

Se podría querer usar un spinlock cuando se piensa que es más barato para entrar en un bucle de espera ocupado y poner en común un recurso en lugar de bloquear cuando el recurso está bloqueado.

  

Spinning puede ser beneficioso cuando cerraduras son de grano fino y de gran número (por ejemplo, un bloqueo por nodo en una lista enlazada), así como cuando los tiempos de retención de bloqueo son siempre extremadamente corto. En general, mientras se mantiene un bloqueo de bucle, se debe evitar el bloqueo, llamando a cualquier cosa que sí puede bloquear, tener más de un bloqueo de bucle a la vez, haciendo dinámicamente Se distribuye las llamadas (interfaz y los virtuales), por lo que estáticamente se envía en llamadas a cualquier código de una doesn' t propia, o la asignación de memoria.

     

También es importante señalar que SpinLock es un tipo de valor, por razones de rendimiento. Como tal, hay que tener mucho cuidado de no copiar accidentalmente una instancia SpinLock, como los dos casos (el original y la copia) serían entonces completamente independientes entre sí, lo que llevaría probablemente a un comportamiento erróneo de la aplicación. Si una instancia de SpinLock se debe pasar todo, hay que pasar por referencia y no por valor.

En pocas palabras, spinlock emplea atómica comparar y de intercambio (CAS) o la prueba-y-set como instrucciones para poner en práctica la cerradura libre, esperar hilo libre expresión idiomática seguro. Tales estructuras de escala bien en máquinas de múltiples núcleos.

Es un bucle que gira alrededor hasta que se cumpla una condición.

Bueno, sí - el punto de bloqueos de giro (vs unas secciones críticas tradicionales, etc.) es que ofrecen un mejor rendimiento en algunas circunstancias (sistemas multinúcleo ..), porque no se producen inmediatamente el resto de la cuantía de la rosca .

Spinlock, es un tipo de cerradura, que es no-bloque de poder y no sueño-able. Cualquier hilo que desean adquirir un spinlock para cualquier recurso compartido o crítica será continua girar, desperdiciando el ciclo de procesamiento de la CPU hasta que adquiera la cerradura para el recurso especificado. Una vez que se adquiere spinlock, es tratar de completar el trabajo en su cuántica y luego liberar el recurso, respectivamente. Spinlock es el tipo de prioridad más alta de bloqueo, sólo se puede decir, es no preferente tipo de bloqueo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top