Fundamentos de los Computadores II 0 - PowerPoint PPT Presentation

1 / 155
About This Presentation
Title:

Fundamentos de los Computadores II 0

Description:

Listo. ... de la operaci n esperada, el SO cambia el estado del proceso a listo o ejecuci n. ... Un proceso ligero puede estar ejecutando, listo o bloqueado. 5.2. ... – PowerPoint PPT presentation

Number of Views:173
Avg rating:3.0/5.0
Slides: 156
Provided by: Fli60
Category:

less

Transcript and Presenter's Notes

Title: Fundamentos de los Computadores II 0


1
Capítulo 3Procesos
2
Contenido
  • 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

3
1. Concepto de proceso
4
Concepto 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

5
Concepto 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
6
Concepto 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

7
Concepto 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.
8
2. Multitarea
2.1. Introducción 2.2. Base de la multitarea 2.3.
Ventajas 2.4. Grado de multiprogramación y
necesidades de MP
9
Multitarea (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)

10
Multitarea (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

11
Multitarea (III)
Proceso Nulo
12
Multitarea (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
13
Multitarea (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.
14
Multitarea (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.

15
Multitarea (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).
16
Multitarea (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
17
Multitarea (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).
18
Multitarea (X)
19
3. 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
20
Informació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.
21
Informació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

22
Informació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.

23
Informació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.

24
Informació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
25
Informació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

26
Informació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

27
Informació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
28
Informació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.

29
Informació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.

30
Informació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.

31
4. Estado de los procesos
4.1. Introducción 4.2. Cambio de contexto
32
Estado 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

33
Estado 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.

34
Estado de los procesos (III)
35
Estado 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
36
Estado 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.
37
5. Procesos ligeros
5.1. Introducción 5.2. Estados de los procesos
ligeros 5.3. Paralelismo 5.4. Diseño con procesos
ligeros
38
Procesos 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.
39
Procesos 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.
40
Procesos ligeros (III)
5.2. Estado de los procesos ligeros
Un proceso ligero puede estar ejecutando, listo o
bloqueado.
41
Procesos 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

42
Procesos ligeros (V)
5.3. Paralelismo
Los procesos ligeros permiten paralelizar una
aplicación.
43
Procesos 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
44
Procesos 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.

45
Procesos 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

46
Procesos 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
47
Procesos 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
48
Procesos 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)
49
6. Planificación
6.1. Introducción 6.2. Algoritmos de
planificación 6.3. Planificación POSIX 6.4.
Planificación en NT/2000
50
Planificació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
51
Planificació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?

52
Planificació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
53
Planificació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.

54
Planificació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.
55
Planificació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.
56
Planificació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.

57
Planificació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.

58
Planificació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.

59
Planificació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)

60
Planificació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.
61
Planificació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.
62
Planificació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.
63
Planificació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.

64
Planificació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.

65
Planificació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.

66
Planificació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

67
Planificación (XVII)
68
Planificació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
69
7. Señales y excepciones
7.1. Señales 7.2. Excepciones
70
Señ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

71
Señ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.

72
Señ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.
73
Señ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.
74
Señ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
75
8. Temporizadores
76
Temporizadores (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)

77
9. Servidores y demonios
78
Servidores 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.
79
Servidores 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.

80
Servidores 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

81
Servidores 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
82
Servidores 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

83
10. 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
84
10.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
85
Servicios 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)

86
Servicios 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.
87
Servicios 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
88
Servicios 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

89
Servicios 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
90
Servicios 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
91
Servicios 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)
92
Servicios 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)
93
Servicios 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
94
Servicios 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

95
Servicios 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?


Padre
Hijo
Padre
96
Servicios 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.
97
Servicios 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.
98
Servicios 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())
99
Servicios 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())
100
Servicios 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

101
Servicios 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
102
Servicios 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)
103
Servicios 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
104
Servicios 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).
105
Servicios 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.
106
Servicios 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

107
Servicios 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

108
Servicios 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

109
Servicios 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

110
Servicios 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
111
Servicios 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.

112
Servicios 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

113
Servicios 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

114
Servicios 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.

115
Servicios 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
Write a Comment
User Comments (0)
About PowerShow.com