Programación y Gestión de Procesos
Programación y Gestión de Procesos
1 Programación de
Procesos
DOCUMENTO1
ÍNDICE
MOTIVACIÓN................................................................... 3
PROPÓSITOS .................................................................. 4
PREPARACIÓN PARA LA UNIDAD ....................................... 5
1. INTRODUCCIÓN ...................................................... 7
2. PROGRAMACIÓN CONCURRENTE ..................... 10
3. FUNCIONAMIENTO BÁSICO DEL SISTEMA
OPERATIVO ............................................................ 12
4. PROCESOS ............................................................ 14
4.1. ESTADOS DE UN PROCESO .................................................... 14
4.2. COLAS DE PROCESOS ........................................................... 15
4.3. PLANIFICACIÓN DE PROCESOS............................................... 16
4.4. CAMBIO DE CONTEXTO .......................................................... 17
5. GESTIÓN DE PROCESOS ..................................... 18
5.1. ÁRBOL DE PROCESOS............................................................... 18
5.2. OPERACIONES BÁSICAS CON PROCESOS ................................... 19
6. COMUNICACIÓN DE PROCESOS ......................... 23
7. SINCRONIZACIÓN DE PROCESOS ...................... 27
7.1. ESPERA DE PROCESOS (OPERACIÓN WAIT) ............................... 27
8. PROGRAMACIÓN MULTIPROCESO ..................... 29
8.1. CLASE PROCESS ..................................................................... 30
CONCLUSIONES ............................................................ 31
1
RECAPITULACIÓN .......................................................... 32
PROPUESTAS DE AMPLIACIÓN ........................................ 33
BIBLIOGRAFÍA................................................................ 35
2
MOTIVACIÓN
A día de hoy, vivimos en un mundo en el que los dispositivos electrónicos, como
los ordenadores o teléfonos móviles, son capaces de realizar más de una tarea a
la vez. Veremos el funcionamiento de los sistemas operativos, que contienen
estos dispositivos y lo relativo a la ejecución de diferentes programas. También,
veremos el concepto de proceso, viéndolo como un programa en ejecución y
como gestiona uno o varios procesos a la vez el sistema operativo, lo que deno-
minaremos como concurrencia de procesos o multiprogramación.
3
PROPÓSITOS
En esta unidad se trata de …
4
PREPARACIÓN PARA LA UNIDAD
Para estudiar esta unidad necesitas conocer:
5
1. INTRODUCCIÓN
Para poder entender la idea de la concurrencia o multiprogramación, es impres-
cindible adquirir ciertos conceptos.
7
Sistema operativo: programa que hace de intermediario entre el
usuario y las aplicaciones que utiliza y el hardware del ordena-
dor. Entre sus objetivos, se pueden destacar:
Utilizar los recursos del computador de forma eficiente. Los recursos del
ordenador son compartidos tanto por los programas como por los diferen-
tes usuarios. El sistema operativo es el encargado de repartir los recursos
en función de sus políticas a aplicar.
8
Figura 1. Sistema operativo como intermediario entre aplicaciones
Podemos mirar más información sobre este tema en internet ya que exis-
ten una gran cantidad de documentos.
9
2. PROGRAMACIÓN
CONCURRENTE
La programación concurrente se identifica por el hecho de permitir simultá-
neamente varios procesos en ejecución, por consecuente permite hacer varias
tareas en el mismo tiempo unos claros ejemplos de esto es consumir multimedia
radio tv, Pensad en todo el tiempo que perderíamos si todas esas tareas se tu-
vieran que realizar una tras otra. Estas tareas se pueden iniciar:
El sistema operativo, al igual que para un único procesador, se tiene que ocupar
de asignar las tareas que se ejecutan en cada núcleo y cambiar unos procesos
por otros habilitándose así la multitarea. En este caso todos los cores comparten
10
la misma memoria por lo que es posible utilizarlos de forma coordinada mediante
la llamada y conocida programación paralela.
http://pegasus.javeriana.edu.co/~scada/concurrencia.html
https://es.slideshare.net/percyjavier/programacion-concurrente-presentation
https://www.youtube.com/watch?v=zcGsAFATYP0
11
3. FUNCIONAMIENTO BÁSICO
DEL SISTEMA OPERATIVO
El núcleo del ordenador que tiene la funcionalidad básica del S.O. se llama Ker-
nel. Es una parte software pequeña del sistema operativo, si la comparamos con
lo necesario para implementar su interfaz (y más hoy en día que es muy visual).
A todo lo demás del sistema se le denomina programas del sistema. El kernel
es el encargado de administrar los recursos de que disponga el ordenador, per-
mitiendo su uso a través de peticiones llamadas “peticiones al sistema”.
Las interfaces que proporciona el núcleo o kernel para que los programas crea-
dos por el usuario accedan al sistema son implementadas con el nombre de lla-
madas al sistema. Los errores de un programa podrían afectar a otros progra-
mas o al propio sistema operativo, por consecuente para asegurar la ejecución
de la forma óptima, el sistema incluye una interfaz de llamadas para evitar que
ciertas sentencias conflictivas sean por el usuario ejecutadas.
12
El modo dual es un atributo del hardware que da la función al sistema operativo
de protegerse. El procesador tiene dos formas de funcionamiento indicados en
un bit:
13
4. PROCESOS
Como ya se ha explicado, el que se encarga de administrar procesos es el S.O.
a medida que se ejecuta un proceso, pasando por varios estados. Cuando un
proceso cambia su estado es debido también al S.O.
https://es.wikipedia.org/wiki/Proceso_(inform%C3%A1tica)
https://www.youtube.com/watch?v=GgDxlVbOmYI
14
Bloqueado: el proceso está bloqueado esperando que ocurra algún su-
ceso (esperando por una operación de E/S, bloqueado para sincronizar-
se con otros procesos, etc.). Cuando ocurre el evento que lo desblo-
quea, el proceso no pasa directamente a ejecución, sino que tiene que
ser planificado de nuevo por el sistema.
Algunos procesos pueden pasar por más estados, pero los más comunes y es-
tandarizados son los explicados anteriormente.
15
En ese momento, las colas de procesos serán las siguientes:
En ejecución P3
Preparados P5 P4
E/S Disco P1
E/S Red P2
(En ese momento supongamos que el proceso 3 realiza una petición de E/S te-
niendo que esperar por el disco duro. Dibuja el estado de las colas correspon-
dientes e identifica cuál sería el proceso que se ejecutará utilizando la filosofía
FIFO para sacar los procesos de las colas.
– Planificación apropiativa.
Se sucede cuando un proceso con más prioridad que el actual to-
ma la ejecución del proceso con más prioridad esto sucede por un
desbloqueo del propio proceso antes bloqueado o la instanciación
de uno nuevo.
16
Largo plazo: escoge que procesos han de ser incluidos en la cola de
procesos en estado preparado, se ejecuta una vez cada bastante tiem-
po, dando a más tiempo a la hora de seleccionar que procesos deben
ser incluidos.
17
5. GESTIÓN DE PROCESOS
5.1. ÁRBOL DE PROCESOS
El sistema operativo que se encarga de administrar e iniciar los instanciados
procesos siguiendo las indicaciones del usuario. Así, cuando un usuario quiere
abrir un programa, el sistema operativo es el responsable de crear y poner en
ejecución el proceso correspondiente que lo ejecutara. Aunque el responsable
del proceso de creación es el sistema operativo, ya que es el único que puede
acceder a los recursos del ordenador, el nuevo proceso se crea siempre por pe-
tición de otro proceso. La puesta en ejecución de un nuevo proceso se produce
debido a que hay un proceso en concreto que está pidiendo su creación en su
nombre o en nombre del usuario.
En este sentido, cualquier proceso en ejecución mantiene una relación con el
proceso que lo creo, estableciéndose una relación entre los procesos. A su vez,
el nuevo proceso le es permitido crear nuevos procesos, con lo que da resultado
a un árbol de procesos. Cuando se arranca el ordenador, y se carga e memoria
el kernel del sistema a partir de su imagen en disco se crea el proceso inicial del
sistema. A partir de este proceso, se crea el resto de procesos de forma jerárqui-
ca, estableciendo padres, hijos, abuelos, etc.
18
Ejemplo de algunos procesos y sus identificadores,
0 Kernel_task
1 Launchd
113 Mds
158 Windowserver
138 Coreservicesd
48054 Diskimages-helper
115 Loginwindow
45649 Fseventsd
301 Coreaudiod
55644 Cupsd
15 Configd
49045 eapolclient
19
Cuando se crea un nuevo proceso tenemos que saber que padre e hijo se ejecu-
tan concurrentemente. Ambos procesos comparten la CPU y se irán intercam-
biando siguiendo la política de planificación del sistema operativo para propor-
cionar multiprogramación. Si el proceso padre necesita esperar hasta que el hijo
termine su ejecución para poder continuar la suya con los resultados obtenidos
por el hijo, puede hacerlo mediante la operación wait.
Como se ha visto al inicio del capítulo, los procesos son independientes y tienen
su propio espacio de memoria asignado, llamado imagen de memoria. Hijos y
Padres ambos dos son procesos, aunque compartan un vínculo, conservan esta
particularidad.
El proceso hijo tiene dependencia tanto del proceso padre como del sistema
operativo. Por consecuente el padre es quien decide cuando finaliza la ejecución
de su proceso hijo. Entre estos motivos podría darse que el hijo excediera el uso
de algunos recursos o que la funcionalidad asignada al hijo ya no sea necesaria
por algún motivo.
20
Para ello puede utilizar la operación destroy. Esta relación de dependencia entre
padre e hijo, lleva a casos como que, si el padre termina, en algunos sistemas
operativos no se permita que sus hijos continúen la ejecución, produciéndose lo
que se denomina “terminación en cascada”.
21
b) No tener permisos de ejecución.
c) No ser un ejecutable válido en el sistema.
En la mayoría de los casos, se lanza una excepción dependiente del sis-
tema en concreto, pero siempre será una subclase de IOException.
Terminación de los procesos (destroy)
Un proceso puede finalizar a un proceso hijo en cualquier momento. Para
ello el padre tiene como recurso la sentencia “destroy”. Dicha sentencia bo-
rra el proceso hijo, liberando sus recursos en el sistema operativo subya-
cente. En caso de Java, los recursos correspondientes los eliminará el
garbage collector cuando considere.
Si no se fuerza la finalización de la ejecución del proceso hijo de forma
anómala, el proceso hijo realizará su ejecución completa terminando y libe-
rando sus recursos al finalizar. Esto se produce cuando el hijo realiza la
operación exit para finalizar su ejecución.
22
6. COMUNICACIÓN DE
PROCESOS
Como ya sabemos, un proceso es un programa en ejecución y por lo tanto, cap-
tura información, la modifica y fabrica resultados. Esto es manipulado a través
de:
Si queremos manejarnos con los procesos además del lenguaje java con-
viene aprender el lenguaje de programación c puesto que está más cer-
cano al sistema operativo y sus procesos.
La salida estándar (stdout): en donde el proceso guarda los datos que adquie-
re y está preparado a mostrar. Habitualmente la pantalla del ordenador, aun
siendo válidos la impresora u otro proceso que necesite, esos datos, como en-
trada estándar. La escritura de los datos que se realice en un programa (por
ejemplo, mediante printf en C o System.out.println en Java) se produce por la
salida estándar.
En casi cualquier S.O. las entradas y salidas en un proceso son una copia idénti-
23
ca de las entradas y salidas de las que dispone el proceso padre. Es decir, un
proceso padre que lee de un fichero y escribe en fichero, el proceso hijo escribirá
y leerá de fichero, teniendo en cuenta el lenguaje Java no da atributos al proceso
hijo, con lo cual no es posible directamente la comunicación con él, pero sí que
se pueden ver maneras de comunicaciones con los distintos flujos del hijo hacia
el padre.
Para hacerlo más simple y fácil de distinguir se puede verlos por separado, exis-
te el método redirectErrorStream(boolean), para este propósito, perteneciente a
la clase ProcessBuilder. Si se pasa un valor true como parámetro, los flujos de
datos correspondientes a stderr y stdout en la máquina virtual de JAVA, serán
distintos y cada uno representara su propia salida estándar.
Mediante dichos streams, el padre puede intercambiar datos al hijo para que
este le envíe mensajes de errores en caso de haberlos.
Es conveniente saber que tenemos limitaciones con respecto a que sistema ope-
rativo estemos usando, la capacidad de los buffers de entrada y salida puede
verse con ciertas limitaciones. Por lo tanto, si sucede un error al escribir o leer en
los flujos del hijo puede provocar que el proceso hijo se bloquee. Por eso, en
Java se la comunicación entre padre e hijo se da a través de un buffer utilizando
los streams anteriores.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
24
":");
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
Por último, hay que tener en cuenta cómo se está codificando la información que
se envía y se recibe entre los diferentes procesos. La codificación de la informa-
ción depende del sistema operativo subyacente donde se está ejecutando el
proceso hijo.
GNU Linux, Mac OS, Android, UNIX, iOS, etc. utilizan el formato de codificación
de caracteres UTF-8, que utiliza por debajo el estándar Unicode. Unicode es un
estándar de codificación de caracteres diseñado para facilitar el tratamiento in-
formático, transmisión y visualización de textos de múltiples lenguajes y discipli-
nas técnicas. El término “Unicode” proviene de los tres objetivos perseguidos:
universalidad, uniformidad y unicidad.
Un proceso puede esperar recibir por su entrada estándar los datos con los que
operar en un formato específico. Por ejemplo, si el proceso se crea a partir de un
ejecutable en Unix, la comunicación de datos con el mismo debería producirse
en UTF-8. Si los datos de entrada no contienen caracteres extraños (saltos de
línea, tildes, ñ, etc.), esto no suele ser necesario, pero aun así veremos cómo
puede hacerse.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
public class UnixInteractor {
public static void main(String[] command) {
String line;
//Preparamos el comando a ejecutar
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectErrorStream(true);
try {
//Se crea el Nuevo proceso hijo
Process shell = pb.start();
25
//Se obtiene stdout del proceso hijo
InputStream is = shell.getInputStream();
//Se convierte el formato de UTF-8 al de un String de Java
BufferedReader br = new BufferedReader (new
InputStreamReader(is,”UTF-8”));
System.out.println(“La salida del proceso
hijo” + Arrays.toString(command) + “:” );
//Se muestra la salida del hijo por pantalla
while ((line = br.readLine()) != null) {
System.out.println(line);
}
//Cuando finaliza se cierra el descriptor
//de salida del hijo
is.close();
} catch (IOException e) {
System.out.println(“Error ocurrió ejecutando el comando.
Descripción:” + e.getMessage());
}
}
}
https://www.youtube.com/watch?v=qmCi67TlBWQ
https://es.wikipedia.org/w iki/Comunicaci%C3%B3n_entre_procesos
26
7. SINCRONIZACIÓN DE
PROCESOS
27
InterruptedException). Además se puede solicitar el método exitValue() para re-
cuperar el dato de como finalizo el hijo. El proceso hijo debería haberse termina-
do en otro caso, saltaría la excepción IllegalThreadStateException
import java.io.IOException;
import java.util.Arrays;
https://www.youtube.com/watch?v=cdr-C_rnVFE
28
8. PROGRAMACIÓN
MULTIPROCESO
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. La multiprogramación puede producirse entre
procesos totalmente independientes, como podrían ser los correspondientes al
procesador de textos, navegador, reproductor de música, etc., o entre procesos
que pueden cooperar entre sí para realizar una tarea común.
29
Implementación. Una vez realizada la descomposición y la partición se
realiza la implementación utilizando las herramientas disponibles por la
plataforma a utilizar. En este caso, Java permite únicamente métodos
sencillos de comunicación y sincronización de procesos para realizar la
cooperación.
Si no se siguen estas fases es posible que el programa no sea del todo efi-
ciente en un futuro.
https://www.youtube.com/watch?v=z56J_fMjO3I
Descripción
30
CONCLUSIONES
Hemos visto que es un proceso y las distintas formas de estudio de procesos ya
sea mediante sus estados cuando son ejecutados, las distintas formas de ejecu-
tarlo y crearlo también a identificar en el administrador de tareas cual es cada
proceso mediante su PID
31
RECAPITULACIÓN
En esta unidad se ha tratado:
El concepto de procesos
Gestión de procesos
Comunicación de procesos
Operaciones básicas con procesos
32
PROPUESTAS DE AMPLIACIÓN
http://es.slideshare.net/anuskaeg/programacin-de-servicios-y-procesos-
27324747
https://es.wikipedia.org/wiki/Comunicaci%C3%B3n_entre_proceso
33
BIBLIOGRAFÍA
Eugenia Perez Martinez. (2015) Programación de servicios y procesos.
Propuestas de formación. Formación profesional para el Empleo.
Eduforma.
Alicia Ramos martin, Mª Jesus Ramos Martín.(2013). Programación de
servicios y procesos.
35