Ciclos Formativos de Grado Superior
Programación de Servicios y Procesos
` Concepto básicos
` Programación concurrente
` Funcionamiento básico del Sistema Operativo
` Estados de un proceso
` Planificación de procesos
` Gestión de procesos
` C
Comunicación
i ió d
de procesos
` Sincronización de procesos
` Programación multiproceso
Alberto Sánchez Campos
Jesús Montes Sánchez
` PROGRAMA
o Toda la información (tanto código como datos) almacenada en disco de una
aplicación que resuelve una necesidad concreta para los usuarios.
` PROCESO
o Programa en ejecución. Este concepto no se refiere únicamente al código y
a los datos, sino que incluye todo lo necesario para su ejecución:
ó
• Contador de programa.
• Imagen de memoria.
• Estado
E t d ddell procesador.
d
` EJECUTABLE
o Fichero que contiene la información necesaria para crear un proceso a partir
de los datos almacenados de un programa.
Alberto Sánchez Campos
Jesús Montes Sánchez
` DEMONIO
o Proceso no interactivo que está ejecutándose continuamente en segundo plano.
Suele proporcionar un servicio básico para el resto de procesos.
` SISTEMA OPERATIVO
o Programa que hace de intermediario entre el usuario y las aplicaciones
que utiliza y el hardware del ordenador. Entre su funcionalidad.
• Hace de interfaz entre el usuario y los recursos del ordenador.
• Permite utilizar los recursos del computador de forma eficiente.
• Ejecuta los programas del usuario
usuario.
Alberto Sánchez Campos
Jesús Montes Sánchez
` Actualmente se pueden tener en ejecución al mismo tiempo múltiples
tareas interactivas en:
o Un único procesador (multiprogramación)
(multiprogramación).
• Si solamente existe un único procesador, solamente un proceso
puede estar en un momento determinado en ejecución.
• El sistema operativo se encarga de cambiar el proceso en
ejecución después de un período corto de tiempo (del orden de
milisegundos) creando en el usuario la percepción de que
p
múltiples p
programas
g se están ejecutando
j al mismo tiempo
p
(programación concurrente).
• La programación concurrente no mejora el tiempo de ejecución
global de los p
g programas
g yya q
que se ejecutan
j intercambiando unos
por otros en el procesador. Sin embargo, permite que varios
programas parezca que se ejecuten al mismo tiempo.
Alberto Sánchez Campos
Jesús Montes Sánchez
o Varios núcleos en un mismo procesador (multitarea)
(multitarea).
• Cada núcleo podría estar ejecutando una instrucción diferente al
mismo tiempo.
• El sistema
i t operativo
ti se encarga ded planificar
l ifi llos ttrabajos
b j que se
ejecutan en cada núcleo y cambiar unos por otros para generar
multitarea.
• Todos
T d los l cores comparten
t la
l misma
i memoria i por llo que es posible
ibl
utilizarlos de forma coordinada (programación paralela).
• La programación paralela permite mejorar el rendimiento de un
programa ya que permite que se ejecuten varias instrucciones a la
vez.
Alberto Sánchez Campos
Jesús Montes Sánchez
o Varios ordenadores distribuidos en red
red.
• Cada uno de los ordenadores tendrá sus propios procesadores y su
propia memoria (programación distribuida).
• La
L programación ió di
distribuida
t ib id posibilita
ibilit lla utilización
tili ió d
de un gran número
ú
de dispositivos de forma paralela, lo que permite alcanzar elevadas
mejoras en el rendimiento de la ejecución de programas distribuidos.
• Como
C cada
d ordenador
d d posee su propia i memoria, i iimposibilita
ibilit que llos
procesos puedan comunicarse fácilmente, teniendo que utilizar otros
esquemas de comunicación más complejos y costosos a través de la
red que los interconecte
interconecte.
Alberto Sánchez Campos
Jesús Montes Sánchez
` KERNEL
o Parte central del sistema operativo responsable de gestionar los
recursos del ordenador, permitiendo su uso a través de llamadas al
sistema.
• Parte pequeña del sistema operativo, si la comparamos con lo necesario para
implementar su interfaz.
• A todo lo demás del sistema operativo se le denomina programas del sistema.
o Funciona en base a interrupciones. Una interrupción es una suspensión
temporal de la ejecución de un proceso, para pasar a ejecutar una rutina
que trate dicha interrupción.
interrupción
1. Cuando salta una interrupción se transfiere el control a la rutina de
tratamiento de la interrupción.
2. Mientras se está atendiendo una interrupción, se deshabilita la llegada de
nuevas interrupciones.
3. Cuando finaliza la rutina, se reanuda la ejecución del proceso en el mismo
lugar donde se quedó cuando fue interrumpido.
Alberto Sánchez Campos
Jesús Montes Sánchez
` LLAMADAS AL SISTEMA
o Interfaz que proporciona el kernel para que los programas de usuario
puedan hacer uso de forma segura de determinadas partes del sistema.
` MODO DUAL
o Característica del hardware que permite al sistema operativo protegerse
protegerse.
o El procesador tiene dos modos de funcionamiento
• 0. Modo kernel , llamado “modo supervisor” o “modo privilegiado”.
• 1.
1 Modo usuario.
usuario Utilizado para la ejecución de programas de usuario
usuario.
Alberto Sánchez Campos
Jesús Montes Sánchez
` Los procesos pueden cambiar de estado a lo largo de su ejecución.
` Se definen los siguientes estados:
o Nuevo: el proceso está siendo creado a partir del fichero ejecutable.
o Listo: el proceso no se encuentra en ejecución aunque está
preparado para hacerlo. El sistema operativo no le ha asignado
todavía un procesador para ejecutarse.
o En ejecución: el proceso se está ejecutando. El sistema operativo
utiliza el mecanismo de interrupciones para controlar su ejecución. .
o Bloqueado: el proceso está bloqueado esperando que ocurra algún
suceso. Cuando ocurre el evento que lo desbloquea, el proceso no
pasa directamente a ejecución sino que tiene que ser planificado de
nuevo por el sistema.
sistema
o Terminado: el proceso ha finalizado su ejecución y libera su imagen
de memoria.
Alberto Sánchez Campos
Jesús Montes Sánchez
Alberto Sánchez Campos
Jesús Montes Sánchez
` Los procesos se van intercambiando el uso del
procesador para su ejecución de forma concurrente.
` Para ello,, el sistema operativo
p organiza
g los p
procesos en
varias colas, migrando los procesos de unas a otras:
o Cola de procesos: contiene todos los procesos del
sistema.
o Cola de procesos preparados: contiene todos los
procesos listos
li t esperando
d para ejecutarse.
j t
o Cola de dispositivo: por cada dispositivo una cola
diferente que contiene los procesos que están a la
espera de alguna operación de E/S.
Alberto Sánchez Campos
Jesús Montes Sánchez
` El p
planificador
a cado es e el e
encargado
ca gado de se seleccionar
ecc o a los
os movimientos
o e tos de
procesos entre las diferentes colas.
` Dos tipos de planificación:
o A corto plazo:
p
• Selecciona qué proceso de la cola de procesos preparados pasará
a ejecución.
• Se invoca del orden de milisegundos, cuando se produce un
cambio
bi dde estado
t d d dell proceso en ejecución.
j ió
• Decisión rápida: algoritmos de planificación sencillos.
o A largo plazo:
• Selecciona qué procesos nuevos deben pasar a la cola de
procesos preparados.
• Se invoca con poca frecuencia, por lo que puede tomarse más
tiempo en tomar la decisión.
• Controla el grado de multiprogramación (número de procesos en
memoria).
Alberto Sánchez Campos
Jesús Montes Sánchez
` Planificación a corto plazo:
o Planificación sin desalojo o cooperativa.
• Únicamente se cambia el proceso en ejecución si dicho proceso se bloquea o
t
termina.
i
o Planificación apropiativa.
• Se cambia el proceso en ejecución si en cualquier momento en que un proceso
se está
tá ejecutando,
j t d otrot proceso con mayor prioridad
i id d se puede
d ejecutar.
j t
• La aparición de un proceso más prioritario se puede deber tanto al desbloqueo
del mismo como a la creación de un nuevo proceso.
o Tiempo compartido:
• cada cierto tiempo (llamado cuanto) se desaloja el proceso que estaba en
ejecución y se selecciona otro proceso para ejecutarse.
• Todas las prioridades de los procesos se consideran iguales
iguales.
Alberto Sánchez Campos
Jesús Montes Sánchez
` Cuando el procesador pasa a ejecutar otro proceso
proceso, el
sistema operativo guarda el contexto del proceso actual y
restaurar el contexto del proceso que el planificador a corto
plazo ha elegido ejecutar
ejecutar.
` Se conoce como contexto a:
o Estado del proceso.
o Estado del procesador.
o Información de gestión de memoria.
` La salvaguarda
g de la información del p
proceso en ejecución
j se
produce cuando hay una interrupción.
` El cambio de contexto es tiempo perdido, ya que el
procesador no hace trabajo útil durante ese tiempo y su
duración depende de la arquitectura en concreto del
procesador.
Alberto Sánchez Campos
Jesús Montes Sánchez
` El sistema operativo
p es el encargado
g de crear los
nuevos procesos siguiendo las directrices del usuario.
o La puesta en ejecución de un nuevo proceso se produce debido a
que hay
h un proceso en concreto t que está
tá pidiendo
idi d su creación
ió en
su nombre o en nombre del usuario.
o Cualquier proceso en ejecución (proceso hijo) siempre depende
del proceso que lo creó (proceso padre), estableciéndose un
vínculo entre ambos. A su vez, el nuevo proceso puede crear
nuevos pprocesos,, formándose lo q
que se denomina un árbol de
procesos.
Alberto Sánchez Campos
Jesús Montes Sánchez
` Operaciones básicas:
o Creación de procesos. Cuando se crea un nuevo proceso hijo,
ambos procesos, padre e hijo se ejecutan concurrentemente.
• Ambos procesos comparten la CPU y se irán intercambiando
siguiendo la política de planificación del
• Si el proceso padre necesita esperar hasta que el hijo termine su
ejecución puede hacerlo mediante la operación wait.
ejecución, wait
• Los procesos son independientes y tienen su propio espacio de
memoria asignado, llamado imagen de memoria.
o Terminación de procesos. Al terminar la ejecución de un proceso, es
necesario avisar al sistema operativo de su terminación para liberar
los recursos que tenga asignados.
• En general, es el propio proceso el que le indica al sistema
mediante la operación exit que quiere terminar, pudiendo
aprovechar
ap o ec a para
pa a mandar
a da información
o ac ó de su finalización
a ac ó a al pad
padre.
e
Alberto Sánchez Campos
Jesús Montes Sánchez
` Creación de hilos en Java:
o La clase que representa un proceso en Java es la clase Process.
o Los métodos de ProcessBuilder.start() y Runtime.exec() crean un
proceso nativo en el sistema operativo
p p subyacente
y y devuelven una de la
clase Process que puede ser utilizado para controlar dicho proceso.
` El método start() inicia un nuevo proceso utilizando los atributos
indicados en el objeto. El nuevo proceso ejecuta el comando y los
argumentos indicados en el método command(), ejecutándose en el
j especificado
directorio de trabajo p por directory(),
p y(), utilizando las
variables de entono definidas en environment()
` El método exec(cmdarray, envp, dir) ejecuta el comando
especificado y argumentos en cmdarray en un proceso hijo
independiente con el entorno envp y el directorio de trabajo
especificado en dir
Alberto Sánchez Campos
Jesús Montes Sánchez
import java.io.IOException;
import java.util.Arrays;
public class RunProcess {
public static void main(String[] args) throws IOException {
if (args.length
( l h <= 0) {
System.err.println("Se necesita un programa a ejecutar");
System.exit(-1);
}
ProcessBuilder pb = new ProcessBuilder(args);
try {
Process process = pb.start();
int retorno = process.waitFor();
System.out.println("La ejecución de " +
Arrays.toString(args) + " devuelve " + retorno);
}catch(IOException ex){
System.err.println("Excepción de E/S!!");
System.exit(-1);
}catch(InterruptedException ex){
System.err.println("El proceso hijo finalizó
de forma incorrecta");
System.exit(-1);
}
}
}
Alberto Sánchez Campos
Jesús Montes Sánchez
` El proceso hijo realizará su ejecución completa terminando y
liberando sus recursos al finalizar.
` Esto se produce cuando el hijo realiza la operación exit para
fi li
finalizar su ejecución.
j ió
` Un proceso padre puede además terminar de forma abrupta un
proceso hijo
p j q
que creó mediante la operación
p destroyy
o Esta operación elimina el proceso hijo indicado liberando sus recursos
en el sistema operativo subyacente.
o En Java, los recursos correspondientes los eliminará el garbage collector
cuando considere.
Alberto Sánchez Campos
Jesús Montes Sánchez
import java.io.IOException;
public class RuntimeProcess {
public static void main(String[]
( g args)
g ){
if (args.length <= 0) {
System.err.println("Se necesita un programa a ejecutar");
System exit( 1);
System.exit(-1);
}
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(args);
process.destroy();
}}catch(IOException
( ex){
){
System.err.println("Excepción de E/S!!");
System.exit(-1);
}
}
}
Alberto Sánchez Campos
Jesús Montes Sánchez
` Un proceso recibe información,
información la transforma y produce resultados
mediante su:
o Entrada estándar (stdin): lugar de donde el proceso lee los datos de
entrada que requiere para su ejecución
ejecución.
• Normalmente es el teclado.
• No se refiere a los parámetros de ejecución del programa.
oS
Salida
lid estándar
tá d (stdout):
( td t) sitio
iti ddonde
d ell proceso escribe
ib llos resultados
lt d
que obtiene.
• Normalmente es la pantalla.
o Salida de error (stderr): sitio donde el proceso envía los mensajes de
error.
• Habitualmente es el mismo que la salida estándar, pero puede especificarse
t lugar,
que sea otro l ó
cómo un fifichero.
h
Alberto Sánchez Campos
Jesús Montes Sánchez
` En Java,
Java el proceso hijo no tiene su propia interfaz de
comunicación, por lo que el usuario no puede comunicarse con él
directamente.
` Stdi stdout
Stdin, td t y stderr
td están
tá redirigidas
di i id all proceso padre
d a ttravés
é dde
los flujos de datos:
o OutputStream: flujo de salida del proceso hijo.
• El stream está conectado por un pipe a la entrada estándar (stdin) del proceso
hijo.
o InputStream: flujo de entrada del proceso hijo.
• El stream está conectado por un pipe a la salida estándar (stdout) del proceso
hijo.
o ErrorStream: flujo de error del proceso hijo.
• El stream está conectado por un pipe a la salida estándar (stderr) del proceso
hijo.
• Por defecto, está conectado al mismo sitio que stdout.
Alberto Sánchez Campos
Jesús Montes Sánchez
` Además de la posibilidad de comunicarse mediante flujos de datos
datos, existen
otras alternativas para la comunicación de procesos:
o Usando sockets.
o Utilizando JNI (Java Native Interface) para acceder desde Java a
aplicaciones en otros lenguajes de programación de más bajo nivel, que
pueden sacar partido al sistema operativo subyacente.
o Librerías de comunicación no estándares entre procesos.
procesos Permiten
aumentar las capacidades del estándar Java para comunicar procesos
mediante:
• Memoria compartida: se establece una región de memoria compartida entre
varios procesos a la cual pueden acceder todos ellos.
• Pipes: permite a un proceso hijo comunicarse con su padre a través de un
canal
ca comunicación
a de co u cac ó sencillo.
se c o
• Semáforos: mecanismo de bloqueo de un proceso hasta que ocurra un evento.
Alberto Sánchez Campos
Jesús Montes Sánchez
` Los métodos de comunicación de procesos se pueden considerar
como métodos de sincronización ya que permiten al proceso padre
llevar el ritmo de envío y recepción de mensajes.
` Ad á de
Además d la
l utilización
tili ió de
d los
l flujos
fl j de
d datos
d t se puede d esperar por
la finalización del proceso hijo mediante la operación wait.
o Bloquea al proceso padre hasta que el hijo finaliza su ejecución
mediante exit.
o Como resultado el padre recibe la información de finalización del
proceso hijo.
• El valor de retorno especifica mediante un número entero, cómo resulto la
ejecución.
• No tiene nada que ver con los mensajes que se pasan padre e hijo a través de
los streams.
• Por convención se utiliza 0 para indicar que el hijo ha acabado de forma
correcta.
Alberto Sánchez Campos
Jesús Montes Sánchez
import java.io.IOException;
import java.util.Arrays;
public class ProcessSincronization {
public static void main(String[] args)
throws IOException,
O InterruptedException {
try{
Process process = new ProcessBuilder(args).start();
i t retorno
int t = process.waitFor();
itF ()
System.out.println("Comando " + Arrays.toString(args) + " devolvió: " + retorno);
} catch (IOException e) {
System out println("Error ocurrió ejecutando el comando:”
System.out.println("Error comando: + e.getMessage());
e getMessage());
} catch (InterruptedException e) {
System.out.println("El comando fue interrumpido. Descripción del error: ” +
e.getMessage());
}
}
}
Alberto Sánchez Campos
Jesús Montes Sánchez
` La programación concurrente es una forma eficaz de procesar la
información al permitir que diferentes sucesos o procesos se vayan
alternando en la CPU para proporcionar multiprogramación.
multiprogramación
` El sistema operativo se encarga de proporcionar multiprogramación
entre todos los procesos del sistema
o Oculta esta complejidad tanto a los usuarios como a los desarrolladores.
` Si se pretende realizar procesos que cooperen entre sí, debe ser el
propio desarrollador quien lo implemente utilizando comunicación y
sincronización de procesos.
Alberto Sánchez Campos
Jesús Montes Sánchez
` Fases:
F
o Descomposición funcional. Identificar previamente las diferentes
cosas que debe realizar la aplicación y las relaciones existentes
entre ellas.
o Partición. Distribución de las diferentes funciones en procesos
estableciendo el esquema de comunicación entre los mismos.
• La comunicación entre procesos requiere una pérdida de tiempo tanto de
comunicación como de sincronización.
j
• El objetivo debe ser maximizar la independencia
p entre los p
procesos
minimizando la comunicación entre los mismos.
o Implementación. En este caso, Java permite únicamente métodos
sencillos de comunicación y sincronización de p
procesos p
para realizar
la cooperación.
Alberto Sánchez Campos
Jesús Montes Sánchez