
4 minute read
Unidad 4: Manejo de Concurrencia
from BIOS; ENTREGA FINAL
by rlpz25
¿Que es concurrencia?
Concurrencia es la tendencia de las cosas a producirse al mismo tiempo en un sistema. La concurrencia es un fenómeno natural, por supuesto. En el mundo real, en un momento dado, suceden muchas cosas de forma simultánea. Cuando se diseña software para supervisar y controlar los sistemas del mundo real, hay que enfrentarse a esta concurrencia natural.
Advertisement
En lo que se refiere a temas de concurrencia en sistemas de software, hay dos aspectos importantes en general: poder detectar y responder a los sucesos externos que se producen en un orden aleatorio y garantizar que estos sucesos se responden en un intervalo requerido mínimo.
Ejemplo de concurrencia: Imagina una aplicación de descarga de música, en la cual puedes descargar un número determinado de canciones al mismo tiempo, cada canción es independiente de la otra, por lo que la velocidad y el tiempo que tarde en descargarse cada una no afectara al resto de canciones. Esto lo podemos ver como un proceso concurrente, ya que cada descarga es un proceso totalmente independiente del resto.
Descarga 1 Descarga 2 Descarga 3 Descarga 4 Procesos
Se trata básicamente de un programa que entra en ejecución. Los procesos son una sucesión de instrucciones que pretenden llegar a un estado final o que persiguen realizar una tarea concreta. Un proceso es la ejecución de un programa, es decir, los datos e instrucciones están cargados en la memoria principal, ejecutándose o esperando a hacerlo.
Estados de los procesos
•Nuevo: Cuando el proceso es creado. •Preparado: El proceso está listo para ejecutar, solo necesita del recurso procesador. •Ejecución: El proceso tiene asignado un procesador y está ejecutando sus instrucciones. •Bloqueado: El proceso está esperando por un evento (que se complete un pedido de E/S o una señal). •Terminado: El proceso finalizó su ejecución
Los hilos (threads)
Un hilo o proceso ligero es una unidad básica de ejecución, con su propio contador de programa registros de CPU pila (stack). Los hilos dentro de una misma aplicación comparten código y datos recursos del S.O. (ficheros, E/S, etc.).
La creación de un nuevo hilo es una característica que permite a una aplicación realizar varias tareas a la vez (concurrentemente). Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.
Bloqueo
Un bloqueo se da cuando un proceso intenta utilizar un recurso que está siendo utilizado por otro proceso, este recurso pasa a estado de bloqueo. Cuando un objeto o recurso está bloqueado por un hilo, ningún otro hilo puede obtener acceso al objeto. Cuando el hilo sale, el objeto está desbloqueado y está disponible para ser utilizado por otro hilo.
Sincronización
Cuando tenemos varios procesos o hilos en la ejecución, en muchos casos no queremos que estos se ejecuten al mismo tiempo. El mecanismo que controla el orden de ejecución de determinadas tareas lo llamamos SINCRONIZACION.
¿Por qué en algunos casos no queremos que los hilos se ejecuten al mismo tiempo? Porque se dan condiciones de carrera.
Condición de carrera Una condición de carrera es un comportamiento del software en el cual la salida depende del orden de ejecución de eventos que no se encuentran bajo control
•Se da cuando uno o más hilos ejecutan secciones que otro hilo podría usar al mismo tiempo, y en estas modifica variables que podrían afectar la ejecución del resto de hilos. •Se pueden producir cuando varios hilos NO acceden en exclusión mutua a un recurso compartido. •El nombre viene de la idea de dos procesos compiten en una carrera para acceder a un recurso compartido. •Se convierte en un fallo siempre que el orden de ejecución no sea el esperado. 4.3 Objetos concurrentes de alto nivel Para diseñar un sistema de software concurrente, debemos combinar los bloques de construcción de software con los bloques de construcción de concurrencia. Los sistemas se construyen a partir de componentes, es lógico construir sistemas concurrentes a partir de componentes concurrentes. En sí mismos, ni las estructuras de datos, ni los procedimientos ni las hebras de control son modelos muy naturales, pero los objetos parecen una manera muy natural de combinar todos estos elementos necesarios en un solo paquete.
Un objeto empaqueta estructuras de datos y procedimientos en un componente coherente con su estado y su comportamiento. Encapsula la implementación específica de dicho estado y comportamiento y define una interfaz mediante la cual otros objetos pueden interactuar con él. Los objetos suelen modelar entidades o conceptos del mundo real e interactuar con otros objetos intercambiando mensajes.
Considere un modelo de objeto para el sistema de ascensor. Un objeto de estación de llamada en cada piso supervisa los botones de llamada hacia arriba y abajo de dicho piso. Cuando un pasajero potencial pulsa un botón el objeto de estación responde enviando un mensaje a un objeto asignador de tareas del ascensor, que selecciona el ascensor que tenga más posibilidades de proporcionar el servicio más rápido, asigna el ascensor y reconoce la llamada. Cada objeto de ascensor controla de manera independiente y concurrente el homólogo físico del ascensor, responde a las selecciones de piso del pasajero y a las llamadas del asignador de tareas.
