1
PROCESOS CONCURRENTES. Resumen – Los sistemas operativos, a partir de este momento abreviado (SO), tienen como objetivo gestionar los recursos del hardware y software encargados de controlar la forma en que se comunican, envían y reciben información los dispositivos. Los SO modernos están diseñados con el objetivo de responder a los nuevos desarrollos del hardware y el software, estos normalmente se constituyen por dos conceptos claves los cuales son, el proceso y el hilo, sin embargo, surgen algunas preguntas que se desean responder ¿Qué es un proceso y por que son importantes ?, ¿Qué es un hilo y por que son importantes?, ¿Qué es un proceso concurrente?, en el transcurso de este documento se responderán estas.
Como se menciono anteriormente los SO modernos se basan en conceptos claves como lo son el proceso y el hilo. Estos a su vez están relacionados con la gestión de procesos que se pueden dar en tres métodos o técnicas: multiprogramación, proceso distribuido y multiproceso. •
Multiprogramación
Figura 1: multiprogramación.1 •
Multiproceso
I. INTRODUCCIÓN Un sistema operativo es el software principal capaz de gestionar los recursos del hardware y proveer servicios a las aplicaciones, la principal tarea de todo sistema operativo moderno es la gestión de los procesos y reservar recursos para estos, permitiendo enviar o recibir información que permita así la sincronización entre estos, para lograr esto, el sistema operativo debe mantener una estructura determinada para cada proceso que define cómo están repartidos los recursos y establecer un control sobre los procesos.
Figura 2: multiproceso2 •
Proceso distribuido
figura 3: Proceso distribuido.3 1
https://www.google.com.co/search?hl=es419&tbm=isch&sxsrf=ALeKk00wcxKpI7dsubYP9wBMx5JdJic00A%3A1588903302005&source=hp&biw=1440&bih=821 &ei=hb20XoPVOsjSsAX2z4LYCA&q=multiprogramacion&oq=multiprogramac&gs_lcp=CgNpbWcQAxgAMgIIADICCA AyAggAMgIIADICCAAyAggAMgIIADICCAAyAggAMgIIADoECCMQJ1DZBFjqHmDZI2gAcAB4AIABpAKIAZsZkg EEMi0xNJgBAKABAaoBC2d3cy13aXotaW1n&sclient=img#imgrc=slAaDGxQ3j4bMM
2
https://www.google.com.co/search?q=multiproceso&tbm=isch&ved=2ahUKEwi9k9qJlqPpAhVJTTABHVcYAoUQ2cCegQIABAA&oq=multi&gs_lcp=CgNpbWcQARgDMgQIIxAnMgQIIxAnMgQIABBDMgQIABBDMgQIABBDMgQIA BBDMgQIABBDMgIIADICCAAyAggAUKjiEliS5xJghPcSaABwAHgAgAG5AYgB0QaSAQMwLjWYAQCgAQGqAQtn
d3Mtd2l6LWltZw&sclient=img&ei=i720Xv2hEcmawbkP17CIqAg&bih=821&biw=1440&hl=es419#imgrc=EFZXiuBep74BPM
3 https://www.google.com.co/search?q=proceso+distribuido&tbm=isch&ved=2ahUKEwi3nMGel6PpAhUBsTEKHeezCyMQ2 cCegQIABAA&oq=proceso+dist&gs_lcp=CgNpbWcQARgAMgIIADICCAAyAggAMgYIABAIEB4yBggAEAgQHjIGCA AQCBAeMgYIABAIEB4yBggAEAgQHjIGCAAQCBAeMgYIABAIEB46BAgAEEM6BAgjECdQ25DdA1inrd0DYNW43 QNoBXAAeACAAbwBiAGGE5IBBDAuMTeYAQCgAQGqAQtnd3Mtd2l6LWltZw&sclient=img&ei=w760XveuFYHixg Hn566YAg&bih=821&biw=1440&hl=es-419#imgrc=NbSUS6eeshi1eM
2
La concurrencia es el punto clave en los tres campos anteriores y fundamental para el diseño de SO. La concurrencia comprende un gran número de cuestiones de diseño, incluyendo la comunicación entre procesos, compartición y competencia por los recursos, sincronización de la ejecución de varios procesos y asignación del tiempo de procesador a los procesos.
II. CONCURRENCIA Desde un punto de vista formal, la concurrencia no se refiere a dos o más eventos que ocurren a la vez sino a dos o más eventos cuyo orden es no determinista, esto es, eventos acerca de los cuales no se puede predecir el orden relativo en que ocurrirán. La concurrencia es un elemento crítico del diseño del software del sistema. El núcleo de un sistema operativo aprovecha la concurrencia para la virtualización de los recursos del sistema, como el procesador y la memoria. La virtualización es una estrategia de diseño de sistema con el fin de cumplir varios objetivos, entre los cuales están: • • •
Ocultar la latencia y mejorar el rendimiento. Evitar las limitaciones impuestas por los recursos físicos. Mejorar la fiabilidad y el rendimiento.
Como se menciono anteriormente la concurrencia es primordial para la ejecución de los siguientes procesos: Multiprogramación: el entorno de multiprogramación es aquel donde existen múltiples tareas compartidas por un 4
https://www.geeksforgeeks.org/concurrent-processes-in-operating-system/
procesador. mientras que el sistema operativo puede lograr una representación virtual, si el procesador está asignado a cada tarea individual, de modo que el concepto virtual sea visible si cada tarea tiene un procesador dedicado. Un ejemplo sería cuando se tiene abierto un archivo de Word, una ventana de YouTube y un PowerPoint, los programas se ven como si estuvieran en ejecución simultáneamente, pero, realmente el sistema se encarga de asignar al procesador por tiempo, en el caso anterior el sistema da un nanosegundo a Word, después otro nano segundo al YouTube y seguido un nano segundo al PowerPoint, y así durante todo el tiempo en el que están ejecutando los programas. El entorno multicapa que se muestra en la figura 4.
Figura 4: Entorno multiprogramación.4 Multiprocesamiento: en el entorno de multiprocesamiento se utilizan dos o más procesadores con memoria compartida. Solo se utiliza un espacio de dirección virtual, que es común para todos los procesadores. Todas las tareas residen en la memoria compartida. En este entorno, la concurrencia se admite en forma de procesadores que se ejecutan simultáneamente. Las tareas ejecutadas en diferentes procesadores se realizan entre sí a través de la memoria compartida. El entorno de multiprocesamiento se muestra en la figura 5.
3
diseño era su complejidad, lo que dificultaba su versatilidad y flexibilidad para que se pudiera construir un único SO para todo uso. Además, el intercambio de recursos realizados por estos procesos fue primitivo o ineficiente.
Figura 5: Entorno multiproceso.5 Procesamiento distribuido: en un entorno de procesamiento distribuido, dos o más computadoras están conectadas entre sí mediante una red de comunicación o un bus de alta velocidad. No hay memoria compartida entre los procesadores y cada computadora tiene su propia memoria local. Por lo tanto, una aplicación distribuida que consta de tareas concurrentes, que se distribuyen a través de la comunicación de red a través de mensajes. El entorno de procesamiento distribuido se muestra en la figura 6.
Figura 6: Entorno procesamiento distribuido.6 El punto clave en la configuración de los primeros SO fue el proceso. En general, se ejecutaban en orden secuencial. La multiprogramación que conocemos hoy en día se encontraba aun en sus inicios, es decir, los procesos no se ejecutaban simultáneamente en el mismo tiempo, sino que se utilizaba un mecanismo basado en el tiempo en el que se daba una cantidad limitada de tiempo a cada proceso. Estos tipos de SO fueron muy populares y fueron vistos como un gran avance en aquella época. El principal inconveniente con este 5
https://www.geeksforgeeks.org/concurrent-processes-in-operating-system/
Un ejemplo claro de lo que es concurrencia puede ser una red ferroviaria. Una serie de trenes que realizan viajes dentro de una red ferroviaria, cuando comienzan y terminan, generalmente es independiente de la mayoría de los otros viajes. Sin embargo, donde los viajes interactúan es en lugares donde las rutas se cruzan o usan secciones comunes de la ruta para partes de los viajes. En este ejemplo, podemos considerar el movimiento de trenes como programas en ejecución, y las secciones de vía como los recursos que estos programas pueden o no tener que compartir con otros programas. Por lo tanto, los dos trenes corren simultáneamente en caso de que sus rutas interactúen compartiendo los mismos recursos sin interrumpirse entre sí de manera similar a los procesos concurrentes en los sistemas operativos.
III. CONCEPTOS FUNDAMENTALES. Para mejor comprensión de lo que es la concurrencia en los SO, se necesita conocer dos términos fundamentales que son: El proceso: Un proceso es un programa en ejecución; El sistema operativo realiza un seguimiento de los programas en ejecución en forma de procesos y sus datos (figura 7).
6
https://www.geeksforgeeks.org/concurrent-processes-in-operating-system/
4
Figura 7: Procesos en ejecución en Windows 10.7 Los hilos: En pocas palabras, los hilos son procesos que comparten un solo espacio de dirección. Cada hilo es dueño de su propio contador de programa y pila (figura 8).
Figura 8: Representación de hilo8 IV. PROCESOS. Previamente se define en pocas palabras lo que es un proceso, esta sección tiene como objetivo profundizar un poco acerca de los procesos, para esto se utiliza se abordará desde conceptos previos como lo es la definición de un SO y sus funciones, ya que estos están relacionados entre sí con los procesos.
7
El sistema operativo se desarrolló para proporcionar una interfaz apropiada para las aplicaciones, rica en funcionalidades, segura y consiste. El sistema operativo es una capa de software entre las aplicaciones y el hardware del computador que da soporte a aplicaciones y utilidades. Se puede considerar que el SO proporciona una representación uniforme y abstracta de los recursos, que las aplicaciones pueden solicitar y acceder. Los recursos incluyen la memoria principal, las interfaces de red, los sistemas de ficheros etc. Una vez que el SO ha creado estas abstracciones de los recursos para que las aplicaciones las usen, debe también controlar su uso. En la sección anterior se definió el termino proceso como un programa en ejecución, pero este también se puede definir como una entidad que consiste en un número de elementos. Los dos elementos esenciales serían el código del programa (que puede compartirse con otros procesos que estén ejecutando el mismo programa) y un conjunto de datos asociados a dicho código. Supongamos que el procesador comienza a ejecutar este código de programa, y que nos referiremos a esta entidad en ejecución como un proceso. En cualquier instante puntual del tiempo, mientras el proceso este en ejecución, este proceso se puede caracterizar por una serie de elementos, incluyendo los siguientes: Identificador: Un identificador único asociado a este proceso, para distinguirlo del resto de procesos.
8 https://www.google.com.co/search?q=programas+en+ejecucion+windows+10&tbm=isch&ved=2ahUKEwiyn9SZoK_pAhWQI1 MKHXhKBc8Q2-
cCegQIABAA&oq=programas+en+ejecucion+&gs_lcp=CgNpbWcQARgBMgQIABAeMgQIABAYMgQIABAYOgQIIxAnOgQIABBDOgIIADoGCAAQ ChAYUNyXAlinxQNgwMgDaAhwAHgAgAG2AYgB_BGSAQQwLjE1mAEAoAEBqgELZ3dzLXdpei1pbWc&sclient=img&ei=xRK7XvKoOpDHzAL4l JX4DA&bih=821&biw=1440&hl=es-419#imgrc=0xVj00OzX9ytqM
https://www.google.com.co/search?q=los+hilos+en+infrmtica&tbm=isch&ved=2ahUKEwjW3q22oK_pAhUHUjABHTeKA 2cQ2cCegQIABAA&oq=los+hilos+en+infrmtica&gs_lcp=CgNpbWcQAzoECAAQQzoCCAA6BAgjECc6BQgAEIMBOgYIAB AIEB5Q3rt2WKL9dmDYgXdoAHAAeACAAbABiAG2GZIBBDAuMjKYAQCgAQGqAQtnd3Mtd2l6LWltZw&sclient=i mg&ei=AhO7XtbVCIekwbkPt5SOuAY&bih=821&biw=1440&hl=es-419#imgrc=SUBksi94QEJDyM
5
Estado. Si el proceso está actualmente corriendo, está en el estado de ejecución. Prioridad: Nivel de prioridad relativo al resto de procesos. Contador de programa. La dirección de la siguiente instrucción del programa que se ejecutará. Punteros de memoria. Incluye los punteros al código de programa y los datos asociados a dicho proceso, además de cualquier bloque de memoria compartido con otros procesos. Datos de contexto. Estos son datos que están represente en los registros del procesador cuando el proceso está en ejecución. Información de estado de E/S9. Incluye las peticiones de E/S pendientes, dispositivos de E/S (por ejemplo, una unidad de cinta) asignados a dicho proceso. Una lista de los ficheros en uso por el mismo, etc. Información de auditoría. Puede incluir la cantidad de tiempo de procesador y de tiempo de reloj utilizados, así como los limites de tiempo, registros contables, etc. La información de la lista anterior se almacena en una estructura de datos, que se denomina bloque de control de procesos (process control block) (figura 9), que el sistema operativo crea y gestiona.
9
10
Dispositivos de entrada y salida.
Stalings, W. (2005). Sistemas operativos. Quinta edición.
Figura 9: Bloque de control de programa (BCP) simplificado.10 El punto más significativo en relación al bloque de control de proceso, o BCP, es que tiene suficiente información de forma que es posible interrumpir el proceso cuando está corriendo y posteriormente restaurar su estado de ejecución como si no hubiera habido interrupción alguna. El BCP es la herramienta calve que permite el SO dar soporte a múltiples procesos y proporcionar multiprogramación. El concepto fundamental de un SO es el proceso. La función principal de un SO es crear, gestionar y finalizar los procesos. Cuando un proceso está activo, el sistema operativo debe ver cómo reservar tiempo para la ejecución por parte del procesador, coordinar sus actividades, gestionar las demandas que planteen conflictos, y reservar recursos del sistema para estos procesos.
6
mientras que la unidad de propiedad de recursos se suele denominar proceso o tarea. V. LOS HILOS. En esta sección se analiza algunos conceptos avanzados relativos a la gestión de procesos que se pueden encontrar en los SO modernos. En primer lugar, se muestra cómo el concepto de procesos es más complejo y sutil de lo que se ha visto hasta este momento y, de hecho, contiene dos conceptos diferentes y potencialmente independientes: uno relativo a la propiedad de recursos y otro relativo a la ejecución. En muchos SO esta distinción ha llevado al desarrollo de estructuras conocidas como hilos (threads).
Multihilo: Multihilo se refiere a la capacidad de un sistema operativo de dar soporte a múltiples hilos de ejecución en un solo proceso. El enfoque tradicional de un solo hilo de ejecución por proceso, en el que no se identifica con el concepto de hilo, se conoce como estrategia monohilo. Las dos configuraciones se muestran en la parte izquierda de la figura 10.
Hasta este momento se ha presentado el concepto de un proceso como un poseedor de dos características: Propiedad de recursos: Un proceso incluye un espacio de direcciones virtuales para el manejo de la imagen del proceso, la imagen de un proceso es la colección de programa, datos, pila y atributos definidos en el bloque de control del proceso. Planificación/ejecución: La ejecución de un proceso sigue una ruta de ejecución (traza) a través de uno o más programas. En la mayor de los sistemas operativos tradicionales, estas dos características son, realmente, la esencia de un proceso. Sin embargo, debe quedar muy claro que estas características son independientes y podrían ser tratadas como tales por el SO. De ese modo es que se hace en diversos SO, especialmente en los desarrollos modernos. Para distinguir estas dos características, la unidad que se activa se suele denominar hilo (thread), o proceso ligero, 11
Stalings, W. (2005). Sistemas operativos. Quinta edición.
Figura 10: Hilos y procesos.11 Un ejemplo de sistema operativo que soporta un único proceso de usuario y un único hilo es el MSDOS. Otros sistemas operativos, como algunas variedades de UNIX, soportan múltiples procesos de usuario, pero sólo un hilo por proceso. La parte derecha de la figura 10 representa las estrategias multihilo. En un entorno multihilo, un proceso se define como la unidad de asignación de recursos y unidad de protección. Se asocian con los siguientes procesos: Un espacio de direcciones virtuales que soporta la imagen del proceso. Acceso protegido a procesadores, otros procesos (Para comunicación entre procesos), archivos y recursos de E/S.
7
Dentro de un proceso puede haber uno o más hilos, cada uno con: • •
• • •
Un estado de ejecución por hilo (Ejecutando, Listo, etc.). Un contexto de hilo que se almacena cuando no está en ejecución; una forma de ver a un hilo es como un contador de programa independiente dentro de un proceso. Una pila de ejecución. Por cada hilo, espacio de almacenamiento para variables locales. Acceso a la memoria y recursos de su proceso, compartido con todos los hilos de su mismo proceso.
La figura 11 muestra la diferencia entre hilos y procesos desde el punto de vista de gestión de procesos. En un modelo de proceso monohilo (es decir, no existe el concepto de hilo), la representación de un proceso incluye su bloque de control de proceso y el espacio de direcciones de usuario, además de las pilas de usuario y núcleo para gestionar el comportamiento de las llamadas/retornos en la ejecución de los procesos. Mientras el proceso está ejecutando, los registros del procesador se controlan por ese proceso y, cuando el proceso no se está ejecutando, se almacena el contenido de estos registros. En un entorno multihilo, sigue habiendo un único bloque de control del proceso y un espacio de direcciones de usuario asociado al proceso, pero ahora hay varias pilas separadas para cada hilo, así como un bloque de control para cada hilo que contiene los valores de los registros, la prioridad, y otra información relativa al estado del hilo.
12
Stalings, W. (2005). Sistemas operativos. Quinta edición.
De esta forma, todos los hilos de un proceso comparten el estado y los recursos de ese proceso, residen en el mismo espacio de direcciones y tienen acceso a los mismos datos.
Figura 11: Modelos de proceso con un único hilo y multihilo.12 Funcionalidades de los hilos: Los hilos al igual que los procesos, tienen estados de ejecución y se pueden sincronizar entre ello. A continuación, se analizan estos dos aspectos de las funcionalidades de los hilos. Estados de los hilos: Igual que con los procesos, los principales estados de los hilos son: Ejecutando, Listo y Bloqueado. Generalmente, no tiene sentido aplicar estados de suspensión a un hilo, ya que dichos estados son conceptos de nivel de proceso. En particular, si se expulsa un proceso, todos sus hilos se deben expulsar porque comparten el espacio de direcciones del proceso. Hay cuatro operaciones básicas relacionadas con los hilos que están asociados con un cambio de estado del hilo: Creación. Cuando se crea un nuevo proceso, también se crea un hilo de dicho proceso. Bloqueo. Cuando un hilo necesita esperar por un evento se bloquea, almacenando los
8
registros de usuario, contador de programa y punteros de pila. Desbloqueo. Cuando sucede el evento por el que el hilo está bloqueado, el hilo se pasa a la cola de Listos. Finalización. Cuando se completa un hilo, se liberan su registro de contexto y pilas. Sincronización de hilos: Todos los hilos de un proceso comparten el mismo espacio de direcciones y otros recursos, como, por ejemplo, los archivos abiertos. Cualquier alteración de un recurso por cualquiera de los hilos, afecta al entorno del resto de los hijos del mismo proceso. Por tanto, es necesario sincronizar las actividades de los hilos para que no interfieran entre ellos o corrompan estructuras de ratos. VI. CARACTERÍSTICAS PRINCIPALES Y TIPOS DE CONCURRENCIA
Como se definió en la sesión III, la concurrencia es una propiedad de los sistemas en la cual los procesos de un cómputo se hacen simultáneamente, y pueden interactuar entre ellos, es decir son procesados al mismo tiempo, de manera que, para ejecutar uno de ellos, no hace falta que se haya ejecutado otro. La concurrencia puede presentarse en tres contextos distintos: Varias aplicaciones: La multiprogramación se creó para permitir que el tiempo de procesador de la máquina fuese compartido dinámicamente entre varios trabajos o aplicaciones activas. Aplicaciones estructuradas: Como ampliación de los principios del diseño modular y la programación estructurada, algunas aplicaciones pueden
implementarse eficazmente como conjunto de procesos concurrentes.
un
Estructura del sistema operativo: Las mismas ventajas de estructuración son aplicables a los programadores de sistemas y se ha comprobado que algunos SO están implementados como un conjunto de procesos. TIPOS DE PROCESOS CONCURRENTES Los SO pueden ejecutar dos tipos de procesos concurrentes, los cuales son: Procesos independientes: es aquel proceso en el cual se ejecuta sin requerir la cooperación de otros procesos, es decir son procesos que no requieren ayuda de otro tipo de procesos para cumplir con su función adecuadamente. Procesos con cooperación: Son aquellos que están diseñados para trabajar conjuntamente en alguna actividad, estos deben poder comunicarse e interactuar entre sí. VII. REFERENCIAS. • • • •
▪
Dan C. Marinescu, en Marinescu , en Cloud Computing , 2013 https://www.geeksforgeeks.org/concurr ent-processes-in-operating-system/ https://www.sciencedirect.com/topics/c omputer-science/concurrency https://www.ukessays.com/essays/infor mation-technology/introduction-ofconcurrent-processes-in-operatingsystems-information-technologyessay.php Stalings, W. (2005). Sistemas operativos. Quinta edición. ▪ https://studentplace98.blogspot.c om/2018/09/concurrencia-ysecuencialidad-sistemas.html