Descargue como DOCX, PDF, TXT o lea en línea desde Scribd
Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1/ 7
TEMA 2
Programación multiproceso Ejecutables, procesos y servicios
En el ámbito de la informática, un proceso puede definirse de manera
simplificada como un programa en ejecución. Existen otras definiciones; como la de William Stallings, que define un proceso como una unidad de actividad que se caracteriza por la ejecución de una secuencia de instrucciones, un estado actual y un conjunto de recursos asociados del sistema. Para que un proceso pueda llevar a cabo su tarea, estará compuesto por el código ejecutable del programa, los datos y la pila del programa, el contador del programa, el puntero de pila y todos los registros necesarios para el funcionamiento de este. El código ejecutable es aquel que puede ser interpretado por a máquina para realizar las tareas previstas por el programa. Como el concepto de proceso está íntimamente relacionado con el sistema operativo donde se realiza, existen una estructura de datos llamada BCP (Bloque de control de procesos) donde se almacena la información de cada proceso. Incluye esta información:
- Identificador único del - Prioridad del proceso
proceso. - Gestión de memoria - Estado del proceso - Información de estados - Contador del programa de entrada/salida - Registros de CPU
Los sistemas operativos disponen de herramientas para visualizar la
información de cada proceso. En el caso de Windows, podemos comprobar esta información en la pestaña procesos del administrador de tareas. Los procesos están íntimamente relacionados con los servicios de los sistemas operativos, ya que estos, mediante su ejecución en segundo plano proporcionan a os procesos una serie de funcionalidades relacionadas con las cunetas de usuario, las redes locales y externas, etc.
Estados de un proceso
La ejecución de procesos en un sistema operativos se lleva a cabo de
manera simultánea. Además, los procesos pueden estar relacionados entre sí: la salida de datos de uno de ellos puede ser necesaria como entrada para el inicio de otros, por este motivo, los procesos pueden encontrarse en una serie de estados que se definen a continuación: - Ejecución; El proceso se encuentra en ejecución y. por tanto, haciendo uso del procesador; se encontrará en este estado hasta que finalice su tiempo asignado por el sistema operativo. - Bloqueado o en espera: El proceso se encuentra bloqueado hasta que un evento externo provoque su transición al estado denominado listo. - Listo: el proceso se encuentra iniciado y paralizado de forma temporal, pero preparado para poder ejecutarse cuando sea necesario y se asigne un tiempo de ejecución en el procesador.
Planificación de procesos por el sistema operativo
El sistema operativo de un dispositivo es el responsable de decidir
qué procesos entran en la CPU (y, por tanto, se ejecutan), y en que momento salen de la CPU finalizando su ejecución y realizando las transiciones a los diferentes estados. Para la gestión de estas tareas, el sistema operativo tiene definidas una serie de políticas de planificación de procesos que especifican adecuadamente los turnos de ejecución de cada uno de ellos, estableciendo las cargas de trabajo para lograr un rendimiento adecuando del procesador y optimizando el mayor número de procesos y el menor tiempo de respuesta posibles. Las políticas de planificación no son siempre homogéneas, ya que dependen del procesador empleado y del tipo de procesos que se estén ejecutando de manera simultánea. Por ello, los sistemas operativos disponen de varios planificadores que se pueden clasificar de la siguiente forma.
- Planificador de procesos a largo plazo: Es el encargado de la
programación multipr0oceso del sistema operativo. Para ello, envía los procesos a la cola del planificador a corto plazo. - Planificador de procesos a corto plazo: Es el cargado de asignar los tiempos de CPU a los procesadores, estableciendo un sistema de prioridades entre los procesos, que pueden emplear métodos de entrada y salida como FIFO, SJF o Round-Robin y sistemas de retroalimentación. - Planificador de procesos a medio plazo: Es un tercer planificador intermedio, responsable de suspender y restaurar procesos de poco interés, realizando el intercambio de los mismos entre la memoria principal y el disco o la memoria secundaria.
Hilos
Un hilo es una secuencia de código en ejecución dentro del contexto
de un proceso, y no puede ejecutarse sin el control de este. Dentro de cada proceso, existirán una serie de hilos ejecutándose de manera simultánea para realizar diferentes tareas. Una de las principales características de los hilos es que cuando modifican un dato en la memoria, el resto de hilos del proceso tienen acceso inmediato a él. Cada hilo tendrá como parámetros propios su contador de programa, la pila de ejecución y el estado de la CPU con el valor de los registros. Los procesos se mantendrán en estado de ejecución mientras al menos uno de sus hilos siga activo y finalizarán cuando todos los hilos hayan terminado y liberen en ese momento los recursos consumidos. Al tratarse de un concepto incluido dentro de un proceso, los hilos son también llamados procesos ligeros.
Programación concurrente
Cuando se ejecuta un programa, lo normal es que se ejecuten varios
procesos para llevar a cabo diferentes acciones que pueden ser independientes, comunes o colaborativas entre cada proceso. De esta manera, dos procesos serán concurrentes en la ejecución de un programa cuando la primera instrucción de uno de ellos se ejecuta después del inicio de la primera instrucción del otro pero antes de que acabe la última instrucción del segundo programa, por lo que sus instrucciones se solaparán en el tiempo. En los procesos secuenciales, en cambio, cada proceso no comenzará hasta que no finalice el anterior, con independencia se sus instrucciones. La programación concurrente es una rama del desarrollo informático que se encarga de la gestión de las especificaciones para resolver los problemas de comunicación y sincronización de los procesos concurrentes en la ejecución de un programa. Estas especificaciones aumentan el aprovechamiento del procesador y, por tanto, la velocidad de ejecución de los programas. La programación concurrente resuelve diferentes problemas de concurrencia de procesos en las aplicaciones habituales que se utilizan en los dispositivos informáticos, por ejemplo, cuando una aplicación lanza una ventana modal de confirmación y al mismo tiempo envía un correo electrónico.
Programación paralela y distribuida
La programación paralela es u tipo de programación concurrente; por
tanto, en ella se ejecutan procesos de manera simultánea. Está diseñada de modo que cada proceso se ejecute en un procesador diferente, en un sistema denominado multiprocesador. Cada procesador llevará a cabo un proceso, por lo que disminuirá notablemente el tiempo de ejecución del programa. Por otra parte la programación distribuida se basa en sistemas distribuidos, en los que los procesos se distribuyen entre diferentes componentes de hardware conectados en red y coordinados mediante el paso de mensajes entre ellos, optimizando de esta forma el uso de recursos individuales que suman el conjunto. La programación distribuida es el paradigma que ha facilitado el desarrollo de la informática moderna, en la que, en el uso de aplicaciones, se entiende cada vez más hacia los sistemas cliente servidor, máximo exponente de la programación distribuida. En cuanto a la comunicación entre procesos de un sistema distribuido, existen tres modelos, que se explican a continuación:
- Sockets: Son puntos extremos de comunicación entre procesos
de aplicaciones. - RCP: Las RCP (Remote procedure Call, Llamadas a procedimientos remotos) son modelos para llamar desde un programa cliente a procedimientos o procesos que se ejecutan en un proceso servidor. - Invocación remota de objetos: en el acaso de la programación orientada a objetos, este modelo permite la conmutación de objetos en diferentes procesos mediante la llamada de manera remota a métodos de estos objetos.
Creación, comunicación y sincronización de procesos
Los procesos en la ejecución de un programa son creado y eliminados
de manera dinámica. Para conseguirlo, los sistemas operativos proporcionan facilidades para llevar a acabo las acciones y la gestión de estos procesos. En la creación de un proceso a partir de otro, el sistema operativo proporciona un servicio de creación créate-process. En este servicio, el solicitante se denomina proceso padre, y los procesos creados, procesos hijos; se establece así una jerarquía de creación de procesos en árbol. En esta generación siempre haba un primer proceso, denominado proceso raíz, que se inicializará con el arranque del sistema operativo. Por ejemplo, en Windows, el árbol de procesos simplificado responde al esquema siguiente
El proceso system será el proceso raíz en Windows, generando
durante el arranque del sistema conjuntamente con el proceso Idle, creado cuando la CPU no gestiona ningún proceso. A partir del proceso System, se genera otra serie de procesos para el funcionamiento del sistema operativo, como Smss, Csrss, Winlogon, Services o Lsass, que permanecerán en ejecución mientras el dispositivo esté en funcionamiento. A partir del proceso Winlogon, cunado un usuario inicia sesión se crea el proceso Userinit, que ejecuta su perfil de usuario, y a la vez se inicia el proceso Explorer, que ejecuta toda la interfaz de usuario del sistema operativo. A partir del proceso Explorer, se genera el resto de procesos en función de los programas y servicios que se ejecuten durante el empleo del dispositivo. Cuando se produce una ejecución de procesos para la ejecución un programa, cada proceso puede necesitar intercambiar datos con el resto, por lo que entre ellos existen mecanismos básicos de comunicación. Son de dos tipos:
- Comunicación de procesos mediante memoria compartida: en
este mecanismo de comunicación, los procesadores comparten el mismo espacio de direcciones de memoria al utilizar servicios del sistema operativo. De esta forma, cada proceso puede acceder directamente a los datos de otros mediante operaciones de escritura y lectura. - Comunicación de procesos mediante paso de mensajes: Cada procesador dispone de su propia memoria independiente, y el intercambio de datos se realiza mediante peticiones y respuestas, servicios conocidos como send y receive, que intercambian bloques de información entre los procesos.
Respecto a la sincronización de los procesos, la comunicación entre
ellos puede ser síncrona y asíncrona:
- Síncrona: En este caso, los dos procesos han de ejecutar
servicios de forma simultánea: el emisor ha de ejecutar el servicio Send, mientras el receptor ejecuta receive. - Asíncrona: En este otro caso, el emisor hace el envío y prosigue su ejecución; en este instante, el sistema operativo ofrece un almacenamiento intermedio para guardar la información enviada hasta que el recepto la solicite.
Gestión de procesos
La gestión de procesos depende de cada sistema operativo; por
ejemplo, en Windows, los procesos se crean mediante la llamada a la función CreateProcess, que crea y carga el proceso con una dependencia padre-hijo. Para la gestión del proceso, CrateProcess dispone de una serie de parámetros que controlan el programa que hay que ejecutar, atributos de seguridad, bits de control de archivos abiertos, prioridad, especificación de la ventana que se creará y un apuntador a una estructura que devuelve a su invocador información sobre el proceso recién creado. La función CreateProcess es implementada en las aplicaciones nativas para Windows con el método CreateProcess() en su código, como las escritas en C++. Para la finalización de los procesos en Windows, se realiza la llamada a la función ExitProcess, mediante la cual todos los hilos del proceso son informados de su destrucción y se liberan los recursos consumidos. En el caso de los sistemas operativos basados en Unix, la creación y destrucción de procesos se determina mediante una filosofía de sencillez, de forma que las llamadas al sistema tienen el mínimo número de parámetros. Las llamadas correspondientes a la creación, la destrucción y el bloqueo o la espera de un proceso son, respectivamente, Fork, Exit y Wait. La llamada Fork crea un nuevo proceso hijo, idéntico al proceso padre, conla misma imagen de memoria, el mismo bloque de control de proceso y los mismos archivos abiertos , aunque situados en distintos espacios de la memoria. Para poder distinguir ambos procesos la llamada Fork devuelve distintos valores; el hijo recibe un valor 0 y el padre el PID del hijo, siendo el PID un número de identificación único de cada proceso. La llamada Exit, finaliza el proceso. Cauindo se proooduce la finalización de un proceso hijo, se manda al sistema la llamada Wait para que el padre se bloquee a la espera de la finalización del hijo. Si el proceso hijo finaliza antes de que el padre reciba esta llama, el proceso hijo se convertirá en un proceso zombi, y hasta que no se ejecute la llamada wait, no se eliminará.
Comandos para la gestión de procesos
La gestión de procesos por parte de los administradores de un
sistema puede ser llevada a cabo mediante una serie de comandos que se ejecutan en la consola del sistema, ya sea en sistemas operativos propietarios, como Windows o libres como Linux. Para conocer las opciones disponibles de cada comando, se puede teclear “man” y el nombre del comando, ej: man ps.
Para conocer los procesos en ejecución en Linux se usa el comando
ps, dentro de este comando existen varias opciones como ps aux, que muestra todos los procesos del sistema, para que nos muestre el árbol jerárquico con la ruta a la que pertenece el sistema usaremos comando ps axjf. El gestor de procesos se lanza usando el comando top, para verlo con detalle, como los usuarios y recursos empleados se usa el comando top -o %CPU; también podemos destruir un proceso usando el comando kill (y el nombre del proceso) o finalizar todos los procesos de un programa usando killall (nombre del programa). Ene l caso de Windows para obtener el listado de los procesos usaremos el comando taklist </opciones>, para que los muestre con detalle usaremos tasklist /v, para comprobar los servicios de cada proceso usaremos tasklist /svc para destruir procesos individuales usaremos el comando taskkill /pid y para finalizar un programa completo usaremos taskkill /f /im (nombre del ejecutale.exe).
Herramientas gráficas para la gestión de procesos
De la misma forma que se puede emplear la consola para gestionar
procesos, los sistemas operativos suelen incorporar herramientas gráficas para la gestión de los procesos. Ubuntu (Linux) usa el programa Monitor del sistema, para gestionar todos los procesos en ejecución, la ruta para iniciar esta herramienta es Sistema/ administración /Monitor del sistema y se inicia con un cuadro de diálogo en la que la gestión de procesos se lleva a cao en la pestaña procesos. Además, incluye herramientas de monitorización de otros aspectos del equipo. Para Windows se usa el Administrador de tareas, también ofrece información adicional acerca del rendimiento de los recursos empleados por los procesos. Mac OS, también dispone de una herramienta similar llamada Monitor de actividad.