Tema 1.
Programación multiproceso
Módulo de Programación de servicios y procesos.
Programas y procesos
Programas y procesos
Estados de un proceso
Monotarea, multitarea y
multiprocesador
Supuesto
Se quieren ejecutar 3 tareas.
● La tarea A tardará 4 tiempos en
ejecutarse.
● La tarea B tardará 3 tiempos en
ejecutarse.
● La tarea C tardará 5 tiempos en
ejecutarse.
Monotarea
La monotarea, en el contexto de un sistema operativo, se refiere a la capacidad de ejecutar una
sola tarea o programa a la vez. En un sistema monotarea, el sistema operativo no es capaz de
manejar múltiples aplicaciones o procesos simultáneamente. Cuando un programa está en
ejecución, debe completarse o cerrarse antes de que otro programa pueda ejecutarse.
Ejemplo de ejecución de 3 procesos con monotarea:
Multitarea
La multitarea se refiere a la capacidad de un sistema para ejecutar múltiples tareas o procesos
de manera aparentemente simultánea. Esto significa que varios programas o aplicaciones
pueden ejecutarse al mismo tiempo, compartiendo los recursos de la computadora, como la
CPU, la memoria y los dispositivos de entrada/salida.
Ejemplo de ejecución de 3 procesos con multitarea:
Factores que intervienen en la Multitarea
El planificador se encarga de decidir qué tarea se ejecutará primero. El planificador utiliza
algoritmos de programación para determinar qué proceso debe recibir el control del CPU en
función de diversos factores, como la prioridad de la tarea, el quantum asignado y el estado
actual de los procesos en ejecución.
El quantum es la cantidad de tiempo durante la cual un proceso o tarea tiene acceso al
procesador antes de que se le pueda interrumpir y asignar el tiempo de CPU a otra tarea.
Cuando un sistema operativo realiza un cambio de contexto, significa que está cambiando de
la ejecución de un proceso a otro. Esto implica guardar el estado actual de un proceso (registros,
variables, punteros de instrucciones, etc.) en memoria y cargar el estado del siguiente proceso
que debe ejecutarse.
Multiprocesador
La multiprocesador se refiere a la capacidad de un sistema operativo y hardware para
aprovechar y gestionar múltiples unidades de procesamiento. Esto permite que múltiples
procesadores trabajen en paralelo para realizar tareas y ejecutar programas, lo que puede
aumentar significativamente la capacidad de procesamiento.
Ejemplo de ejecución de 3 procesos con multiprocesador:
Gestión de procesos
Creación de procesos en Java
● La clase Runtime
● La clase ProcessBuilder
La clase Runtime
1. Obtener una Instancia de Runtime
2. Ejecutar Comandos del Sistema
La clase Runtime
3. Obtener la Salida del Proceso
La clase Runtime
4. Esperar a que el proceso termine
La clase ProcessBuilder
1. Importar la clase.
Debes importar la clase [Link]
2. Crear una instancia de ‘ProcessBuilder’
ProcessBuilder builder = new ProcessBuilder("comando",
"argumento1", "argumento2");
La clase ProcessBuilder
3. Iniciar el proceso.
Usando el método start().
4. Capturar la salida del proceso
Si deseas leer la salida estándar del proceso, puedes obtener una
instancia de ‘Process’ utilizando el método ‘start()’ y luego utilizar
métodos como ‘getInputStream()’ para leer la salida del proceso.
La clase ProcessBuilder
5. Esperar a que el proceso termine
Puedes esperar a que el proceso termine utilizando el método
‘waitFor()’. Esto bloqueará la ejecución de tu aplicación hasta que
el proceso haya finalizado.
Planificación de Procesos
La planificación de procesos determina cómo se asigna el tiempo de CPU a los
diferentes programas y procesos que se ejecutan en una computadora.
● Colas de procesos
○ Listos para ejecutarse.
○ En ejecución.
○ Bloqueados esperando recursos.
● Planificación de CPU
○ Por prioridad
○ Por turnos
○ Prioridad con retroalimentación
Comunicación Entre Procesos
La comunicación entre procesos es un concepto fundamental en
la programación de sistemas operativos y entornos multitarea.
Permite que dos o más procesos intercambien información, datos
o señales, lo que facilita la colaboración y la coordinación entre
ellos.
Comunicación Entre Procesos: Pipes (Tuberías)
● Pipes (Tuberías). Un proceso puede escribir datos en un extremo del pipe, y
otro proceso puede leer esos datos desde el otro extremo.
Comunicación Entre Procesos: Memoria Compartida
● Memoria Compartida. Es un mecanismo que permite a varios procesos acceder a
una región de memoria compartida. Los procesos pueden leer y escribir en esta
memoria compartida para compartir datos de manera eficiente.
Comunicación Entre Procesos: Colas de Mensajes
● Colas de Mensajes. Permiten a los procesos enviar y recibir mensajes entre ellos.
Los mensajes pueden contener información estructurada y se almacenan en una
cola para su procesamiento por parte de otros procesos.
Sincronización Entre Procesos
La sincronización entre procesos implica coordinar la ejecución
de varios procesos para evitar conflictos, condiciones de carrera y
garantizar un acceso seguro a recursos compartidos.
Sincronización Entre Procesos: Semáforos
● Semáforos. Son variables especiales que se utilizan para sincronizar el acceso a
recursos compartidos por parte de múltiples procesos. Los procesos pueden
esperar en un semáforo hasta que se cumpla cierta condición antes de continuar.
Sincronización Entre Procesos: Mutex
● Mutex (Mutual Exclusion). Es un mecanismo de bloqueo que permite que solo un
proceso a la vez acceda a un recurso compartido. Otros procesos que intenten
acceder deben esperar hasta que el proceso actual libere el mutex.
Es un tipo de semáforo binario con dos operaciones:
lock()
unlock()
Comandos para la Gestión de Procesos
Tarea Linux Windows
Lista de procesos en ps tasklist
ejecución
Uso de recursos por top
procesos
Finalizar un proceso kill taskkill
Cambiar la prioridad renice
Programación Concurrente y
Paralela
Programación concurrente y paralela
Programación concurrente Programación paralela
Ejecución de múltiples tareas de manera Ejecución simultánea de múltiples tareas en
intercalada en el tiempo varios núcleos o procesadores
Compartición de recursos y datos entre Los subprocesos no necesariamente
procesos o hilos dentro del mismo programa. comparten la misma memoria y recursos.
Requiere técnicas de sincronización para Requiere menos sincronización que la
evitar condiciones de carrera y garantizar programación concurrente, pero puede
una ejecución ordenada. implicar problemas de comunicación entre
subprocesos.