0% encontró este documento útil (0 votos)
4 vistas7 páginas

TEMA 2

Cargado por

Micaela
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descargue como DOCX, PDF, TXT o lea en línea desde Scribd
Descargar como docx, pdf o txt
0% encontró este documento útil (0 votos)
4 vistas7 páginas

TEMA 2

Cargado por

Micaela
Derechos de autor
© © All Rights Reserved
Formatos disponibles
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.

También podría gustarte