|
Los conceptos de Proceso, Procesamiento concurrente y Procesamiento paralelo son fundamentales para el entendimiento y comprensión de los sistemas operativos modernos. Un proceso es una abstracción de un programa en ejecución y es la unidad de trabajo del sistema. El sistema, a su vez, está formado por un conjunto de procesos que se ejecutan concurrentemente, y básicamente el sistema maneja tanto procesos del sistema operativo (aquellos que ejecutan código del sistema), como procesos de los usuarios (aquellos que ejecutan el código de los usuarios). En este capítulo hablaremos del concepto de proceso como modelo e identificaremos los estados posibles en que éste se puede encontrar.
Otro de los conceptos importantes de los sistemas operativos modernos, está muy relacionado con el concepto de proceso, este concepto se le conoce como Hebra de control o bien Proceso Liviano. Este concepto ha surgido en los últimos años, y viene incorporado en algunos sistemas , en su núcleo o bien son paquetes que se montan en modo usuario.
Además, este capítulo contempla la exposición de varios métodos que se utilizan para la administración de procesos, planificación de la CPU, la comunicación y siscronización de procesos.
El primer concepto que analizaremos en esta sección corresponde a proceso, que es la base para entender muchos otros conceptos que se manejan en el sistema operativo.
Como ya se mencionó en el capítulo anterior, un proceso es una abstracción de un programa en ejecución, compuesto por el código ejecutable, una sección de datos que contiene las variables globales, una sección de stack o pila que contiene datos temporales, tales como parámetros de subrutinas, direcciones de retornos y variables temporales; y el estado de los registros del procesador. El programa corresponde a una entidad pasiva, en cambio el proceso corresponde a una entidad activa.
Hablando de los recursos que utilizan ambos conceptos, podemos decir, que el programa utiliza únicamente memoria secundaria, em cambio el proceso utiliza memoria principal y procesador.
En la siguiente figura se aprecian ambos conceptos.
En los sistemas multiprogramados, de tiempo compartido que operan sobre un computador con un procesador se produce el fenómeno denominado Procesamiento concurrente. Este fenómeno, consiste en que la CPU alterna la ejecución de los procesos en porciones fijas de tiempo, este fenómeno se le conoce como Seudoparalelismo, en el sentido que ante los ojos de los usuarios dueños de los procesos, la ejecución de sus procesos es paralela; esta ilusión es producto de que el tiempo fijo que asigna el sistema a cada uno de los procesos es muy pequeño, y por lo tanto difícil de ser percibido por el hombre. Cuando el sistema computacional está provisto de varios procesadores, entonces él puede realizar lo que se denomina Procesamiento paralelo, esto implica que los procesos pueden ser ejecutados efectivamente en distintos procesadores en forma paralela.
concurrenia:
La alternanacia de los procesos en el sistema es regulada por el administrador de procesos y obedece a un algoritmo de planificación.
Dado que en un sistema de tiempo compartido coexisten en forma concurrente un conjunto de procesos en el sistema, en donde se incluyen procesos del sistema y procesos de los usuarios. Esta concurrencia produce que los procesos se puedan encontrar en diferentes estados, ya que por ejemplo, en un momento dado solo un proceso puede estar en ejecución. A continuación se presenta una figura que refleja la relación entre los distintos estados posibles que puede presentar un proceso.
Los tres estados básicos son:
Los procesos pueden tomar cualquiera de los estados mencionados y la transición entre uno y otro estado tiene su explicación. Las siguientes son las transiciones posibles:
Para manejar la información de todos los procesos, el sistema operativo maneja una tabla de procesos, la que contiene una entrada por la información de cada proceso, a cada una de estas entradas en la tabla de procesos se le conoce con el nombre de PCB (Process Control Block). Por lo general esta estructura posee diversa información asociada al proceso, en general esta información incluye:
Otro concepto muy importante que incluye el concepto de proceso, es el denominado cambio de contexto. Este concepto esta directamente relacionado con la idea de los sistemas de tiempo compartido. En un sistema de tiempo compartido, existen muchos procesos ejecutándose concurrentemente, el sistema se encarga de asignar a cada uno de los procesos un tiempo fijo de ejecución, cuando el proceso no termina de ejecutarse en ese tiempo el sistema debe guardar la información que le corresponde a dicho proceso para poder recuperarla posteriormente cuando le asigne otra cantidad de tiempo de ejecución.
Se denomina conmutación de contexto al mecanismo mediante el cual el sistema almacena la información del proceso que se está ejecutando y recupera la información del proceso que ejecutará enseguida. A continuación se presenta un esquema explicativo de este mecanismo.
El diseño y funcionamiento de un sistema operativo que maneje el concepto de proceso debe ser flexible y ofrecer capacidades a los programadores. En este sentido, debe proveer los mecanismos mediante los cuales los programadores puedan crear aplicaciones en donde puedan trabajar con más de un proceso. Para lograr esto, el sistema operativo proporciona llamados a sistema mediante los cuales los programadores pueden crear o destruir procesos.
Particularmente, el sistema operativo UNIX proporciona la llamada a sistema fork(), la cual permite crear un proceso, que se ejecuta concurrentemente con el proceso que lo creó. Cuando un proceso crea a otro, al proceso creado se le denomina proceso hijo y al proceso que creó, se le denomina proceso padre. El nuevo proceso hijo tambien puede crear otros procesos. De esta manera es posible tener una jerarquía de procesos en donde se tienen (entre comillas), procesos abuelos, procesos padres y procesos hijos; o alguna jerarquía de mayor anidación.
EL sistema Unix, proporciona varias llamadas a sistema que le permite a los programadores desarrollar aplicaciones que manejen varios procesos. La llamada fork(), crea un proceso hijo, copiando toda la caracterización del proceso padre en el hijo (en otro espacio de dirección), es decir, el hijo resulta ser una copia del padre, con el mismo código, datos, pila y conjunto de registros.
Cuando se ejecuta el fork() retorna el valor 0 para el hijo y un valor mayor que cero para el padre, este valor corresponde al identificador del proceso (pid) hijo.
Una vez que el proceso hijo es creado, tanto el padre como el hijo comienzan a ejecutarse en forma concurrente. Luego si alguno de estos procesos modifica sus respectivos datos, estos cambios no son reflejados en el otro proceso. Sin embargo, los recursos obtenidos por el padre son heredados al hijo, así por ejemplo, si el padre antes de crear al hijo tenía un archivo abierto, éste permanecerá abierto en el hijo.
Si el proceso padre desea cambiar la imagen del proceso hijo, es decir, quiere asignarle otra tarea, entonces debe ejecutar otra llamada a sistema que le permita hacerlo. Esto es posible mediante la llamada exec y sus variantes.
Hay un punto importante en la relación de procesos padres e hijos. El proceso padre no debe terminar antes que cualquiera de sus hijos, si esto sucede, entonces los procesos hijos quedan huérfanos (defunct o zombie). Este tipo de proceso no es posible de eliminar el sistema, sólo se pueden matar bajando el sistema. Existe otras llamadas a sistema que les permite a los procesos padres esperar por la muerte de sus hijos: wait, wait3 y waitpid. Por otro lado, cada hijo le avisa a su padre cuando termina a través de una llamada a sistema exit.
Tambien en Unix es frecuente encontrar procesos denominados demonios (daemon), los cuales se ejecutan cuando el sistema parte y se ejecutan en forma asíncrona, permanecen en estado bloqueado esperando por la ocurrencia de un evento, por tiempo (cron), por la llegada o salida de mensajes, por trabajos para imprimir, etc.
Desde el punto de vista de procesos padres y procesos hijos, el intérprete de comados, Shell, es un programa que cuando se ejecuta proporciona un interfaz mediante la cual los usuarios pueden interactuar con el. Cuando un usuario utiliza el comando cp para copiar archivos, la shell crea un proceso hijo y le asigna la tarea de copiar, así si el usuario le especificó que se ejcutara en background entonces tanto el proceso padre (shell) como el hijo (cp) se ejecutan concurrentemente, si no se le indica ejecución background entonces el proceso shell espera a que el proceso cp termine.
Dado que los procesos poseen espacios de dirección independientes si se desean comunicar deben hacerlo a través de algún mecanismo, como los tubos (pipes), señales (Signal), memoria compartida, colas de mensajes, socket , etc.
Como se mencionó anteriormente un proceso consta básicamente de una parte estática (código y datos), y una parte dinámica formada por el estado del conjunto de registros y la pila asociados al tiempo de ejecución. Tradicionalmente un proceso tiene una hebra de control, sin embargo es posible asociarle a un proceso más de una hebra. La hebras pertenecientes a un mismo proceso se pueden comunicar a través de la sección de datos que almacena las variables globales.
Dado que las hebras pertenecen a un mismo proceso, se dice que ellas comparten el mismo espacio de dirección a través del cual se pueden comunicar. Este tipo de mecanismo proporciona una concurrencia a nivel de proceso, que permite realizarla con menos costo asociado al sistema.
Las hebras de control, pueden ser apoyadas por el núcleo (como en el sistema operativo Match o en Solaris), en este caso el sistema operativo proporciona llamadas a sistema que permiten ser utilizadas por los programadores. O bien pueden ser apoyadas en modo usuario, através de un conjunto de llamadas de biblioteca (como en el sistema Linux).
A continuación se presenta una figura que ilustra los conceptos de proceso y de hebra de control:
En cuanto a los recursos que utilizan las hebras respecto a los procesos a continuación se presenta la siguiente tabla:
Elementos por Hebra |
Elementos por Proceso |
|
PC |
Espacio de Dirección |
|
Pila |
Datos (Variables globales) |
|
Cjto de Registros |
Archivos Abiertos |
|
Estado |
Procesos Hijos |
|
Hebras de los hijos |
Semáforos |
|
L |
|
Señales |
La utilización de las Hebras se incluye en variados modelos de coperación. Entre los modelos mas utilizados se encuentran:
A continuación se presenta un esquema de estos 3 modelos:
Con respecto a la implementación de hebras, actualmente se encuentran dos tipos:
Aún no hay comentarios para este recurso.
Monografias, Exámenes, Universidades, Terciarios, Carreras, Cursos, Donde Estudiar, Que Estudiar y más: Desde 1999 brindamos a los estudiantes y docentes un lugar para publicar contenido educativo y nutrirse del conocimiento.
Contacto »