En informática , la serialización de tokens es un concepto de control de concurrencia que surge del desarrollo continuo de DragonFly BSD . Según Matthew Dillon , son muy similares a los SPL , con la diferencia de que un token funciona en múltiples CPU, mientras que los SPL solo funcionan dentro del dominio de una única CPU.
La serialización de tokens permite a los programadores escribir código seguro para multiprocesadores sin que ellos mismos ni los subsistemas de nivel inferior tengan que estar al tanto de cada entidad que pueda contener el mismo token.
Comparación con la exclusión mutua (mutex)
Los tokens y los mecanismos de exclusión mutua (mutex) son bloqueos . A diferencia de los mutex, los tokens no impiden que otros hilos accedan al recurso mientras están bloqueados o inactivos. Un hilo que comparte recursos con otros hilos puede detenerse e iniciarse por diversas razones:
- División de tiempo: el planificador del espacio de usuario (US) intenta garantizar que todos los subprocesos tengan una oportunidad justa de ejecutarse, por lo que ejecuta cada subproceso durante un breve período de tiempo (una división de tiempo) y luego cambia a otro subproceso.
- Ejecución concurrente: en ordenadores multiprocesador, un hilo puede ejecutarse exactamente al mismo tiempo que otro hilo en una CPU diferente.
- Exclusión: un hilo puede expropiar un hilo de menor prioridad, como una interrupción de hardware o hilos ligeros del kernel .
- Bloqueo voluntario: un hilo puede entrar en estado de espera si tiene que aguardar algo, no tiene trabajo que hacer o llama a una función que bloquea. Incluso la llamada para adquirir un bloqueo puede bloquearse.
La siguiente tabla resume las propiedades de los tokens y los mutex.
Problemas como el interbloqueo y la inversión de prioridad pueden ser muy difíciles de evitar y requieren coordinación en muchos niveles del núcleo. Dado que el bloqueo con tokens no provoca interbloqueos y los tokens adquiridos no necesitan ser atómicos cuando las operaciones posteriores se bloquean, permite un código mucho más sencillo que el de los mutex.
Si observas FreeBSD-5, notarás que este sistema operativo suele pasar los mutex retenidos a través de la pila de subrutinas para permitir que un nivel procedimental profundo libere temporalmente un mutex y así cambiar de ruta, bloquear o resolver un interbloqueo. Esto genera una gran cantidad de código innecesario en FreeBSD-5 (ya que algunos procedimientos deben conocer los mutex retenidos por otros procedimientos no relacionados para funcionar correctamente).
— Matthew Dillon
Ejemplo
El siguiente pseudocódigo y las explicaciones ilustran cómo funciona la serialización de tokens.
Estado de la técnica en el núcleo de Darwin
El núcleo Darwin de Mac OS X utiliza una técnica similar (llamada embudo ) para serializar el acceso a la parte BSD del núcleo.
Véase también
Referencias
- Un hilo de una lista de correo donde Matthew Dillon explica los tokens con gran detalle. Archivado el 30/06/2024 en la Wayback Machine.
- Arquitecturas de enhebrado de Darwin
- Control de concurrencia