Corrección, sección crítica Flashcards
¿Que componentes tiene la Corrección?
- Safety
- Liveness
¿Cual es la definición de Safety?
Asegura que nunca ocurren cosas malas durante la ejecución del sistema. Es una garantía de que el sistema no violará invariantes críticos. Un sistema con esta propiedad evita estados incorrectos o peligrosos.
Propiedades de Safety
- Exclusión Mutua: dos procesos no deben intercalar ciertas (sub)secuencias de instrucciones. Ejemplo: incremento de variable global.
- Ausencia de deadlock: un sistema que aún no finalizó debe poder continuar realizar su tarea, es decir, avanzar productivamente.
¿Qué es la exclusión mutua?
Es la garantía de que solo un hilo o proceso puede acceder a una sección crítica de código o a un recurso compartido en un momento dado.
¿Cual es la definición de Liveness?
- Asegura que algo bueno eventualmente ocurra.
- Garantiza que todas las tareas en ejecución puedan progresar y no se queden bloqueadas indefinidamente.
Propiedades de Liveness
- Ausencia de starvation: todo proceso que esté listo para utilizar un recurso debe recibir dicho recurso eventualmente.
- Fairness: Se refiere a la idea de tratar a todos los procesos de manera justa y equitativa en términos de acceso a recursos o ejecución. Garantiza que ningún proceso sea permanentemente excluído o postergado indefinidamente.
¿Qué es starvation?
Ninguna tarea se queda esperando indefinidamente sin hacer progreso porque otras ocupan los recursos.
¿Qué es un escenario Fair?
Cada tarea recibe su turno, de manera que todas las tareas puedan avanzar en algún momento.
Sin fairness: Algunas tareas pueden ser ignoradas indefinidamente, incluso si técnicamente el sistema sigue haciendo progreso (lo que se conoce como starvation o inanición).
¿Que es un Lock?
Es un método para bloquear el proceso hasta poder obtener el lock
¿Qué es unlock?
Es un método que libera el lock que tomó previamente.
¿Qué tipos de locks existen?
- Locks de lectura o shared locks.
- Locks de escritura o exclusive locks.
¿Qué es un Lock de lectura o shared lock?
Permiten que varios hilos lean el mismo recurso al mismo tiempo, porque la lectura no altera el estado del recurso. Sin embargo, mientras haya hilos leyendo, ningún hilo puede escribir en ese recurso (para evitar inconsistencias)Más de un proceso a la vez puede tener el lock.
¿Qué es un Lock de escritura o exclusive lock?
Permiten que solo un hilo acceda al recurso mientras lo está escribiendo, garantizando que no ocurran inconsistencias. Ningún otro hilo puede leer o escribir durante una escritura activa.
¿Cómo debe poder dividirse la sección crítica?
El código puede dividirse en parte crítica y parte no crítica.
¿Qué debe suceder con la sección crítica?
Debe progresar (finalizar eventualmente)
¿Qué debe suceder con la sección no crítica?
No requiere progreso (el proceso puede terminar o entrar en un loop infinito)
¿Cual es la condición para poder tomar un shared (read) lock?
el proceso debe esperar hasta que sean liberados todos los exclusive locks
¿Cual es la condición para poder tomar un exclusive (write) lock?
el proceso debe esperar hasta que sean liberados todos los locks (de ambos tipos)
¿Qué es el trait marker Sync en Rust?
Indica que un tipo es seguro para ser accedido desde múltiples hilos simultáneamente a través de referencias inmutables. En otras palabras, si un tipo implementa Sync, es seguro que varias referencias a ese tipo (&T) existan en diferentes hilos al mismo tiempo.
¿Qué es el trait marker Send en Rust?
Es una propiedad que indica que un tipo puede ser transferido con seguridad entre hilos (threads). Cuando un tipo implementa el trait Send, su ownership puede moverse de un hilo a otro sin violar las garantías de seguridad en tiempo de compilación.
¿Que hace Arc?
Comparte el acceso al elemento