Protocolo de techo de prioridad


En la computación en tiempo real , el protocolo de techo de prioridad es un protocolo de sincronización de recursos compartidos para evitar la inversión ilimitada de prioridades y el punto muerto mutuo debido al anidamiento incorrecto de secciones críticas . En este protocolo, a cada recurso se le asigna un techo de prioridad, que es una prioridad igual a la prioridad más alta de cualquier tarea que pueda bloquear el recurso. El protocolo funciona elevando temporalmente las prioridades de las tareas en determinadas situaciones, por lo que requiere un programador que admita la programación dinámica de prioridades . [1]

Hay dos variantes del protocolo: Protocolo de prioridad máxima original ( OCPP ) y Protocolo de prioridad máxima inmediata ( ICPP ). El comportamiento en el peor de los casos de los dos esquemas de techo es idéntico desde el punto de vista de la programación. Ambas variantes funcionan elevando temporalmente las prioridades de las tareas. [2]

En OCPP, la prioridad de una tarea X aumenta cuando una tarea Y de mayor prioridad intenta adquirir un recurso que X ha bloqueado. Luego, la prioridad de la tarea se eleva al límite máximo de prioridad del recurso, lo que garantiza que la tarea X finalice rápidamente su sección crítica y desbloquee el recurso. Una tarea solo puede bloquear un recurso si su prioridad dinámica es superior a los límites máximos de prioridad de todos los recursos bloqueados por otras tareas. De lo contrario, la tarea se bloquea, esperando el recurso. [2]

En ICPP, la prioridad de una tarea aumenta inmediatamente cuando bloquea un recurso. La prioridad de la tarea se establece en el límite máximo de prioridad del recurso, por lo que no se puede programar ninguna tarea que pueda bloquear el recurso. Esto asegura la propiedad OCPP de que "una tarea solo puede bloquear un recurso si su prioridad dinámica es mayor que los límites máximos de prioridad de todos los recursos bloqueados por otras tareas". [2]

ICPP se denomina "Bloqueo de techo" en Ada , "Protocolo de protección de prioridad" en POSIX y "Emulación de techo de prioridad" en RTSJ . [3] También se conoce como "Protocolo de mayor prioridad del casillero" (HLP). [4]