Title: Fundamentos de los Computadores II 0
1Capítulo 3Procesos
2Contenido
- Concepto de proceso
- Multitarea
- Información de los procesos
- Estado de los procesos
- Procesos ligeros
- Planificación
- Señales y excepciones
- Temporizadores
- Servidores y demonios
- Servicios POSIX
31. Concepto de proceso
4Concepto de proceso (I)
- Proceso
- Programa en ejecución. Unidad de procesamiento
gestionada por el SO - El SO mantiene para cada proceso una serie de
estructuras de información que permiten
identificar sus características y los recursos
asignados. Una parte básica de esta información
se encuentra en el BCP (bloque de control de
proceso). El SO mantiene una tabla con los BCPs
de todos los procesos - Información asociada a cada proceso
- Contenido de los segmentos de memoria donde
residen el código y los datos (core image o
imagen de memoria) - Contenido de los registros del modelo de
programación (PC, estado, etc.) - Contenido del BCP
5Concepto de proceso (II)
Ya que los procesos encargados de arrancar el SO
son los primeros en ejecutar, se va creando una
jerarquía de procesos como la indicada a
continuación
6Concepto de proceso (III)
- Para referirse a las relaciones entre procesos se
emplean los términos padre, hijo, hermano, etc.
Cuando un proceso A solicita al SO la creación de
un nuevo proceso (B), se dice que A es padre de B
y que B es hijo de A. UNIX mantiene
explícitamente una estructura jerárquica de
procesos. - El entorno del proceso consiste en un conjunto de
variables que se le pasan al nuevo proceso en el
momento de su creación. Está formado por una
tabla de pares NOMBRE-VALOR (nombre de variable,
valor de variable). Algunos ejemplos de variables
de entorno son - PATH/usr/local/bin/usr/bin
- TERMxterm
- HOME/home/fc2
- PWD/home/fc2/documentos
7Concepto de proceso (IV)
Los procesos forman grupos, con diferentes
propiedades. El conjunto de procesos creados a
partir de un shell puede forman un grupo. También
puede ser un grupo el conjunto de procesos
asociados a un usuario o a un terminal. Algunos
servicios del SO pueden operar selectivamente
sobre todos los procesos de un grupo.
82. Multitarea
2.1. Introducción 2.2. Base de la multitarea 2.3.
Ventajas 2.4. Grado de multiprogramación y
necesidades de MP
9Multitarea (I)
2.1. Introducción
- Dependiendo del número de procesos y usuarios que
pueden ejecutar simultáneamente, un SO puede ser - Monotarea (monoproceso) sólo un proceso en cada
instante - Multitarea (multiproceso)
- Monousuario
- Multiusuario (tiempo compartido)
10Multitarea (II)
2.2. Base de la multitarea
- La multitarea se basa en las siguientes
características - Paralelismo real entre operaciones de E/S y uso
del procesador cuando un proceso realiza una
operación de E/S se pasa a ejecutar otro - Alternancia en los procesos en fases de E/S y
procesamiento aprovechar las fases de
realización de operaciones de E/S de unos
procesos para ejecutar otros - Memoria principal capaz de almacenar varios
procesos
11Multitarea (III)
Proceso Nulo
12Multitarea (IV)
Estado de los procesos. Un proceso puede
encontrarse en diferentes situaciones, que
cambian a medida que se modifican sus
necesidades. Los estados básicos en que pueden
encontrarse un proceso son listo, ejecución y
bloqueado
Termina
Ejecución
Fin tiempo
Operación E/S
Planificado
Nuevo
Final E/S
Bloqueado
Listo
13Multitarea (V)
Planificador (scheduler). Forma parte del núcleo
del SO. Entra en ejecución cada vez que se activa
el SO y tiene por misión seleccionar el proceso
que se ejecutará a continuación. Activador
(dispatcher). También forma parte del SO y se
encarga de poner en ejecución el proceso
seleccionado por el planificador.
14Multitarea (VI)
2.3. Ventajas de la multitarea
- Las más importantes son
- Facilita la programación. Las aplicaciones pueden
organizarse en varios procesos, beneficiando así
la modularidad. - Prestar buen servicio, al poder atender a varios
usuarios de forma eficiente, interactiva y
simultánea. - Aprovechar los tiempos muertos que los procesos
pasan esperando la conclusión de operaciones de
E/S. - Aumentar el uso de la CPU, al aprovechar los
tiempos de bloqueo de unos procesos en la
ejecución de otros.
15Multitarea (VII)
2.4. Grado de multiprogramación y
necesidades de MP
Grado de multiprogramación número de procesos
activos mantenidos por el SO. A más procesos
activos, mayor probabilidad de encontrar en cada
instante uno en situación de ser ejecutado. A más
procesos activos mayores necesidades de
memoria. En un sistema sin memoria virtual los
procesos activos han de residir plenamente en MP.
En este caso, el grado de multiprogramación está
severamente limitado por el tamaño de los
procesos y por la memoria disponible. En este
caso, a más procesos mayor grado de uso de la CPU
(procesos siempre en MP).
16Multitarea (VIII)
r
100
o
d
a
s
Proceso A
e
c
o
r
Proceso B
p
l
e
d
Proceso C
n
ó
SO
i
c
Memoria
a
z
i
principal
l
i
t
U
Cada proceso reside
0
totalmente en M.p
Grado de multiprogramación
17Multitarea (IX)
En sistemas con memoria virtual la situación es
más compleja. Los procesos sólo tienen en MP su
conjunto residente (páginas que están en MP), por
lo que podríamos tener más procesos cargados en
MP. Si se aumenta demasiado el número de
procesos, el conjunto residente de cada uno se
hace muy pequeño. Al disminuir el conjunto
residente ya no representa adecuadamente al
futuro conjunto de trabajo (páginas en uso), por
lo que se producirán muchos fallos de
página. Los fallos de página consumen mucho
tiempo del procesador, ya que el SO ha de tratar
el fallo, y tiempo de E/S, ya que es necesaria
una migración de páginas. Al crecer el número de
fallos de página sistema dedica más tiempo a
resolver los fallos de página que a realizar las
tareas de los programas (hiperpaginación).
18Multitarea (X)
193. Información de los procesos
3.1. Estado del procesador 3.2. Imagen de memoria
de un proceso 3.3. Información del BCP 3.4.
Tablas del SO
20Información de los procesos (I)
3.1. Estado del procesador
El estado del procesador queda definido por el
contenido de sus registros registros generales,
contador del programa, puntero de pila, registros
de estado, registros especiales (RIED) Cuando un
proceso se ejecuta el estado del procesador
responde a su ejecución, y se almacena
directamente en los registros del procesador.
Cuando el proceso deja de ejecutarse esta
información pasa a almacenarse en el bloque de
control de proceso (BCP). La rutina del SO que
trata las interrupciones, en primer lugar, salva
el estado del procesador en el BCP del proceso
interrumpido.
21Información de los procesos (II)
3.2. Imagen de memoria de un proceso
- La imagen de memoria de un proceso está
constituida por los espacios de memoria que está
autorizado a usar (los que el SO le ha asignado).
Algunas cuestiones a tener en cuenta son - El proceso sólo puede tener información en su
imagen de memoria. Si intenta un acceso a una
posición de memoria fuera de ella, el hardware de
protección lo detectará y generará la excepción
correspondiente. Esta excepción activa la
ejecución del SO, quien tomará la opción oportuna
(generalmente abortar el proceso) - Dependiendo del ordenador, la imagen de memoria
se refiere a memoria virtual o memoria física.
Esto es transparente al proceso
22Información de los procesos (III)
- Los procesos suelen necesitar asignación dinámica
de espacio. Por tanto, la imagen debe adaptarse a
sus necesidades, creciendo o decreciendo - El SO es el responsable de asignar memoria a los
procesos. Para ello emplea diferentes métodos - Un único segmento de tamaño fijo. Modelo muy
sencillo de implementar. Suele restringirse su
uso a sistemas sin memoria virtual. Este espacio
no puede variar de tamaño. Como consecuencia, un
proceso podría ejecutar su memoria durante la
etapa de ejecución - Un único segmento de tamaño variable. Solución no
empleada - Número variable de segmentos con tamaño variable.
Puede haber tantos segmentos como necesite el
proceso. Es la solución más flexible y la
adoptada normalmente por los SSOO modernos.
23Información de los procesos (IV)
- Número fijo de segmentos, pero de tamaño
variable. Basado en que los procesos emplean
varios tipos de información - Código o texto. Programa máquina que ha de
ejecutar el proceso. Información fija, sobre la
que sólo se realizan operaciones de lectura - Datos. Al permitir asignación dinámica de memoria
podría variar su tamaño - Pila. A través del puntero de pila los programas
usan una estructura de pila residente en MP. En
ella se almacenan, por ejemplo, los bloques de
activación de los procedimientos llamados. Se
trata de una estructura dinámica crece y decrece
según avanza la ejecución del proceso.
24Información de los procesos (V)
Nº fijo de segmentos de tamaño variable
Nº variable de segmentos de tamaño variable
PILA
PROCESO
PROCESO
DATOS
TEXTO
Nº variable de segmentos de tamaño variable
RIED
Memoria
principal
Memoria
virtual
Código
Datos
Disco
Tamaño
Tabla de
páginas
Pila
Una tabla de
páginas
por proceso
25Información de los procesos (VI)
3.3. Información del BCP
- El BCP contiene la información básica de los
procesos, entre la que destaca - Información de identificación (usuario, grupo,
proceso, proceso padre) - Estado del procesador valores iniciales del
procesador o valores correspondientes al momento
en que el proceso dejó de ejecutar - Información de control del proceso
- Información de planificación y estado estado del
proceso, evento que espera (si está bloqueado),
prioridad, etc - Descripción de los segmentos de memoria asignados
al proceso - Recursos asignados archivos abiertos, puertos de
comunicación, etc
26Información de los procesos (VII)
- Punteros para organizar y almacenar los procesos
en colas o anillos (para facilitar la tarea del
planificador) - Comunicación entre procesos almacén de señales y
mensajes enviados al proceso
27Información de los procesos (VIII)
3.4. Tablas del SO
El SO mantiene una serie de tablas que describen
a los procesos y a los recursos del sistema.
Registros
Mapa de memoria
especiales
del Proceso A
Mapa de memoria
del Proceso B
Tablas del sistema operativo
Registros
Mapa de memoria
generales
-Tabla de procesos
del Proceso C
BCP Proceso B
BCP Proceso A
BCP Proceso C
Estado (registros)
Estado (registros)
Estado (registros)
-
-
-
Tablas SO
- Identificación
- Identificación
- Identificación
PC
- Control
- Control
- Control
- Tabla de memoria
Mapa de
SP
- Tabla de E/S
Memoria
- Tabla de ficheros
Estado
28Información de los procesos (IX)
- Toda la información referente a los diferentes
procesos se almacenan en tablas (procesos,
memoria, E/S y ficheros) - La información asociada a cada proceso se
encuentra parcialmente dentro y fuera del BCP
dependiendo de - Eficiencia acelerar los accesos. La tabla de
procesos generalmente se construye como una
estructura estática, para acoger un número
determinado de BCP de idéntico tamaño. En este
sentido, las informaciones del proceso que
tuvieran un tamaño variable no deberían incluirse
en el BCP (la tabla de páginas) - Compartición de información si una información
ha de ser compartida por varios procesos no debe
incluirse en el BCP, ya que es de acceso
restringido al proceso dueño.
29Información de los procesos (X)
- Tabla de procesos La tabla de procesos está
formada por una lista de estructuras de BCP. - La tabla de E/S incluye información relativa a
los periféricos y operaciones de E/S. Los SSOO
suelen mantener una cola para cada dispositivo,
donde se almacenan las operaciones pendientes de
ejecución, así como la operación actualmente en
curso. - Tabla de memoria Estructura de árbol donde se
almacenan las tablas de memoria de cada uno de
los procesos, cuya dirección principal se
almacena en RIED. - Tabla de ficheros Matriz donde se almacenan los
punteros a los ficheros abiertos por cada uno de
los procesos.
30Información de los procesos (XI)
- La formación de un proceso es el proceso por el
que se completan todas las informaciones que lo
describen. El SO realiza - Asignación de espacio de memoria ( normalmente
espacio virtual en varios segmentos). - Seleccionar BCP libre en la tabla de procesos
- Rellenar BCP con información de identificación
del proceso, descripción de memoria asignada,
valores de los registros, etc - Carga del segmento de texto, con el código.
- Carga del segmento de datos iniciales del fichero
objeto. - Inicialización de la pila en el segmento de pila.
Inicialmente incluye el entorno del proceso y los
parámetros pasados en la invocación del programa
correspondiente. - Una vez hecho esto, el proceso puede marcarse
como listo, de forma que el planificador, cuando
lo considere oportuno, pase a ejecutarlo.
314. Estado de los procesos
4.1. Introducción 4.2. Cambio de contexto
32Estado de los procesos (I)
4.1. Introducción
- No todos los procesos activos de un sistema
multitarea están en la misma situación. Se
distinguen tres estados básicos - Ejecución. En este estado sólo está el proceso
que está siendo ejecutado. El estado del proceso
reside en los registros del procesador - Bloqueado. A la espera de que ocurra un evento.
Situación típica un proceso solicita una
operación de E/S. Hasta que no finalice la
operación el proceso queda bloqueado. El estado
del proceso reside en su BCP - Listo. Puede entrar en ejecución en cuanto lo
considere oportuno el planificador (módulo del SO
que decide qué proceso pasará a ejecutarse). El
estado del proceso reside en su BCP
33Estado de los procesos (II)
- Además de los estados básicos también pueden
estar - Suspendido. Para disminuir el grado de
multiprogramación efectivo el SO puede retirar a
un proceso sus marcos de página, alojándolo en la
zona de intercambio (usualmente disco). El
objetivo de esta operación es dejar suficiente
memoria para los procesos no suspendidos, de
forma que el conjunto residente no provoque
hiperpaginación - En espera. Los procesos entran en el sistema
porque lo solicita otro proceso o al estar
prevista su ejecución batch. Es usual disponer de
una lista de procesos batch en espera, para ser
ejecutados en cuanto se pueda. El SO analiza
dicha lista y lanza la ejecución de los procesos
a medida que dispone de los recursos necesarios.
34Estado de los procesos (III)
35Estado de los procesos (IV)
4.2. Cambio de contexto
El cambio de contexto implica a) Salvar el
estado del procesador en el BCP
Registros
especiales
Tabla de procesos
BCP Proceso B
BCP Proceso N
BCP Proceso A
Registros
Estado
Estado
Estado
Estado
generales
(registros)
(registros)
(registros)
Información de
Información de
Información de
identificación
identificación
identificación
PC
Información de
Información de
Información de
SP
Control
Control
Control
Estado
36Estado de los procesos (V)
b) Ejecución de la rutina de tratamiento de
interrupción del SO (sólo cuando se produce una
interrupción) Como consecuencia del cambio de
contexto puede producirse un cambio en el estado
de algunos procesos, aunque no necesariamente. Ej
emplo Proceso A bloqueado esperando el final de
una operación de disco y llegue una interrupción
(señal de final). Si la interrupción indica el
final de la operación esperada, el SO cambia el
estado del proceso a listo o ejecución. Es decir,
hay cambio de estado. Ejemplo Proceso A en
ejecución y se produce una interrupción de
teclado, asociada al proceso B. Se produce el
cambio de contexto, pero B sigue bloqueado y A
sigue en estado de ejecución.
375. Procesos ligeros
5.1. Introducción 5.2. Estados de los procesos
ligeros 5.3. Paralelismo 5.4. Diseño con procesos
ligeros
38Procesos ligeros (I)
5.1. Introducción
Un proceso ligero (thread o hebra) es un programa
en ejecución que comparte la imagen de la memoria
y otras informaciones con otros procesos ligeros.
39Procesos ligeros (II)
En definitiva, los procesos ligeros permiten
realizar funciones cuya ejecución puede lanzarse
en paralelo. Cada proceso ligero contiene
información propia que no comparte con otros
procesos ligeros. Las informaciones propias se
refieren esencialmente al contexto de ejecución
contador del programa, pila, registros y estado
del proceso ligero (ejecutando, listo,
bloqueado). Todos los procesos ligeros de un
mismo padre comparten el espacio de direcciones
de memoria código, datos, pilas, etc. Por tanto,
no existe un mecanismo de protección de memoria
entre procesos ligeros.
40Procesos ligeros (III)
5.2. Estado de los procesos ligeros
Un proceso ligero puede estar ejecutando, listo o
bloqueado.
41Procesos ligeros (IV)
- Puede haber tantos procesos ligeros hijos de un
mismo padre en ejecución como procesadores tenga
la máquina. - El estado del proceso padre al que pertenecen los
procesos ligeros será la combinación de los
estados de sus procesos ligeros - Si hay algún proceso ligero en ejecución, el
proceso padre estará en ejecución - Si no hay ningún proceso ligero en ejecución,
pero hay alguno listo, el proceso padre estará
en estado listo - Si todos los procesos ligeros bloqueados, el
proceso padre estará bloqueado
42Procesos ligeros (V)
5.3. Paralelismo
Los procesos ligeros permiten paralelizar una
aplicación.
43Procesos ligeros (VI)
Cuando un programa puede dividirse en
procedimientos que se pueden ejecutar de forma
independiente, el mecanismo de los procesos
ligeros permite el lanzamiento simultáneo de
todos ellos. De esta forma, se aprovecha al
máximo el uso del procesador. Base mientras un
proceso ligero está bloqueado otro podrá
ejecutarse
44Procesos ligeros (VII)
5.4. Diseño con procesos ligeros
- El uso de procesos ligeros permite
- Separación de tareas. Cada tarea se puede
encapsular en un proceso ligero independiente - Facilitar la modularidad, al dividir tareas
complejas en subtareas - Aumentar la velocidad de ejecución del trabajo,
al aprovechar los tiempos de bloqueo de unos
procesos en la ejecución de otros - El paralelismo, unido a la compartición de
memoria, permite la programación concurrente.
Dificultad garantizar que el acceso a los datos
compartidos se haga de forma correcta.
45Procesos ligeros (VIII)
- Los principios básicos a aplicar son
- Hay variables globales compartidas entre varios
procesos ligeros. Su ejecución independiente
puede producir accesos incorrectos sobre estas
variables - Para ordenar el acceso a los datos se emplean
técnicas de sincronización, para impedir que un
proceso ligero pueda acceder a los datos mientras
otro los está usando - Aplicación típica de los procesos ligeros diseño
de procesos servidores paralelos. Varias
posibilidades - Proceso ligero distribuidor y trabajadores
- Procesos ligeros iguales
- Procesos ligeros por fases
46Procesos ligeros (IX)
a) Proceso ligero distribuidor cuya función es
recibir órdenes y pasarlas a otros procesos
ligeros (trabajadores). El esquema puede
contemplar un proceso trabajador por cada
solicitud de servicio (morirá al finalizar su
trabajo), o bien procesos ligeros que reciben
peticiones, las realizan y quedan a la espera.
Más eficiente.
Trabajador
47Procesos ligeros (X)
b) Disponer de un conjunto de procesos ligeros
iguales todos ellos pueden recibir órdenes. Al
llegar una petición se encamina a un proceso
ligero, que la trata y completada la tarea, se
dispone a esperar nuevas peticiones
48Procesos ligeros (XI)
c) Cada trabajo se divide en una serie de fases,
encargándose de cada una de ellas un proceso
ligero especializado. El esquema permite tratar
tantas solicitudes como fases tenga la cadena.
Segmentación (pipe-line)
496. Planificación
6.1. Introducción 6.2. Algoritmos de
planificación 6.3. Planificación POSIX 6.4.
Planificación en NT/2000
50Planificación (I)
6.1. Introducción
Objetivo reparto eficiente de tiempo de
procesador entre los procesos disponibles para
ejecutar Planificador módulo del SO encargado
de esta tarea. Selecciona el proceso en estado
listo que pasará a ejecutar Activador módulo
del SO que pone en ejecución el proceso
seleccionado por el planificador
51Planificación (II)
Tipos de planificación
- En la planificación de procesos se suelen incluir
varios niveles, en función del periodo temporal
que cubren. - Planificación a largo plazo. Se toman procesos de
la lista de espera. Se trata de procesos de tipo
batch, en los que no importa el momento final en
que se ejecuten (dentro de ciertos límites) - Planificación a medio plazo. Trata la suspensión
de procesos, añadiendo procesos o eliminando
procesos de MP (quitando o pasando al estado
suspendido) - Planificación a corto plazo. Qué proceso será el
que se ejecutará en el procesador en el instante
siguiente - Planificación de operaciones de E/S. Si hay
varias operaciones a realizar, cuál se realizará
la siguiente?
52Planificación (III)
Planificación a
a
largo plazo
i
Exit
r
Ejecución
o
m
e
M
Listo
Bloqueado
Fin E/S
Planificación a corto plazo
Entra al
sistema
p
Listo y
Bloqueado y
a
Procesos Batch
suspendido
w
suspendido
S
Planificación a medio plazo
en espera
53Planificación (IV)
- Expulsión denota si un proceso acapara el
procesador cuando está ejecutándose. Existen
sistemas con y sin expulsión - Sin expulsión un proceso conserva el uso del
procesador mientras lo desee es decir, mientras
no solicite del SO un servicio que lo bloquee.
Ventajas minimiza tiempo de planificación.
Inconvenientes un proceso podría monopolizar el
uso del procesador. - Con expulsión el SO puede desalojar a un proceso
del uso del procesador (sin que el proceso lo
haya solicitado). Ventaja control sobre el
tiempo de ejecución de cada proceso.
Inconveniente gasto de tiempo. - Para realizar las tareas de planificación el SO
organiza los procesos en estructuras de
información que faciliten la búsqueda de la
información de los procesos. Generalmente se
organizan mediante colas de prioridad y de tipo.
54Planificación (V)
En la siguiente figura se aprecia un ejemplo con
30 colas para procesos interactivos y 2 colas
para procesos batch, con diferentes prioridades.
55Planificación (VI)
Se puede apreciar la existencia de una palabra de
resumen, que contiene un 1 si la cola tiene
procesos y un 0 en caso contrario. Esta
información facilita el trabajo del
planificador.
Las colas de procesos se construyen con unas
cabeceras y con punteros a los BCPs
correspondientes.
56Planificación (VII)
- Los objetivos del planificador se resumen en
- Reparto equitativo del tiempo de procesador
- Eficiencia
- Menor tiempo de respuesta en uso interactivo
- Menor tiempo de espera en lotes
- Mayor número de trabajos por unidad de tiempo
- Cumplir plazos de ejecución de los sistemas de
tiempo real - Se aprecia que algunos de estos objetivos son
incompatibles la solución radica en buscar
equilibrio entre ellos.
57Planificación (VIII)
6.2. Algoritmos de planificación
- Los más usuales son
- Planificación cíclica (Roud-Robin).
- - Objetivo básico reparto equitativo de tiempo
del procesador - - Espacialmente indicado para sistemas de tiempo
compartido - - Basado en el concepto de rodaja (slot) de
tiempo - - Los procesos se organizan en forma de cola
circular para la - ejecución de elige el proceso que ocupa
la cabeza de la cola - Un proceso permanece en ejecución hasta que pasa
a bloqueado (al solicitar un servicio al SO) o
consume su rodaja de tiempo (es decir, lleva
ejecutando el tiempo indicado por la rodaja). Un
proceso que ha consumido su rodaja pasa al final
de la cola circular. REPARTO EQUITATIVO.
58Planificación (IX)
- FIFO (first in, first out).
- Procesos ordenados en función al instante en que
pasan al estado listo. Los que llevan más tiempo
estarán más cerca de la cabeza (y más próximos a
ser elegidos). No hay expulsión el proceso
ejecuta hasta realizar una llamada bloqueante al
SO. Aplicable a sistemas batch. - C) Prioridades.
- Pasa a ejecución el proceso de mayor prioridad.
Si las prioridades son fijas, peligro de
inanición. Un proceso esperando indefinidamente,
ya que siempre llegan procesos con más prioridad
que él. Se suele añadir algún mecanismo de
envejecimiento aumenta la prioridad de los
procesos que llevan más tiempo esperando. Ya que
puede haber varios procesos de igual prioridad
esperando a ser elegidos, se necesita algún
mecanismo para resolver los empares cíclico
(sistemas interactivos, FIFO (batch). Suelen
utilizar la expulsión.
59Planificación (X)
- Prioridad al trabajo más corto.
- Exige conocer a priori el tiempo de ejecución de
los procesos. aplicable a procesos batch
repetitivos con comportamiento analizado. No hay
expulsión. El trabajo seleccionado continúa
ejecutándose mientras pueda así se mejora el
tiempo de respuesta. Problema aumenta el tiempo
necesario para los procesos de mayor tiempo de
ejecución. También puede producirse inanición
(siempre llegan trabajos más cortos.) - E) Aleatorio o lotería.
- Selección al azar.
- F) Planificación de sistemas de tiempo real.
- Los procesos tienen que ejecutar en instantes
predeterminados. Dos tipos de procesos de tiempo
real a plazo fijo (ejecutan una vez, en cierto
instante) y periódicos (ejecución repetitiva cada
cierto tiempo)
60Planificación (XI)
Se asocia a cada proceso el instante en que ha de
ejecutarse. Los procesos que no han alcanzado el
tiempo de ejecución están en la cola de procesos
en espera. Los que sí alcanzaron este tiempo
pasan a la cola de procesos ejecutables (listos
para ejecutar). En este tipo de sistemas la
planificación consisten en seleccionar los
procesos de esta última cola (procesos
ejecutables). El elemento esencial en estos
sistemas es el reloj. Objetivo básico evitar que
se retrase la ejecución de los procesos.
61Planificación (XII)
Sistemas críticos se asocia a cada proceso una
franja de tiempo, dentro de la que habrá de ser
ejecutado, sin permitir que se rebase el tiempo
máximo. Para este tipo de funcionamiento debe
tratarse de sistemas con poca carga, con pocos
procesos en estado listo (de forma que se pueda
asegurar que no se retrasará la ejecución). Han
de evitarse los mecanismos que puedan retrasar la
ejecución, como por ejemplo el uso de memoria
virtual (posibles problemas debidos a la
paginación). VALORACIÓN DE LOS ALGORITMOS DE
PLANIFICACIÓN complicada, ya que hay muchos
factores a tener en cuenta y entre los que
conseguir un equilibrio. De cualquier forma, no
pueden ser algoritmos muy complejos, ya que su
simple uso retrasaría el funcionamiento del
sistema.
62Planificación (XIII)
6.3. Planificación en POSIX
POSIX especifica una serie de políticas de
planificación, tanto para procesos como para
procesos ligeros, que han de implementar todos
los SSOO que ofrezcan esta API. En POSIX cada
proceso lleva asociada una política de
planificación y una prioridad. Estos parámetros
pueden modificarse mediante los correspondientes
servicios. Cada política lleva asociada un rango
de prioridades. POSIX especifica que cada
implementación debería contar con, al menos, 32
niveles de prioridad.
63Planificación (XIV)
- A continuación se exponen las políticas
disponibles en POSIX - FIFO por prioridades
- Los procesos se introducen al final de la cola
asociada a su prioridad. - Se gestionan como procesos con expulsión. Se
produce una expulsión cuando hay una llamada
bloqueante o cuando aparezca un proceso de mayor
prioridad. - Si un proceso es expulsado por otro de más
prioridad, el proceso expulsado pasa a ser el
primero de la lista asociada a su prioridad. - Si un proceso bloqueado pasa a listo para ser
ejecutado, el proceso se introduce al final de la
cola de su prioridad. - Si un proceso cambia su prioridad o su política
de planificación se realiza una replanificación.
64Planificación (XIV)
- CICLICA por prioridades
- Cada cola posee una prioridad diferente y cada
cola implementa una planificación cíclica. - Se gestionan como procesos con expulsión. Se
produce una expulsión cuando aparezca un proceso
de mayor prioridad - Cuando se consume la rodaja de tiempo de un
proceso se introduce al final de la cola de su
prioridad. - Si un proceso es expulsado por otro de mayor
prioridad se introduce al principio de su cola de
prioridad con el tiempo restante de ejecución que
le quede.
65Planificación (XV)
- Otra. Dependiendo de la implementación concreta.
- Las planificaciones fijas en sistemas POSIX son
la FIFO y la CÍCLICA y algunos sistemas
implementan cualquier otra, pero no son
obligatorias. - La planificación se realiza por proceso, ya que
cada proceso lleva asociada información sobre el
tipo de planificación a usar con él.
66Planificación (XVI)
6.4. Planificación en Windows NT/2000
- Unidad básica de ejecución proceso ligero. Los
diferentes estados por los que puede pasar un
proceso ligero, en esta arquitectura, son - Listo. Preparados para ejecutar
- Reserva. Siguiente proceso a ejecutar en un
determinado procesador - Ejecución. No se detiene la ejecución hasta que
el SO lo expulse, finaliza la rodaja de tiempo,
se completa su trabajo - Bloqueado. Esperando que se cumpla alguna
condición (fin de operación de E/S, etc). De
bloqueado puede pasar a ejecución o a listo - Transición. Listo a ejecutar, pero la pila usada
por dicho proceso no está en MP. Cuando la página
correspondiente está en memoria el procesador
pasa a listo - Finalizado. Una vez finalizado, el proceso puede
ser eliminado o no. Si no se elimina, podría
reutilizarse
67Planificación (XVII)
68Planificación (XVIII)
Planificación en NT/2000 cíclica por prioridades
y expulsión. 32 niveles de prioridad (0.31
(máximo)) Nivel sistema 0 Niveles
intermedios 115 Niveles de tiempo real 1631
697. Señales y excepciones
7.1. Señales 7.2. Excepciones
70Señales y excepciones (I)
7.1. Señales
- Las señales tienen respecto al proceso la misma
funcionalidad que las interrupciones respecto al
procesador. El proceso que recibe una señal se
comporta de la siguiente forma - Detienen su ejecución en la instrucción
- máquina en ejecución
- Bifurca para ejecutar una rutina de
- tratamiento de la señal (ese código
- forma parte del propio proceso)
- Una vez ejecutada la rutina de tratamiento
- continúa la ejecución del proceso, en la
- instrucción en que fue interrumpido
71Señales y excepciones (II)
- Las señales se pueden Enviar, Recibir, Armar,
Ignorar e Enmascarar - Envio de señales
- Hay señales para indicar problemas hardware, para
facilitar la comunicación entre procesos, para
E/S asíncrona, etc. - Origen de la señal puede ser un proceso o el SO.
- Señal proceso a proceso Un proceso sólo puede
enviar señales a otro proceso con el mismo uid.
También se puede enviar una señal a un grupo de
procesos, pero siempre que se cumpla la condición
anterior - Señal SO a proceso excepciones hardware,
problemas de ejecución, etc - Recepción de señales
- El efecto producido al recibir una señal es
ejecutar una rutina de tratamiento. Para que esto
ocurra la señal ha de estar armada.
72Señales y excepciones (III)
Armar señales Armar una señal consiste en decir
al SO el nombre de la rutina del proceso que ha
de tratar este tipo de señal (el armado se lleva
a cabo mediante un servicio). Ignorar
señales Algunas señales pueden ser ignoradas.
Para conseguirlo hay que indicar tal situación al
SO. En este caso el SO desecha las señales
ignoradas por el proceso (se tiran). Enmascarado
de señales También se pueden enmascarar. El
efecto es bloquear las señalas enmascaradas (no
se tiran), a la espera de que el proceso las
desenmascare. Si un proceso recibe una señal no
armada, ni enmascarada, ni ignorada, se ejecuta
la acción por defecto en la mayoría de los casos
consiste en matar a dicho proceso.
73Señales y excepciones (IV)
7.2. Excepciones
Excepción evento ocurrido durante la ejecución
de un programa y que requiere la ejecución de un
fragmento de código fuera del flujo normal de
ejecución. Pueden ser generadas por hardware
(ejecución de instrucciones ilegales) y software
(detectadas y notificadas por el SO o por el
propio proceso). Al ocurrir una excepción el
control de transfiere al SO. que ejecuta la
rutina de tratamiento de la excepción. Esta
rutina crea un registro de excepción, que
contiene información sobre la excepción generada.
Si hay un manejador para dicha excepción, el SO
transfiere el control al mismo. En caso
contrario, aborta la ejecución del proceso.
74Señales y excepciones (V)
El tratamiento de las excepciones requiere el
soporte de los lenguajes de programación el
programa debe poder especificar el manejador a
ejecutar cuando se produzca una excepción.
Esquema habitual try // Bloque de
sentencias donde puede producirse
// una excepción
except //
Bloque ejecutado si se produce la excepción
// en el bloque anterior
.
C Java catch
758. Temporizadores
76Temporizadores (I)
- El SO mantiene en cada BCP (bloque de control de
proceso) un temporizador, que suele estar
expresado en segundos. - Cada vez que la rutina del SO que trata las
interrupciones de reloj comprueba que ha
transcurrido un segundo, decrementa los
temporizadores que no estén a 0 y comprueba si
alguno ha llegado a este valor. Si es así, el SO
notifica que el temporizador ha vencido. En
POSIX, por ejemplo, se genera una señal. - Mecanismo
- Inicialización el proceso inicializa su
temporizador mediante un servicio, indicando el
número de segundos o milisegundos a esperar - Envío de señal al vencer la temporización el SO
envía la señal correspondiente. Normalmente se
producirá la ejecución de alguna función
específica (forma de asegurar la ejecución de una
función cada cierto tiempo)
779. Servidores y demonios
78Servidores y demonios (I)
Se trata de dos tipos de procesos muy frecuentes
y con características especiales. Servidor
procesos pendiente de recibir órdenes de trabajo,
provenientes de otros procesos, denominados
clientes. Una vez recibida una petición, la
ejecuta y responde al cliente el resultado
correspondiente.
79Servidores y demonios (II)
- El proceso servidor tiene la siguiente estructura
de bucle infinito - lectura de orden (proceso servidor bloqueado en
espera de nuevas órdenes) - recibida la orden, ejecución
- finalizada la ejecución, el servidor responde con
el resultado al proceso cliente - La comunicación entre cliente y servidor
(procesos) normalmente se realiza a través de
puertos. El proceso servidor tiene abierto un
puerto, del que lee las peticiones. En la
petición, el cliente envía la identificación del
puerto al que el servidor ha de enviar el
resultado.
80Servidores y demonios (III)
- Se dice que un servidor es secuencial si sigue
estrictamente el modelo anterior. - Servidor paralelo admite varias peticiones y las
atiende simultáneamente. Para ello - Lectura de orden (proceso bloqueado en espera de
órdenes) - Asignación de nuevo puerto para el cliente
- Creación de proceso servidor hijo, para atender
esta petición - Vuelta al punto de lectura de orden
81Servidores y demonios (IV)
De esta forma, el servidor dedica poco tiempo a
cada cliente, ya que el trabajo real lo hace un
nuevo proceso servidor hijo. Otra estrategia
para diseñar servidores paralelos se muestra a
continuación
82Servidores y demonios (V)
- Un proceso demonio es un proceso con las
siguientes características - Se arranca al iniciar el sistema (siempre ha de
estar activo) - No muere. Si algún demonio muere, debe haber
algún mecanismo que lo detecte y vuelva a
arrancarlo - Está usualmente esperando la recepción de
eventos - Si el demonio es un servidor, el evento será la
petición de un cliente a través de un puerto - Si no es un servidor, su misión es hacer algo
cada cierto tiempo - A menudo no hace por sí mismo el trabajo, sino
que lanza otros procesos que lo hacen - Los procesos servidores suelen ser demonios
- Suelen ejecutarse en segundo plano (background),
sin estar asociados a ningún terminal ni proceso
login - Ejemplos servidor ftp, telnet, servidor WEB,
cola de impresión, etc
8310. Servicios POSIX
10.1. Servicios de gestión de procesos -
Identificación - Entorno del proceso - Creación
de procesos - Terminación de procesos -
Modificación de propiedades 10.2. Servicios de
gestión de procesos ligeros - Atributos de un
proceso ligero - Creación e ident. de procesos
ligeros - Terminación de procesos ligeros
8410.3. Servicios de planificación - Procesos -
Procesos ligeros 10.4. Gestión de señales y
temporizadores - Conjunto de señales - Envío de
señales - Armado de señales - Máscara de
señales - Servicios de temporización - Espera
de señales
85Servicios POSIX (I)
10.1. Gestión de procesos
10.1.1. Identificación de procesos
- Identificador entero único. Tipo pid_t
(equivale a entero) - Servicio para obtener identificación
- pid_t getpid (void)
- b) Servicio para obtener la identificación del
proceso padre - pid_t getppid (void)
86Servicios POSIX (II)
c) Servicio para obtener el usuario real del
proceso uid_t getuid (void) d) Servicio
para obtener el usuario efectivo del
proceso uid_t geteuid (void) Al ejecutar
un proceso se puede hacer que se comporte como si
fuese otro usuario distinto al que creó el
proceso, de forma que se le concedan determinados
permisos. Por ejemplo, algunos programas lanzados
por usuarios normales exigen disponer de
permisos de administrador para poder realizar
determinadas tareas.
87Servicios POSIX (III)
e) Servicio para obtener el grupo real del
proceso gid_t getgid (void) f) Servicio
para obtener el grupo efectivo del
proceso gid_t getegid (void) Al ejecutar
un proceso se puede hacer que se comporte como si
fuese otro usuario distinto al que creó el
proceso, de forma que se le concedan determinados
permisos. Por ejemplo, algunos programas lanzados
por usuarios normales exigen disponer de
permisos de administrador para poder realizar
determinadas tareas. TIPOS DISPONIBLES EN
ltsys/types.hgt
88Servicios POSIX (IV)
- Ejercicio haciendo uso de los servicios
anteriormente vistos, realizar un programa que
muestre todas esas informaciones relativas al
proceso creado para ejecutar el programa - a) Consultar ltsys/types.hgt
- Consultar su ubicación (find)
- Editar archivo (con cuidado de no modificar,
salir del editor SIN SALVAR) y ver los tipos
usados, para ver cómo se puede mostrar la
información correspondiente - Escribir el código correspondiente
- Escribir el archivo Makefile
- Compilar, mediante make
- Ejecutar el código
89Servicios POSIX (V)
CCgcc CFLAGS -Wall -g OBJECT ejercicio.o EXEC
ejercicio all (EXEC) (EXEC)
(OBJECT) (CC) (OBJECT) -o _at_ clean rm -f
(OBJECT) rm -f (EXEC)
- Código ejercicio.c
- Archivo Makefile en el mismo directorio que
ejercicio.c - Ejecutar make
- Si no hay problemas de ejecución, ejecutar
ejercicio
Makefile
90Servicios POSIX (VI)
10.1.2. Entorno de un proceso
El entorno de un proceso está definido por una
lista de variables que se pasan al proceso en el
momento de comenzar su ejecución (variables de
entorno). Son accesibles al proceso mediante la
variable externa environ, que ha de ser declarada
así extern char environ Esta lista es
un vector de punteros a cadenas de caracteres, de
la forma nombre_variable valor
91Servicios POSIX (VII)
- POSIX establece las siguientes variables de
entorno - HOME (directorio de trabajo del usuario asociado
al proceso) - LOGNAME (nombre de usuario asociado al proceso)
- PATH (ruta para encontrar ejecutables)
- TERM (tipo de terminal)
- T2 (información sobre zona horaria)
- ...............
Para obtener el valor de una variable de entorno
concreta, se puede usar el servicio char
getenv(const char name)
92Servicios POSIX (VIII)
Ejercicio hacer un programa que muestre todas
las variables de entorno accesibles mediante
environ. Ejercicio hacer un programa que,
usando getenv, obtenga el valor de las variable
de entorno DISPLAY, HOME y PWD. Ver qué ocurre
cuando se solicita el valor de una variable de
entorno que no exista (por ejemplo, la variable
de entorno k2r)
93Servicios POSIX (IX)
10.1.3. Creación de procesos
- Creación uso del servicio fork. Mediante este
servicio se produce la clonación del proceso
padre, resultando un nuevo proceso (hijo). - pid_t fork()
Mapa de
Mapa de
Nuevo PID
memoria
El proceso A hace un fork y crea el proceso hijo
B
memoria
Imagen
Imagen
proceso A
proceso A
Copia
Imagen
proceso B
Tabla de procesos
Tabla de procesos
BCP
BCP
BCP
A
B
A
94Servicios POSIX (X)
- Al copiarse la imagen de memoria del proceso
padre en el hijo, el texto (código), datos y la
pila de ambos procesos (en el momento de la
creación son iguales). Ambos procesos tendrán
también los mismos valores de registros en sus
BCP. Esto significa que el CP de ambos procesos
será el mismo, por lo que ambos procesos
ejecutarán la siguiente sentencia a la llamada a
fork. Por tanto, cómo conseguir entonces que
cada uno realice una tarea diferente? - Las diferencias entre ambos procesos son
- Identificadores (cada uno el suyo)
- Diferentes segmentos de memoria, pese a que sea
copia (espacio de memoria no compartido) - Tiempo de ejecución del hijo iniciado a 0
- El proceso hijo no tendrá alarmas pendientes
95Servicios POSIX (XI)
- El proceso hijo no tiene señales pendientes
- El valor de retorno del fork es distinto en padre
e hijo
CP
nfork()
nfork()
nfork()
CP
CP
No
No
n0?
n0?
n0?
Sí
Sí
Padre
Hijo
Padre
96Servicios POSIX (XII)
fork() devuelve 0 al hijo y el padre recibe
el pid del hijo !!!! y 1 en caso de error Ambos
procesos comparten los descriptores de los
archivos usados por el proceso padre antes de la
llamada a fork. Es decir, el proceso hijo tiene
acceso a los archivos abiertos por el
padre. Ejercicio hacer un programa para crear
un proceso mediante la llamada a fork. Tras la
llamada a fork el proceso padre mostrará los pid
propio y del hijo. El proceso hijo, por su parte,
mostrará el pid propio.
97Servicios POSIX (XIII)
Ejercicio ejecutar los dos siguiente programas y
representar gráficamente las relaciones entre
padre e hijos e todas las llamadas a la sentencia
fork. Analizar la traza mostrada por el programa
y resaltar cualquier aspecto que llame la
atención.
98Servicios POSIX (XIV)
include ltsys/types.hgt include
ltsys/wait.hgt include ltstdio.hgt include
ltunistd.hgt void main(void) pid_t pid
int i int n 10 for (i 0 i lt n
i) pid fork() if (pid !
0) printf("\n\n
ITERACION d \n",i)
printf("Recien creado d\n",pid)
printf("Creado por d\n",getpid())
printf("\
n") break
printf("\n\n-------------------------FINAL DEL
BUCLE -------------------------\n")
printf("Finalizando bucle de d\n",getpid())
printf("....padre d\n", getppid())
99Servicios POSIX (XV)
include ltstdio.hgt include ltsys/types.hgt include
ltunistd.hgt void main(void) pid_t pid
int i int n 10 for (i 0 i lt n
i) pid fork() if (pid
0) break else
printf("----------------------- ITERACION d
------------------",i) printf("Creado
el proceso con pid d\n",pid)
printf("Creado por el proceso con pid
d\n",getpid()) printf("El
padre del proceso con pid d es el proceso con
pid d\n", getpid(), getppid())
100Servicios POSIX (XVI)
- Ejecución de programas servicio exec y
variantes. Cambia el proceso ejecutado por un
proceso. Este servicio se realiza en dos fases - Vaciar el proceso de casi todo su contenido. Se
conservan algunas informaciones, como el entorno
del proceso (el SO lo incluye en la nueva pila
del proceso) y algunos datos relativos al BCP
(identificador del proceso, identificador de
usuario, descriptores de archivos abiertos) - Cargar el nuevo programa que ejecutará el
proceso. Para ello se asigna al proceso un nuevo
espacio de memoria, se cargan el texto y los
datos iniciales en los segmentos
correspondientes, se crea la pila inicial del
proceso con el entorno y los valores pasados al
programa, se rellena el BCP con los valores
iniciales de los registros y la descripción de
los nuevos segmentos de memoria
101Servicios POSIX (XVII)
Mapa de
Mapa de
Mapa de
memoria
memoria
memoria
r
o
d
Objeto
a
Imagen
Imagen
g
ejecutable
r
a
del proc.
del proc.
C
Biblioteca sistema
Tabla de procesos
Tabla de procesos
Tabla de procesos
BCP
BCP
BCP
Se carga la nueva imagen
El proceso hace un exec
Se borra la imagen de memoria
Se pone PC en dirección de arranque
Se borra la descripción de la memoria y registros
Se conservan los fd
Se conserva el PID
102Servicios POSIX (XVIII)
fork() crea un nuevo proceso que ejecuta el mismo
programa que el proceso padre. El servicio exec
no supone la creación de ningún nuevo proceso,
sino que permite que un proceso cambie el
programa que está ejecutando. A continuación se
muestran las funciones que componen la familia de
exec int execl (const char ruta, const char
arg0, .., NULL) int execv(const char ruta,
char const argv) int execle(const char
ruta, const char arg0, ..., NULL, char const
envp) int execve(const char ruta, char const
argv, char const envp) int execlp(const
char archivo, const char arg0, ..., NULL) int
execvp(const char archivo, char const argv)
103Servicios POSIX (XIX)
execl especifica ruta y tantos argumentos como
desee, expresados de uno en uno (se finaliza con
NULL) execv especifica ruta y un vector de
argumentos execle especifica ruta, tantos
argumentos como desee (uno a uno, como cadenas),
NULL (fin de argumentos) y array con valores de
variables de entorno execve ruta, array de
argumentos, array de valores de variables de
entorno execlp archivo, lista de argumentos
(uno a uno, cadenas), NULL execvp archivo y
array de argumentos
104Servicios POSIX (XX)
archivo si el nombre del archivo contiene el
carácter / se toma como si fuese una ruta. Si no,
el archivo se busca en los directorios definidos
en la variable de entorno PATH Si la llamada a
cualquiera de estas funciones se realiza con
éxito, no se devuelve nada. En caso de error, se
devuelve 1 Si el ejecutable a ejecutar al
hacer el exec contiene el bit set-user-id,
entones el identificador de usuario efectivo será
el correspondiente al usuario dueño del archivo a
ejecutar. Los descriptores de los archivos
abiertos previamente por el proceso que hace la
llamada a exec permanecen abiertos en la nueva
imagen del proceso (a no ser que cuando se
abriesen se les indicase FD_CLOEXEC).
105Servicios POSIX (XXI)
Las señales con acción por defecto quedan igual.
Igual ocurre con las señales ignoradas. Las
señales con manejador en el proceso que realiza
la llamada a exec, tras hacer la carga del nuevo
programa, pasan a tener el manejador por
defecto. Ejercicios hacer un programa ejecuta
que haga uso de execlp para ejecutar el comando
ls l. Igual con execvp. Mejorar para que el
comando a ejecutar se pueda pasar por línea de
comandos, usando execvp para la ejecución.
106Servicios POSIX (XXII)
10.1.4. Terminación de procesos
- Terminar ejecución un proceso puede finalizar de
forma normal o anormal. La finalización normal se
puede deber a sentencia return desde el programa
principal, sentencia exit en cualquier lugar y
llamada al sistema _exit (no recomendado, no es
portable). - El valor usado en la llamada exit(x) puede ser
recogido por el proceso padre para conocer las
razones de finalización del proceso hijo. - Como consecuencia de la finalización de un
proceso se realizan las siguientes acciones - Se cierran todos los descriptores
- No han de finalizar todos los procesos hijos del
proceso que acaba
107Servicios POSIX (XXIII)
- Si el proceso padre del proceso que realiza la
llamada a exit se encuentra ejecutando la
sentencia wait (o waitpid), se le notifica la
terminación de dicho proceso hijo - Si el proceso padre no está ejecutando estas
sentencias, el código de finalización (status)
del proceso hijo se almacena (por si el proceso
padre lo requiere en el futuro) - Si la implementación soporta la sentencia
SIGCHLD, se envía al proceso padre - El SO libera todos los recursos usados por el
proceso - La finalización anormal puede realizarse con la
sentencia abort, por la recepción de una señal
que provoca su finalización. La señal puede ser
provocada por un evento externo, por ejemplo
CtrlC. - Al finalizar anormalmente se suele producir un
archivo core, con información sobre la imagen
en memoria del proceso, que se podría usar para
depurar el programa
108Servicios POSIX (XXIV)
- La función exit termina llamando al servicio
_exit, pero antes realiza otras tareas - Todas las funciones registradas con la función
estándar atexit son llamadas en orden inverso a
su registro - Se cierran todos los archivos abiertos, y los
datos almacenados en el almacenamiento interno
son copiados por el SO - Se llama a _exit
- El prototipo de la función atexit es
- int atexit(void (func) (void))
- es decir, se le pasa como parámetro el puntero a
una función que devuelve void y que recibe como
argumentos void
109Servicios POSIX (XXV)
- Ejercicio hacer un programa con los siguientes
requerimientos - Definir una función fin, devolviendo void y sin
argumentos, que simplemente escriba por pantalla
Estamos en metodo fin - En el programa principal, registrar esta función
mediante atexit. A continuación, hacer llamada a
exit para comprobar que realmente se ejecuta la
función fin
110Servicios POSIX (XXVI)
include ltstdio.hgt include ltstdlib.hgt include
ltunistd.hgt void fin(void) printf("Fin de la
ejecución del proceso d\n", getpid())
return void main(void) void
(p_func)()fin if (atexit(p_func) ! 0)
perror("atexit") exit(1)
exit(0) / provoca la ejecución de la función
fin /
equivale a atexit(fin)
muestra error asociado a la ejecución de atexit
111Servicios POSIX (XXVII)
- Esperar la finalización de un proceso hijo El
proceso padre queda bloqueado mientras espera a
la terminación de alguno de sus procesos hijos - Los servicios que se pueden usar son
- pid_t wait (int status)
- pid_t waitpid (pid_t pid, int status, int
options) - wait suspende la ejecución del proceso padre
hasta que finalice la ejecución de uno de sus
procesos hijos (de cualquiera). La función
devuelve el identificador del proceso hijo que ha
finalizado. Si status es distinto de NULL se
almacenará en esta variable la información
proporcionada por el proceso hijo al finalizar.
112Servicios POSIX (XXVIII)
- Esta información de retorno se puede usar con las
macros - WIFEXITED(status) devuelve verdadero (! 0) si
el hijo finalizó correctamente y falso ( 0) en
caso contrario - WEXITSTATUS(status) valor devuelto por el
proceso hijo. Sólo puede usarse en caso de que el
proceso hijo haya finalizado de forma correcta
(es decir, WIFEXITED(status) devolverá verdadero) - WIFSIGNALED(status) devuelve verdadero (! 0) si
el proceso hijo finalizó como consecuencia de la
recepción de una señal - WTERMSIG(status) número de señal que provocó la
finalización del proceso. Sólo si WIFSIGNALED
devolvió verdadero - WIFSTOPPED(status) verdadero si el valor fue
devuelto por un proceso detenido. Sólo para su
uso con la función waitpid, con la opción
WUNTRACED - WSTOPSIG(status) número de señal produjo
suspensión del proceso hijo. Sólo si WIFSTOPPED
devolvió cierto
113Servicios POSIX (XXIX)
- Veamos ahora algunos comentarios repecto a
waitpid - pid_t waitpid (pid_t pid, int status, int
options) - Si pid vale 1 y options a 0, equivale a wait
- Si pid gt 0, se espera la finalización del proceso
hijo con el pid indicado - Si pid0, se espera la identificación de
cualquier proceso hijo con el mismo identificador
de grupo que el proceso que realiza la llamada - Si pid lt -1, pid especifica un identificador de
grupo, de forma que se esperará la finalización
de los procesos hijos pertenecientes a dicho
grupo - El argumento options se construye mediante el OR
binario de algunos valores definidos en
ltsys/wait.hgt. Por ejemplo
114Servicios POSIX (XXX)
- WHOHANG el proceso padre que hace uso de waitpid
no queda bloqueado si el proceso indicado por pid
no está disponible - WUNTRACED el estado de cualquier proceso hijo
especificado por pid y suspendido será devuelto
al proceso que invocó a waitpid - Ejercicio usar el programa realizado que
permitía ejecutar un comando especificado por
línea de comando mediante un proceso hijo, de
forma que el proceso padre espere mediante wait
la finalización del proceso hijo. El proceso hijo
finaliza mediante exit(15). Realizar las acciones
necesarias para recuperar este valor desde el
proceso padre. - Ejercicio modificar de forma conveniente los
programas usados para creación de jerarquías de
hijos, de forma que los procesos padres esperen
siempre la finalización de los hijos.
115Servicios POSIX (XXXI)
include ltsys/types.hgt include
ltsys/wait.hgt include ltstdio.hgt include
ltunistd.hgt void main(void) pid_t pid
int i int valor int n 10 for (i
0 i lt n i) pid fork() if
(pid ! 0) printf("\n\n
ITERACION d \n",i)
printf("Recien creado d\n",pid)
printf("Creado por d\n",getpid())
printf("\
n") wait(va