Relación con el kernel de Linux spinlock

  
artículo Programación detallada sobre el uso de bloqueos de giro introducidas, ha habido muchos, pero algunos detalles del punto en el que no hay suficiente penetración. Personalmente, creo que todo el mundo aquí me puso en duda cómodo lugar para venir a discutir.
un bloqueo de giro (spinlock) Introducción
bloqueo de bucle sólo puede se ve a contraluz tareas del núcleo, al mismo tiempo, por lo que sólo un hilo a la vez le permite existir en la región crítica. Esto se puede aplicar en una máquina multi-procesamiento, o un núcleo preferente que se ejecuta en un solo procesador requiere servicios de bloqueo.
En segundo lugar, el perfil de semáforos
aquí también introducir el concepto bajo el semáforo, porque sus cerraduras uso de espín y lugares similares. Semáforo
Linux es un bloqueo del sueño. Si hay una tarea tratando de obtener un semáforo se ha celebrado, el semáforo a promover el tema en la cola de espera, y luego se dejó dormir. En este caso el procesador para ejecutar otra libertad código. Cuando el proceso mantiene el semáforo del semáforo se libera, una tarea en la cola de espera de ser despertado, para que puedan obtener el semáforo.
tres bloqueos de giro y semáforos contrastan
en muchos lugares hacen girar las cerraduras y los semáforos se puede seleccionar cualquier uso, pero hay algunos lugares sólo se puede seleccionar uno de ellos. Algunos utilizan la siguiente comparación entre los dos.
Tabla 1-1 bloqueos de giro comparativos y semáforos

Aplicaciones | semáforo o baja sobrecarga spinlock bloqueo gratis (zona crítica tiempo de ejecución más rápida)
preferencia de giro de bloqueo
bajo bloqueo en cabeza (ejecución sección crítica por un largo tiempo)
preferencia del semáforo
región crítica podría contener código
causa del sueño no puede elegir un bloqueo de bucle, se puede seleccione el semáforo area la crítica se encuentre en un contexto no-proceso, esta vez no puede dormir
cerraduras preferencia de giro, incluso si selecciona semáforos sólo se puede utilizar
down_trylock no bloqueando de manera

cuatro bloqueos de giro y el proceso del núcleo de Linux Discutimos la programación de la relación
Caso 3 de 1-1 en la siguiente tabla (en varios otros casos más fáciles de entender), si la región crítica podría contener código que hace que el sueño no se puede utilizar un bloqueo de bucle, puede causar un punto muerto. Entonces, ¿por
cantidad de código de protección de señal puede dormir bloqueos de giro no pueden hacer? Qué buscar en la aplicación de la barra de bloqueo de giro, sigue sustancialmente la forma de bloqueo de giro:
spin_lock (&​​amp; mr_lock); //región spin_unlock crítico (&mr_lock);
Realizar un seguimiento de spin_lock (&​​amp; mr_lock) aplicación
#define spin_lock (bloquear) _spin_lock (bloquear)
#define _spin_lock (bloquear) __LOCK (bloqueo)
__LOCK #define (bloqueo) \\
do {preempt_disable (); __acquire (bloqueo); (void) (bloquear);} while (0)
observado y " preempt_disable () y ", esta función se llama y " fuera y " preferencia; (derecho de prioridad se volverá a abrir en spin_unlock in). Como puede verse, el uso de bloqueos de giro para proteger el área de trabajo se encuentra en un estado no preferente; ni siquiera quedan atrapados en y " Spin " también desactivar el sobreseimiento de estado. Sabiendo esto, creo que debemos ser capaces de entender por qué el bloqueo de bucle para proteger el código no puede dormir. Imagínese, si duerme en medio de un bloqueo de bucle para proteger el código, entonces el proceso de programación se produce, puede ser otro proceso llama a esto la protección spinlock código de nuevo. Y ahora sabemos aún menos que en la adquisición de cerraduras y " Spin " estado, también está prohibido para aprovechar, y " Spin " y dinámica, no va a dormir, y que está en el procesador en no habrá proceso programado para ocurrir, a continuación, se produce un interbloqueo de forma natural.
podemos resumir las características de los siguientes bloqueos de giro: Read l solo procesador no preferente núcleo: bloqueos de giro se ignoran en tiempo de compilación;
l solo procesador de núcleo de preferencia en: Auto cerrojos giratorios provistos sólo como un interruptor kernel preventiva; el multiprocesador
l: esta vez para desempeñar plenamente el papel de bloqueo de giro del núcleo de bloqueo de giro está diseñado para evitar que múltiples procesadores al mismo tiempo acceder a una crítica zona, para evitar la competencia provocada por tanteo núcleo.
cinco, Linux
aprovechar el momento de aprovechar la Linux pasó la última vez ocurrió en la comprensión, aprovechar apoderarse dividido en usuario y la preferencia del núcleo.
usuario preemption generada en los siguientes casos:
l llamada para regresar al espacio de usuario
l de retorno desde el controlador de interrupción
preemption espacio
usuario kernel se producirá en el sistema:
l espacio del núcleo, al regresar del controlador de interrupción cuando el núcleo tiene el tiempo y de preferencia; l de
de nuevo cuando el código del núcleo que tiene el tiempo de tanteo.
(Tales como: spin_unlock)
l Si la tarea central de una llamada explícita a schedule ()
l Si la tarea está bloqueada en el núcleo.
planificación de procesos
básico es lo que ha sucedido después de la interrupción de reloj, y el proceso de descubrimiento se ha utilizado durante porción de tiempo,
proceso tiene lugar de preferencia. Por lo general, vamos a utilizar controlador de interrupciones Devuelve el espacio del núcleo de tiempo puede ser núcleo de preferencia esta función para mejorar la cantidad en tiempo real de las operaciones de E /S, tales como: ¿Cuándo eventos de E /S es el tiempo, el manejador de interrupción correspondiente se activa cuando se encontró que el proceso mientras se espera para el evento de e /S, se activa el proceso de espera, y conjunto del indicador need_resched Actualmente proceso en ejecución, de modo que una interrupción cuando los rendimientos de controlador, se activa el programador, esperando la original para I /O curso de los acontecimientos (lo más probable) para obtener el derecho a realizar, garantizando así una respuesta relativamente rápida a eventos de E /S (milisegundos). Como puede verse, cuando se produce el evento I /O, el procedimiento de procesamiento de eventos de E /S se adelanta el proceso actual, independientemente de la duración de la velocidad de respuesta del sistema de rebanada programación de tiempo.

Copyright © Conocimiento de Windows All Rights Reserved