En computación en tiempo real , el protocolo de techo de prioridad es un protocolo de sincronización para recursos compartidos que evita la inversión de prioridad ilimitada y el bloqueo mutuo debido a la anidación incorrecta 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 de prioridades dinámicas . [1]
ICPP frente a OCPP
Existen dos variantes del protocolo: el Protocolo de Prioridad de Techo Original ( OCPP ) y el Protocolo de Prioridad de Techo Inmediato ( 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 se eleva cuando una tarea Y de mayor prioridad intenta adquirir un recurso que X ha bloqueado. La prioridad de la tarea se eleva entonces a la prioridad más alta que había sido bloqueada por ella misma, lo que garantiza que la tarea X finalice rápidamente su sección crítica, desbloqueando el recurso. Una tarea solo puede bloquear un recurso si su prioridad dinámica es mayor que los límites de prioridad de todos los recursos bloqueados por otras tareas. De lo contrario, la tarea se bloquea y espera el recurso. [2]
En ICPP, la prioridad de una tarea se eleva inmediatamente cuando bloquea un recurso. La prioridad de la tarea se establece en el límite de prioridad del recurso, por lo que no se puede programar ninguna tarea que pueda bloquear el recurso. Esto garantiza la propiedad OCPP de que "Una tarea solo puede bloquear un recurso si su prioridad dinámica es mayor que los límites de prioridad de todos los recursos bloqueados por otras tareas". [2]
- ICPP es más fácil de implementar que OCPP, ya que no es necesario monitorear las relaciones de bloqueo [2]
- ICPP conduce a menos cambios de contexto ya que el bloqueo se produce antes de la primera ejecución [2]
- El ICPP requiere más movimientos prioritarios ya que esto sucede con todo el uso de recursos [2]
- OCPP cambia la prioridad solo si se ha producido un bloqueo real [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 lo conoce como "protocolo de mayor prioridad del bloqueador" (HLP). [4]
Véase también
Referencias
- Lui Sha; Ragunathan Rajkumar y John P. Lehoczky (septiembre de 1990). "Protocolos de herencia de prioridad: un enfoque para la sincronización en tiempo real" (PDF) . IEEE Transactions on Computers . 39 (9): 1175–1185. doi :10.1109/12.57058.
- ^ Renwick, Kyle; Renwick, Bill (18 de mayo de 2004). "Cómo utilizar la herencia de prioridad". builtin.com . Consultado el 11 de noviembre de 2014 .
- ^ abcdefg "Copia archivada" (PDF) . Archivado desde el original (PDF) el 2014-11-13 . Consultado el 2014-11-13 .
{{cite web}}: CS1 maint: copia archivada como título ( enlace ) - ^ Alan Burns ; Andy Wellings (marzo de 2001). Sistemas en tiempo real y lenguajes de programación — Ada 95, Java en tiempo real y POSIX en tiempo real (3.ª ed.). Addison Wesley Longmain. ISBN 0-201-72988-1.
- ^ http://user.it.uu.se/~yi/courses/rts/dvp-rts-08/notes/synchronization-resource-sharing.pdf [ URL básica PDF ]