Requisito previo: sincronización de procesos La
concurrencia es la ejecución de múltiples secuencias de instrucciones al mismo tiempo. Ocurre en el sistema operativo cuando hay varios subprocesos de proceso ejecutándose en paralelo. Los subprocesos del proceso en ejecución siempre se comunican entre sí a través de la memoria compartida o el paso de mensajes. Los resultados de concurrencia en el uso compartido de recursos dan lugar a problemas como interbloqueos y falta de recursos.
Ayuda en técnicas como la coordinación de la ejecución de procesos, la asignación de memoria y la programación de la ejecución para maximizar el rendimiento.
Principios de concurrencia:
tanto los procesos intercalados como los superpuestos pueden verse como ejemplos de procesos concurrentes, ambos presentan los mismos problemas.
La velocidad relativa de ejecución no se puede predecir. Depende de lo siguiente:
- Las actividades de otros procesos.
- La forma en que el sistema operativo maneja las interrupciones
- Las políticas de programación del sistema operativo.
Problemas en la concurrencia:
- Compartir recursos globales:
compartir recursos globales de manera segura es difícil. Si dos procesos hacen uso de una variable global y ambos realizan operaciones de lectura y escritura en esa variable, entonces el orden en que se ejecutan las distintas operaciones de lectura y escritura es fundamental. - Asignación óptima de recursos:
es difícil para el sistema operativo administrar la asignación de recursos de manera óptima. - Localización de errores de programación:
es muy difícil localizar un error de programación porque los informes no suelen ser reproducibles. - Bloqueo del canal:
puede ser ineficaz que el sistema operativo simplemente bloquee el canal y evite su uso por parte de otros procesos.
Ventajas de la concurrencia:
- Ejecución de múltiples aplicaciones:
permite ejecutar múltiples aplicaciones al mismo tiempo. - Mejor utilización de recursos:
permite que los recursos que no utiliza una aplicación se puedan utilizar para otras aplicaciones. - Mejor tiempo de respuesta promedio:
sin concurrencia, cada aplicación debe ejecutarse hasta su finalización antes de que se pueda ejecutar la siguiente. - Mejor rendimiento:
permite un mejor rendimiento del sistema operativo. Cuando una aplicación usa solo el procesador y otra aplicación usa solo la unidad de disco, el tiempo para ejecutar ambas aplicaciones simultáneamente hasta su finalización será más corto que el tiempo para ejecutar cada aplicación consecutivamente.
Inconvenientes de la concurrencia:
- Es necesario para proteger varias aplicaciones entre sí.
- Se requiere coordinar múltiples aplicaciones a través de mecanismos adicionales.
- Se requieren gastos generales de rendimiento adicionales y complejidades en los sistemas operativos para cambiar entre aplicaciones.
- A veces, ejecutar demasiadas aplicaciones al mismo tiempo conduce a un rendimiento gravemente degradado.
Cuestiones de concurrencia:
- No atómico: las
operaciones que no son atómicas pero que pueden ser interrumpidas por múltiples procesos pueden causar problemas. - Condiciones de carrera: se produce una condición de
carrera del resultado que depende de cuál de varios procesos llegue primero a un punto. - Bloqueo:
los procesos pueden bloquear la espera de recursos. Un proceso podría estar bloqueado durante un largo período de tiempo esperando la entrada de una terminal. Si se requiere que el proceso actualice periódicamente algunos datos, esto sería muy indeseable. - Inanición –
Ocurre cuando un proceso no obtiene servicio para progresar. - Interbloqueo :
ocurre cuando dos procesos están bloqueados y, por lo tanto, ninguno puede proceder a ejecutarse.