Está en la página 1de 48

La gestin

de procesos
Teodor Jov Lagunas
Josep Llus Marzo i Lzaro
P05/75097/00809
Mdulo 6

FUOC P05/75097/00809 Mdulo 6

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

La gestin de procesos

ndice

Introduccin.............................................................................................

Objetivos ....................................................................................................

1. El proceso: una mirada desde el interior del sistema ...............

1.1. Los elementos de un proceso y su representacin ..........................

1.2. La ejecucin concurrente ................................................................

1.3. Los estados de un proceso ............................................................... 10


2. El ciclo de vida de un proceso......................................................... 13
2.1. La creacin y la destruccin de procesos ........................................ 13
2.2. La herencia entre procesos .............................................................. 16
2.3. La sincronizacin y el estado de finalizacin
en la destruccin de procesos.......................................................... 19
2.3.1. La sincronizacin ................................................................. 19
2.3.2. El estado de finalizacin de los procesos ............................. 21
2.4. Los cambios en el entorno de ejecucin ......................................... 22
3. Las excepciones y las seales de software..................................... 25
4. La gestin de procesos en UNIX ...................................................... 27
4.1. La creacin y la destruccin de procesos ........................................ 28
4.2. Los cambios del entorno que configura un proceso ....................... 30
4.3. La jerarqua de procesos en UNIX ................................................... 36
4.4. Las seales en UNIX ........................................................................ 37
Resumen..................................................................................................... 39
Actividades................................................................................................ 41
Ejercicios de autoevaluacin ................................................................ 41
Solucionario.............................................................................................. 45
Glosario...................................................................................................... 46
Bibliografa............................................................................................... 47

FUOC P05/75097/00809 Mdulo 6

La gestin de procesos

Introduccin
Este mdulo didctico se centra en el estudio de la vida de los procesos desde
el punto de vista de las llamadas al sistema que permiten manipularlos. As
pues, en lugar de ver como ya se hizo en esta asignatura la creacin de ficheros ejecutables y los mecanismos del sistema para comunicarse con los programas (las llamadas), ahora nos centraremos en el estudio de las operaciones
que permiten gestionar los procesos, en concreto en las que permiten crearlos, destruirlos y modificarlos. Antes de nada, sera necesario que profundizsemos brevemente en el concepto de proceso, que ya se ha presentado en esta
asignatura, y en la gestin interna de los procesos que lleva a cabo el sistema
operativo (SO).

Objetivos
Los materiales didcticos de este mdulo contienen las herramientas necesarias para alcanzar los siguientes objetivos:
1. Entender el concepto de proceso como objeto gestionado por el SO.
2. Conocer las diferentes partes que componen un proceso y ver cmo se representa este proceso en el interior del sistema.
3. Entender los estados en que puede encontrarse un proceso y los motivos
por los cuales un proceso puede cambiar de estado.
4. Saber qu es el ciclo de vida de los procesos y conocer las relaciones entre
procesos.
5. Comprender el concepto de herencia y ver qu repercusiones tiene la herencia en la creacin de procesos.
6. Conocer las diferentes posibilidades que nos ofrece el hecho de poder cambiar algunos de los elementos que componen los procesos, sobre todo en
relacin con los redireccionamientos.
7. Entender el concepto de seal de software y estudiar su relacin con la destruccin de procesos.

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

La gestin de procesos

1. El proceso: una mirada desde el interior del sistema

Un proceso es bsicamente un entorno formado por todos los recursos ne-

Podis ver el concepto de proceso


en el subapartado 2.1. del mdulo
didctico El sistema operativo:
una mquina virtual.

cesarios para ejecutar programas. Desde el punto de vista del SO, un proceso es un objeto ms que hay que gestionar y al cual hay que dar servicio.

Para gestionar los procesos y darles servicios, el sistema operativo tiene que
proporcionar herramientas o tiene que llevar a cabo acciones que permitan
conseguir los siguientes objetivos:
Crear y eliminar procesos.
Garantizar que los procesos dispongan de los recursos necesarios para
avanzar en su ejecucin.
Actuar en casos excepcionales durante la ejecucin del proceso*.
Proporcionar los mecanismos necesarios para que los procesos se comuni-

* Consideramos casos
excepcionales sucesos como
las interrupciones, los errores, etc.

quen, ya sea para intercambiar informacin, ya sea para sincronizarse durante la ejecucin.
Mantener estadsticas sobre el funcionamiento de los procesos.
Temporizar la ejecucin de un proceso: hacer que un proceso se ejecute
cada cierto tiempo.
Otros servicios miscelneos.
En este apartado realizamos una introduccin a la gestin que el SO lleva a
cabo sobre los procesos. Veremos las estructuras de datos que representan internamente un proceso y la forma como pueden ejecutarse concurrentemente
varios procesos en un nico procesador.

1.1. Los elementos de un proceso y su representacin


Tal y como hemos visto, el SO construye los procesos de acuerdo con un conjunto de elementos que son necesarios para la ejecucin de un programa. Para
gestionar este conjunto de recursos como un todo, el sistema rene informacin de stos en una estructura de datos denominada bloque de control de
procesos* o PCB. A cada proceso le corresponde su propio PCB. Los campos
ms importantes que configuran los PCB son los siguientes:
1) El identificador del proceso. Es el cdigo nico que identifica de manera
biunvoca cada uno de los diferentes procesos que se encuentran en ejecucin

La expresin Process Control Block


o PCB es el equivalente ingls
del concepto bloque de control
de procesos.

FUOC P05/75097/00809 Mdulo 6

La gestin de procesos

en el sistema y que, por tanto, tiene que ser distinguido individualmente. Por
lo general, este identificador es numrico.
2) El estado del proceso. Este campo indica el estado del proceso en el momento actual, dentro de unas posibilidades determinadas (run, ready, wait, etc.). El
estado de un proceso y su significado aparecen descritos ms adelante.

Podis ver los estados de un proceso


y su significado en el subapartado
1.3. de este mdulo didctico.

3) El contador del programa. Este campo es fundamental porque seala la


instruccin que estaba a punto de ejecutarse justo en el momento en que se
produce una interrupcin. Cuando el proceso puede continuar, lo hace exactamente en este punto.
4) Los registros internos de la CPU. Son registros utilizados por todos los
procesos. Por lo tanto, despus de una interrupcin no es suficiente con continuar la ejecucin del proceso en el punto donde se dej, sino que tambin
hay que encontrar un entorno idntico al que tena antes de producirse la interrupcin. Para contar con esta posibilidad tambin es necesario que guardemos el valor de los registros.
5) El estado de la memoria. Es difcil generalizar acerca de lo que necesita
cada sistema operativo para tener toda la informacin relativa a la memoria
de cada proceso, pero podemos dar algunas ideas, como la cantidad de memoria asignada, el lugar donde se encuentra, el tipo de gestin que se lleva a cabo,
las protecciones de cada parte, las comparticiones, etc.

6) Contabilidad y estadsticas. El sistema operativo obtiene para cada proceso una serie de informacin relativa al comportamiento de cada usuario. Esta
informacin tiene un gran valor para los administradores de sistema, pero no
demasiado para los usuarios o los programadores.

7) El estado de los dispositivos de entrada/salida. Los dispositivos de entrada/salida asignados, las solicitudes pendientes, los ficheros abiertos, etc. tambin forman parte del entorno de ejecucin.

8) El dominio de proteccin. Este campo contiene informacin de los dominios a los cuales pertenece el proceso y de los derechos que tienen asociados.

Podis ver los dominios de


proteccin en el subapartado 4.1.
del mdulo didctico El sistema
de ficheros.

9) La planificacin de la CPU. En este campo se agrupa informacin relativa


a la forma como el proceso accede al procesador en concurrencia con los otros
procesos.

10) Otras informaciones. Cada sistema operativo mantiene otras informaciones particulares en funcin de diferentes aspectos, como por ejemplo el fabricante del sistema operativo, el tipo de orientacin* y el tipo de explotacin**.

* El trabajo en tiempo real,


las comunicaciones, etc.
** Uso privado, uso pblico, etc.

FUOC P05/75097/00809 Mdulo 6

De acuerdo con los PCB, el sistema gestiona la ejecucin de los programas contenidos en la memoria de los procesos. En los siguientes subapartados analizaremos los principales componentes de esta gestin teniendo en cuenta las
necesidades de un sistema multiprogramado.

1.2. La ejecucin concurrente


En la figura 1 podemos ver la ejecucin concurrente de un conjunto de procesos (P1, P2 y P3) sobre un sistema monoprocesador multiprogramado. En funcin de la escala de tiempo con la que examinemos la evolucin de los
procesos en el sistema, podemos tener diferentes versiones.
Figura 1

1) La primera escala de tiempo, que se ve en la figura 1a, corresponde al punto


de vista del usuario. Aqu parece que la ejecucin de los tres procesos se efecta
en paralelo, y en apariencia cada proceso utiliza siempre el procesador. sta es
la impresin que se quiere dar en los sistemas multiusuario: que cada usuario
tiene una buena interactividad con el sistema y que el usuario est solo trabajando ante la mquina. En realidad, en un sistema que trabaja en modalidad
de tiempo compartido, esto no es cierto.

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

10

La gestin de procesos

2) Si nos fijamos en el comportamiento de los procesos a una escala de tiempo


menor, veremos que se da una multiplexacin del procesador en el tiempo (observad la figura 1b). Ampliando la figura 1a (haciendo un zoom), podemos observar que no hay una ejecucin real en paralelo de los procesos; slo uno de ellos
est en ejecucin real. Para conseguir el efecto de ejecucin concurrente se lleva
a cabo una conmutacin entre los procesos que se reparten el tiempo del procesador. Estas conmutaciones se denominan cambio de contexto.
3) finalmente, ampliando ms la imagen, es decir, a una escala de tiempo todava menor, podemos ver el detalle de las transiciones entre procesos o cambio
de contexto (observad la figura 1c). Podemos observar que tiene que aparecer
un fragmento de cdigo nuevo para gestionar la interrupcin que provoca el
cambio, y para ello es necesario llevar a cabo las siguientes operaciones:
Guardar el estado del procesador tal y como lo tena el proceso P1 en el instante en que se ha producido la interrupcin sobre su PCB.
Localizar el PCB del proceso P2.
Restaurar el estado del procesador guardado en el segundo PCB.
El estado del procesador en un instante concreto est formado por los valores
contenidos en cada uno de los registros en lenguaje mquina, por el puntero a
la pila, por el contador de programa y, en general, por toda la informacin que
configura un proceso. Los valores concretos de este conjunto de registros en un
instante de la vida de un proceso se conocen como contexto del proceso.

1.3. Los estados de un proceso


En un sistema multiprogramado como el que hemos descrito en el subapartado anterior, con muchos procesos y un procesador, en un momento determinado slo puede haber un proceso en ejecucin, y el resto de los procesos
puede estar esperando su turno para acceder al procesador o la finalizacin de
una operacin de entrada/salida. Esta variedad de situaciones se puede representar con un diagrama de estados como el de la figura 2, donde los nodos representan los estados en que pueden encontrarse los procesos, y los arcos son
las acciones que hacen que un proceso cambie de estado.
Cuando el sistema acaba de crear un proceso, este proceso se encuentra en el
estado inicial (1), el estado ready. El sistema puede salir de este estado por estas dos causas:
1) Un acontecimiento externo al propio proceso, que se puede deber a la accin de otro proceso mediante una seal de software, provoca la finalizacin
del proceso (2).

Ready significa: Lo tengo todo


a punto y estoy preparado para
recibir la CPU y trabajar.

FUOC P05/75097/00809 Mdulo 6

11

La gestin de procesos

2) El gestor le asigna la CPU (3) y el proceso empieza a ejecutar sus instrucciones y pasa al estado run.
Del estado run se puede salir por los tres motivos que presentamos a continuacin:
1) El proceso ejecuta la ltima lnea de cdigo y acaba (4).

2) El proceso tiene que esperar un acontecimiento externo. El ejemplo ms


normal es cuando se solicita una operacin de entrada/salida (5) y el proceso
espera que sea servida*. En este caso, el proceso pasa al estado wait y espera
hasta que la peticin se haya servido.

3) Cuando el sistema operativo trabaja en la modalidad de tiempo compartido, si el proceso supera la cuota mxima de tiempo de uso de CPU que tiene
asignada (6), deja el procesador y vuelve al estado ready.

Cuando un proceso sale del estado run para pasar a ready o wait, se produce un
cambio de contexto, como se ha indicado en el subapartado anterior.

Figura 2

Finalmente, los procesos tienen dos destinos posibles tras salir del estado wait:
1) Uno hacia el estado ready, cuando finaliza la operacin por la cual esperaban
(7) o, dicho de otro modo, cuando el proceso tiene suficiente informacin y puede continuar. Por ejemplo, si el proceso estaba pendiente de una operacin de entrada/salida y ya ha llegado la informacin esperada porque el usuario ha pulsado
una tecla.

* Por ejemplo, una entrada


de informacin por teclado.

Podis ver la ejecucin de procesos


en la modalidad de tiempo
compartido en el subapartado 2.3.
del mdulo didctico Introduccin
a los sistemas operativos.

FUOC P05/75097/00809 Mdulo 6

12

2) Otro, hacia la finalizacin del proceso (8), debida a un acontecimiento externo al propio proceso, como suceda en el estado ready.

Para saber qu hace cada uno de los procesos y as poder controlar sus recursos,
el sistema operativo mantiene unas colas de procesos en funcin de su estado.
As, el sistema tiene una cola de procesos preparados (ready) y una de procesos
en estado de espera (wait). No podemos hablar de una cola de procesos en ejecucin, ya que en entornos monoprocesador slo hay un proceso en ejecucin. De este modo, el procedimiento del ncleo del SO que se encarga de la
planificacin del procesador puede examinar la lista de procesos preparados
para asignar el procesador al proceso que resulte ms conveniente.

Figura 3

ID: identificador de procesos

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

13

La gestin de procesos

2. El ciclo de vida de un proceso

Como hemos ido viendo en esta asignatura, los procesos constituyen uno ms
de los objetos que gestiona el SO. A diferencia de muchos otros objetos, los
procesos son dinmicos y suelen tener un tiempo de vida limitado*. En este
apartado analizaremos el ciclo de vida de los procesos y las operaciones que se
relacionan con stos.

Las diferentes etapas de la vida de un proceso son las siguientes:


1) Creacin, nacimiento o inicio. En esta etapa se asignan e inicializan los
recursos necesarios para crear un proceso nuevo.
2) Desarrollo. Una vez se han creado, los procesos evolucionan a partir de la
ejecucin del programa que contienen. Este desarrollo puede llevarlos a modificar los recursos con los que se han constituido inicialmente.
3) Destruccin, muerte o finalizacin. Tras finalizar el trabajo que especifica la aplicacin que se ejecuta en el marco del proceso, el SO destruye el proceso y libera los recursos que se le haban asignado.
En este apartado nos disponemos a analizar el ciclo de vida del proceso, y para
hacerlo estudiaremos en primer lugar los procesos de creacin y destruccin
de un proceso; a continuacin, las relaciones que se dan entre estas dos acciones y, finalmente, veremos algunas de las modificaciones que se pueden efectuar sobre el entorno que constituye un proceso durante su existencia.

2.1. La creacin y la destruccin de procesos

Los procesos son elementos dinmicos que se crean, operan durante un intervalo de tiempo y se destruyen. El sistema es el encargado de proporcionar el
conjunto de llamadas necesarias para llevar a cabo todas estas acciones. En
este subapartado analizaremos las operaciones de creacin y destruccin de
procesos.

1) Creacin de procesos

La creacin de un proceso nuevo es el resultado de la ejecucin de una


llamada al sistema del tipo crear_proceso, que es invocada, como todas
las llamadas, por un proceso ya existente.

* Los procesos se crean, interactan


con el sistema y mueren.

FUOC P05/75097/00809 Mdulo 6

14

La ejecucin de la llamada crear_proceso comporta la creacin de un entorno de ejecucin que contiene los siguientes elementos:
La memoria donde residirn el programa, el cdigo y los datos con que
operar el proceso.
El punto de entrada desde donde se ejecutar el programa que contenga la
memoria.
El entorno de entrada/salida con el cual el proceso se comunicar con el exterior.
Los atributos relacionados con los dominios de proteccin con los que el sistema operativo verificar la legalidad de las operaciones que quiera efectuar.

Figura 4

Cada uno de estos elementos del entorno se tendr que especificar en el sistema para que ste pueda crear un proceso nuevo. La especificacin de estos elementos se puede realizar de las dos formas siguientes:
a) De manera explcita, con los parmetros de la llamada al sistema que crea
el proceso.
b) De manera implcita, haciendo que el sistema tome unos valores por defecto.
Normalmente, los sistemas combinan las dos alternativas: obligan a especificar algunos de estos elementos mediante los parmetros de la llamada, y dejan
otros con valores por defecto.
Otro aspecto que hay que tener en cuenta es la relacin que se establece entre
el entorno desde donde se ejecuta la llamada al sistema que dar lugar al nuevo proceso y el nuevo entorno que se crear. Para ver esta relacin con una
mayor claridad partimos del hecho ya mencionado de que los procesos son
creados por el sistema operativo a peticin de otros procesos. Esta situacin
hace que los procesos se puedan ver desde el punto de vista de la descenden-

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

15

La gestin de procesos

cia, en la que los procesos mantienen relaciones de parentesco como la de padre e hijo. En este mbito podemos hablar de los conceptos de herencia entre
procesos y sincronizacin entre procesos padre e hijo.
Tras haber creado el proceso, el sistema le otorga un nombre (generalmente
un nombre dentro de un espacio lineal) mediante el cual se podr referenciar

Podis ver la herencia entre


procesos en el subapartado 2.2.
y la sincronizacin entre procesos
en el subapartado 2.3. de este mdulo
didctico.

Podis ver los espacios lineales


en el subapartado 3.2. del mdulo
didctico El sistema de ficheros.

en acciones de control y manipulacin, tanto desde otros procesos como directamente desde el SO. Este nombre tiene que ser nico para cada proceso,
no slo durante la vida del proceso al que hace referencia, sino durante toda
la vida del sistema.
La finalidad del sistema de tener un nombre nico para cada proceso durante
toda la vida del sistema es evitar confusiones y malos funcionamientos del SO
a causa de la reutilizacin de nombres. Por ejemplo, imaginemos dos procesos
(proceso A y proceso B) que colaboran y se sincronizan mediante seales gracias al hecho de que conocen sus identificadores. Si uno (el proceso B) acaba
de manera imprevista y su indentificador es reutilizado para crear otro proceso, entonces el proceso A se est sincronizando con un proceso que tiene un
identificador B, que no es el proceso con el que se haba previsto una comuni-

Podis ver los identificadores de los


procesos en el subapartado 1.1. del
mdulo didctico La concurrencia
y la comunicacin.

cacin. El resultado es que quiz ninguno de los dos procesos funcione correctamente o, lo que todava es ms problemtico, que se haya abierto un agujero
en la proteccin del sistema.

As pues, una posible estructura de la llamada crear_proceso podra ser:


Id_proceso = crear_proceso (entorno_mem, nombre_prog, punto_ejecucin,
entorno_E/S, entorno_dominio).

Con esta solucin, si el punto de ejecucin del proceso hijo fuese una copia del
del padre, como ya habamos comentado, el valor de retorno de crear_proceso
tendra que ser diferente en funcin de si el proceso es el padre o el hijo.

Podis ver en el caso de UNIX los


diferentes valores retornados para la
operacin crear_proceso segn el tipo de
proceso en el apartado 4 de este mdulo
didctico.

2) Destruccin de procesos

La destruccin de un proceso comporta la destruccin del entorno que


lo constituye y la liberacin de los recursos que tena asignados.

La destruccin de un proceso por parte del sistema puede ser consecuencia de


alguna de las siguientes situaciones:

a) La ejecucin de la llamada al sistema destruir_proceso especfica para este


motivo. En la mayor parte de los sistemas, esta llamada provoca la destruccin
del proceso que la invoca, y no se puede dirigir a otros procesos.

Podis ver las situaciones que


comporta la destruccin de un
proceso en la figura 7 del subapartado
4.4. del mdulo didctico El sistema
operativo: una mquina virtual.

FUOC P05/75097/00809 Mdulo 6

16

La gestin de procesos

b) El mal funcionamiento del proceso destruido. Si el sistema detecta que un


proceso no funciona correctamente y efecta operaciones no permitidas, lo
destruye. Estas operaciones suelen asociarse a las excepciones provocadas por
acciones como pueden ser acceder a posiciones de memoria que no se tienen
asignadas, ejecutar instrucciones privilegiadas o efectuar operaciones aritmticas incorrectas como, por ejemplo, una divisin por cero, etc.
c) El efecto lateral de la ejecucin, por parte de otro proceso, de una llamada
al sistema diferente de la llamada destruir_proceso, que provoca una excepcin
sobre el proceso que se destruye.
Ahora nos centraremos en exclusiva en el primer punto: la destruccin de un
proceso como resultado de la ejecucin de la llamada al sistema destruir_proceso.
Las dos ltimas situaciones las veremos ms adelante.
Todo proceso, cuando finaliza sin incidentes la ejecucin del programa que almacena, tiene que ser destruido. Esta destruccin puede ser el resultado de la ejecucin de la llamada destruir_proceso. Para que se lleve a cabo la destruccin, el
compilador inserta automticamente, de manera transparente para el software, la
llamada al sistema destruir_proceso como ltima instruccin del programa. De
manera adicional, el programador puede incluir invocaciones a la llamada
destruir_proceso para provocar la finalizacin del proceso en situaciones controladas por el programa.

As pues, la llamada para destruir un proceso podra ser sta:


Estado = destruir_proceso (id_proceso).

2.2. La herencia entre procesos

La herencia entre procesos es la relacin que se establece entre los diferentes elementos que configuran el entorno del proceso padre y los que
configuran el entorno del proceso hijo.

En concreto, tenemos los tres tipos de herencia que exponemos a continuacin:


1) Comparticin: el proceso padre y el proceso hijo comparten un mismo
elemento y, en consecuencia, las manipulaciones de este elemento que se lleven a cabo afectarn a ambos procesos de la misma manera.
2) Copia: el SO crea los elementos que configuran el entorno del proceso hijo
como una copia de los elementos del proceso padre en el momento de invocar

Podis ver la destruccin de


procesos como efecto derivado de
la ejecucin de otros procesos
o de las llamadas al sistema solicitadas
por otros procesos en el apartado
3 de este mdulo didctico.

FUOC P05/75097/00809 Mdulo 6

17

La gestin de procesos

la operacin de creacin. A partir del momento en que el proceso hijo ha sido


creado, los dos entornos evolucionan de forma diferente.
3) Valores nuevos: en este caso, el SO crea de nuevo los elementos del proceso hijo y lo hace sin tener en cuenta los del proceso padre.
Cada elemento que configura el entorno puede tener una herencia diferente
que puede venir predeterminada por el sistema o bien puede establecerse mediante los parmetros de la llamada al sistema de creacin. A continuacin
analizaremos lo que representan estas posibilidades con respecto a cada uno
de los elementos del entorno:
1) La memoria y su contenido. La memoria, como hemos visto anteriormente, se puede organizar por segmentos. Para simplificar la exposicin, nos

Podis ver la segmentacin


de la memoria en el subapartado
3.1. del mdulo didctico La gestin
de la memoria.

centraremos en tres segmentos: el cdigo, los datos y la pila. Los atributos de


herencia pueden ser diferentes para cada segmento; el cdigo y los datos pueden tener cualquiera de los tres atributos de herencia, mientras que la pila slo
puede tener herencia de copia o de valores nuevos, pero no compartida, ya
que refleja el estado de llamadas a procedimientos y a variables locales de cada
proceso. Esto ltimo se debe al hecho de que la pila es necesaria para garantizar que los dos procesos (padre e hijo) evolucionan de manera independiente.
As pues, las herencias posibles para la memoria son las siguientes:
a) Comparticin: los procesos hijo y padre comparten el mismo segmento de
memoria fsica. sta es la situacin ms conveniente para segmentos de cdigo
y, en general, para segmentos que contengan informacin que slo tiene que
ser leda. En caso de comparticin de un segmento de datos, cualquier modificacin que realice uno de los dos procesos alterar el estado de la memoria.
Esta situacin permite la colaboracin de los procesos mediante la comparticin de informacin.
b) Copia: los segmentos del proceso hijo son una copia exacta de los del padre
en el instante de la creacin. Cuando se crea un proceso por duplicacin del
proceso padre, hay que copiar, como mnimo, todos los segmentos que se pueden modificar durante la ejecucin independiente del proceso padre y del hijo, que son los segmentos de datos y de pila. Otro caso es cuando se crea un
proceso por comparticin, y padre e hijo comparten cdigo y datos. En esta
situacin, el segmento de pila no se puede compartir, por lo que hay que copiarlo. El motivo, como ya se ha expuesto, es que la pila refleja el estado de las
llamadas a procedimientos y a variables locales de cada proceso que son fruto
de la ejecucin independiente de los procesos.
c) Valores nuevos: en este caso se carga un fichero ejecutable que definir de
nuevo el contenido de la memoria.
2) El punto de inicio de ejecucin dentro de la memoria. El punto de inicio
de ejecucin del programa depende del contenido de la memoria, en concreto

Podis ver la problemtica asociada


a la comparticin de la informacin
en el apartado 1 del mdulo didctico
La concurrencia y la comunicacin.

FUOC P05/75097/00809 Mdulo 6

18

La gestin de procesos

del contenido del segmento de cdigo. En caso de copiar o compartir el cdigo


con el proceso padre, el punto de ejecucin puede ser o bien el mismo que el
del proceso padre, o bien una direccin que se introduce como parmetro de
la operacin de creacin. En caso de cargar en la memoria un programa nuevo,
el punto de ejecucin ya est especificado en el fichero ejecutable.
As pues, las posibles herencias sern stas:
a) Copia: el punto de ejecucin del proceso padre se copia en el hijo. Este caso
slo es posible si se comparten o se copian los segmentos de cdigo y de datos.
Para distinguir el proceso padre del proceso hijo, lo ms habitual es que los dos
procesos reciban valores de retorno diferentes de la llamada de creacin al sistema.
b) Valores nuevos: el punto de ejecucin se define o bien por los parmetros
de la llamada al SO, o bien por el fichero ejecutable que definir el contenido
de la memoria.
El entorno de comparticin no es posible, ya que los procesos padre e hijo
cuentan con ejecuciones independientes.
3) El entorno de entrada/salida. La herencia del entorno de entrada/salida es
independiente de la de memoria. El concepto de entorno de entrada/salida hace
referencia a las sesiones de acceso a dispositivos que el proceso encontrar abiertas
de manera implcita.
El entorno de entrada/salida puede tener las tres modalidades de herencia que
presentamos a continuacin:
a) Comparticin: el proceso padre comparte con el proceso hijo las sesiones
de trabajo con los dispositivos que tenga abiertos en el momento de la creacin. Las modificaciones que uno de los dos procesos realice sobre estas sesiones de trabajo tambin afectarn al otro. As, por ejemplo, en el caso de una
sesin de acceso secuencial, los dos procesos compartirn un nico puntero de
acceso. Las sesiones de acceso a los dispositivos que abran a partir del momento de la creacin sern independientes en cada proceso.
b) Copia: el proceso hijo encuentra abiertas las mismas sesiones de acceso a
los dispositivos que tena abiertas el padre, pero con la diferencia de que las
acciones que se efecten en estas sesiones no afectarn a las del otro.
c) Valores nuevos: en este tercer caso, el proceso hijo encuentra abierto un
conjunto de sesiones de acceso a los dispositivos que se especifican como parmetros de la llamada al sistema.
4) El dominio de proteccin. El dominio de proteccin que hereda un proceso est formado por los atributos de los dominios a los que pertenecer y por

Podis ver la coincidencia de los


puntos de ejecucin de los procesos
padre e hijo en el apartado 4
de este mdulo didctico.

FUOC P05/75097/00809 Mdulo 6

19

La gestin de procesos

sus derechos asociados. En el caso de un sistema con protecciones basadas en


capabilities, la herencia tambin incluye la lista de capabilities inicial del nuevo

Podis ver las capabilities en el


subapartado 4.4. del mdulo
didctico La gestin de ficheros.

proceso. Las capabilities tienen un comportamiento anlogo al de los dispositivos virtuales.


Por tanto, en la siguiente descripcin slo haremos referencia a los atributos
de dominio; consideraremos que stos no se pueden copiar, de manera que el
dominio de proteccin puede tener las dos modalidades de herencia que ahora presentamos:
a) Comparticin: el proceso hijo pertenece al mismo dominio que el proceso
padre o, lo que suele ser lo mismo, pertenecen al mismo usuario. sta es la situacin ms habitual, e implica que las acciones del proceso hijo sean imputables al mismo usuario que las del proceso padre.
b) Valores nuevos: sin embargo, en algunas ocasiones el proceso hijo necesita
unos privilegios diferentes de los que tiene asociados el usuario al cual pertenece el proceso padre. En este caso, y en condiciones controladas de proteccin, se puede especificar un nuevo dominio para el proceso hijo. El cambio
de dominio suele ir acompaado de un cambio de programa y, para mantener
el sistema protegido, el usuario que configura el nuevo dominio tiene que haber escrito el nuevo programa.

2.3. La sincronizacin y el estado de finalizacin en la destruccin


de procesos
Hasta ahora hemos analizado el mecanismo de creacin y destruccin de procesos bsicamente desde la ptica del proceso creado, y no nos hemos fijado
en las acciones que puede efectuar el proceso padre como consecuencia de la

Podis ver con detenimiento y


desde un punto de vista ms general
el concepto de sincronizacin en el
mdulo didctico La concurrencia
y la comunicacin.

creacin de un hijo. Los procesos padre pueden tener que sincronizar su ejecucin con la finalizacin de los procesos que han creado y, al mismo tiempo,
necesitan conocer el estado en que se ha producido esta finalizacin.

2.3.1. La sincronizacin
Ya vimos un ejemplo de la necesidad de sincronizacin entre procesos padre
e hijo cuando hablbamos de las modalidades de ejecucin de las rdenes: de
primer plano, de fondo y diferidas. Si nos fijamos en las dos primeras
modalidades, se puede identificar un proceso padre, que es el que ejecuta el
intrprete de rdenes, y unos procesos hijos, que son los que ejecutan las rdenes. As pues, podemos ejecutar las rdenes de estas tres formas:
1) En la modalidad de primer plano, el intrprete de rdenes espera que finalice la orden antes de solicitar una nueva orden para ejecutar. En esta situacin, el proceso padre tiene que esperar a que el proceso hijo finalice y, para

Podis ver las modalidades


de ejecucin de rdenes en el
subapartado 1.3. del mdulo
didctico El sistema operativo:
una mquina virtual.

FUOC P05/75097/00809 Mdulo 6

20

conseguirlo, el SO debe proporcionar las herramientas para congelar la ejecucin del proceso padre hasta que el proceso hijo sea destruido.
2) En la modalidad de ejecucin de fondo, el intrprete de rdenes no espera a que finalice la orden, sino que inmediatamente despus de haber creado
el proceso que ejecutar la orden, contina adelante y solicita una orden nueva. En esta otra situacin, el proceso padre slo necesita que el sistema lo retenga mientras crea el nuevo proceso, con el fin de retornarle el identificador
del proceso si la creacin se ha ejecutado de manera correcta o, en caso contrario, retornarle un error.
3) Una tercera posibilidad es la modalidad mixta, que consiste en una combinacin de las dos modalidades anteriores. Entonces un proceso padre crea
un proceso hijo en modalidad de fondo y, a partir de un determinado instante
de su ejecucin, decide esperar a que finalice uno de sus procesos hijos. El SO
tiene que proporcionar llamadas especficas de sincronizacin.
La figura que podemos ver a continuacin muestra los tres modelos de ejecucin:
Figura 5

Como consecuencia de la sincronizacin entre los procesos padre e hijo, el sistema puede ofrecer los siguientes modelos de llamadas al sistema:
a) Introducir un parmetro, modo_ejecucin, que indique si el proceso padre
tiene que esperar la destruccin del hijo o no.

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

21

Id_proceso = crear_proceso(modo_ejecucin, entorno_mem, nombre_prog,


punto_ejecucin, entorno_E/S, entorno_dominio).
Estado = destruir_proceso(id_proceso).

b) Conseguir que para crear no sea necesario esperar nunca la finalizacin de


un proceso y se pueda proporcionar una llamada especfica que permita llevar
a cabo esta funcin.

Id_proceso = crear_proceso(entorno_mem, nombre_prog, punto_ejecucin,


entorno_E/S, entorno_dominio).
Estado = destruir_proceso(id_proceso).
Estado = esperar_finalizacin(id_proceso).

2.3.2. El estado de finalizacin de los procesos

Como ya hemos adelantado, para el proceso padre puede resultar interesante


conocer el punto donde la aplicacin ha finalizado o el motivo de esta finalizacin. Con este objetivo, la llamada destruir_proceso suele tener un parmetro
que el programador puede utilizar para notificar al proceso padre el motivo de
la finalizacin o, lo que es lo mismo, el punto del algoritmo donde se ha decidido finalizar el proceso.

La llamada destruir_proceso quedara de esta manera:


Estado = destruir_proceso(id_proceso, estado_finalizacin).

Adems, tal y como hemos visto anteriormente, la ejecucin de un proceso


puede finalizar como consecuencia de acciones no previstas por el programador: por errores de ejecucin o por efectos laterales de la ejecucin de otras llamadas al sistema. En estos casos, el sistema operativo se encarga de codificar
los motivos de la finalizacin para notificrselos al proceso padre.

El sistema operativo debe proporcionar una llamada que permita a los procesos padres recuperar los parmetros de finalizacin de sus procesos hijos; esta
llamada suele ser la misma que les permite sincronizarse con la finalizacin
del proceso hijo: esperar_finalizacin.

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

22

La gestin de procesos

2.4. Los cambios en el entorno de ejecucin


Tras haber creado un proceso, el SO inicia la ejecucin del cdigo que contiene
este proceso. Como resultado de esta ejecucin, el entorno puede evolucionar
y cambiar, y los cambios pueden afectar a cualquiera de los elementos que
configuran el proceso: la memoria, el contenido de la memoria, el entorno de
entrada/salida o el dominio de proteccin. Para todos ellos, el SO tiene que
proporcionar llamadas que permitan modificarlos.
A lo largo de esta asignatura hemos estudiado las llamadas que hacen referencia a los dispositivos, a los ficheros y a la proteccin. En este subapartado nos
centraremos especialmente en aquellas que modifican el contenido y la es-

Podis encontrar las llamadas


al sistema relacionadas con los
dispositivos, los ficheros y la proteccin
en los mdulos didcticos Los
dispositivos de entrada/salida
y El sistema de ficheros.

tructura del espacio de la memoria en el marco del cambio de imagen, y profundizaremos en aquellas otras que cambian el entorno de entradas/salidas en
el marco de los redireccionamientos o, en otras palabras, en el marco de la
asignacin implcita de dispositivos virtuales a reales.
1) Cambio de imagen
Los sistemas operativos tienen que permitir que los procesos carguen nuevos
programas en la memoria para ser ejecutados. Esta accin se puede realizar de
las dos maneras siguientes:
a) Al mismo tiempo que se crea un nuevo proceso.
b) A posteriori, una vez se ha creado el proceso, mediante la invocacin de
una llamada especfica (cargar).
En funcin del SO se ofrecern combinaciones diferentes de estas dos posibilidades; aqu vamos a enfocar la explicacin partiendo de un SO que slo ofrece la segunda posibilidad. Consideraremos, entonces, que los procesos nuevos
en un principio siempre ejecutan el mismo cdigo que el proceso padre, ya sea
porque lo comparten, ya sea porque se ha copiado. A posteriori, una vez se ha
iniciado la ejecucin del nuevo proceso, ste decidir si tiene que cargar un
nuevo cdigo o no.
ste es el caso del funcionamiento del intrprete de rdenes que, como veremos ms adelante, en primer lugar obtendra la orden que tendra que llevar
a cabo por la entrada estndar, analizara la existencia de algn ejecutable con
posibilidades de hacerlo y, en tal caso, creara un nuevo proceso igual que l.
Este nuevo proceso, al ejecutarse, cargara la aplicacin que da servicio a la orden recibida.
La carga de un nuevo ejecutable provoca la reconfiguracin total del espacio
lgico del proceso sobre el cual se efecta, de manera que todos los valores
de variables y constantes, los procedimientos y las funciones que se encontraban dentro del espacio lgico del proceso antes de la carga desaparecen.

Podis ver el funcionamiento


del intrprete de rdenes en el
subapartado 4.2. de este mdulo
didctico.

FUOC P05/75097/00809 Mdulo 6

23

La gestin de procesos

Para que el cdigo cargado pueda utilizar informacin elaborada por el cdigo anterior a la carga, tiene que utilizar mecanismos o dispositivos de almacenamiento que sirvan de puente entre ambos. Una manera sencilla de
hacerlo es utilizar el sistema de ficheros o, en general, un dispositivo de almacenamiento. A pesar de esto, los SO ofrecen la posibilidad de pasar la informacin a travs de ellos mismos en forma de parmetros de la llamada
cargar, los cuales son recibidos por el nuevo programa como parmetros de
entrada de la funcin principal.
El paso del cdigo a C
Si se utiliza el lenguaje C, el nuevo programa recibira la informacin del cdigo anterior
a su carga como parmetros de la funcin main:

main (argc, argv, env)


int argc;
char **argv, **env;

Tenemos que apreciar que la llamada cargar slo afecta a la estructura y al contenido de la memoria, as como al contador de programa, que nos indica la
prxima instruccin que hay que ejecutar. El resto de los elementos que configuran el entorno del proceso no tiene por qu verse afectado, de manera que
el nuevo ejecutable debe encontrar el mismo entorno de entrada/salida y el
mismo entorno de proteccin. A pesar de todo, esta afirmacin puede variar
en funcin de si el SO asigna otras funciones a la llamada cargar.

La llamada cargar podra tener la siguiente forma:


Estado = cargar(nombre_ejecutable, parmetros).

Esta llamada slo retorna un valor en caso de error, ya que si tiene xito, todo
el cdigo y los datos del programa que la contienen habrn desaparecido de la
memoria.
Overlay
En todos los sistemas, el tamao de los programas est limitado por el tamao del espacio
lgico. Adems, en los sistemas que carecen de memoria virtual, el tamao del espacio lgico
se encuentra limitado por la cantidad de memoria fsica que puede asignar el sistema a cada
proceso. Esta limitacin hace que ciertas aplicaciones no quepan en el espacio lgico y, en
consecuencia, impide que se puedan ejecutar.
Para solucionar este problema se utiliza la tcnica de los overlays, que consiste en dividir el ejecutable de la aplicacin en varias partes u overlays, de manera que en cualquier instante de la
ejecucin de la aplicacin slo sea necesario tener cargado en la memoria un subconjunto del
total de overlays. Durante la ejecucin, las aplicaciones tienen que controlar en cada momento
qu overlays necesitan y cules no, y deben indicarle al SO que sustituya unos por otros. El SO,
por su parte, tiene que proporcionar llamadas al sistema para sustituirlos.
Esta tcnica se aplica en sistemas sin gestin de memoria virtual, como el MS-DOS.

Podis ver las funciones de la


llamada cargar en el caso de UNIX
en el subapartado 5.2. del mdulo
didctico La gestin de ficheros,
y en el subapartado 4.4. de este mdulo
didctico.

FUOC P05/75097/00809 Mdulo 6

24

La gestin de procesos

Figura 6

2) Redireccionamientos de entrada/salida
La forma en que se introducen las modificaciones en general en el entorno de
entrada/salida de un proceso consiste en abrir y cerrar sesiones de acceso a los
dispositivos. En este subapartado nos fijaremos concretamente en cmo se pueden realizar los redireccionamientos de las entradas/salidas. Como se ha visto,
los redireccionamientos de las entradas/salidas se basan en la asignacin de dispositivos virtuales estndar a dispositivos reales. Para conseguir la independencia y la portabilidad de las aplicaciones, esta asignacin se tiene que hacer con
anterioridad a la ejecucin de los programas que configuran las aplicaciones y,
por consiguiente, de manera transparente para ellos. Este hecho es el que hemos
denominado asignacin implcita de los dispositivos virtuales.
El sistema puede llevar a cabo esta asignacin bsicamente de las tres formas
que presentamos a continuacin:
a) El proceso hijo puede heredar del proceso padre los dispositivos virtuales
que ste tenga abiertos.
b) El proceso padre especifica en los parmetros de llamada crear_proceso qu
dispositivos reales hay que asignar a los dispositivos virtuales del hijo.
c) El proceso hijo modifica su entorno de entrada/salida una vez se ha creado
y antes de cargar un nuevo programa.
La ltima de estas opciones es la que nos interesa en este subapartado.

Podis consultar las sesiones de


acceso al entorno de entrada/salida
en el subapartado 4.2. del mdulo
didctico Los dispositivos
de entrada/salida.

FUOC P05/75097/00809 Mdulo 6

25

La gestin de procesos

3. Las excepciones y las seales de software

Como hemos ido viendo, un SO define una nueva mquina con una semntica ms elaborada que la de la mquina fsica sobre la cual se ejecuta. A pesar
de este aumento del nivel semntico, el SO conserva muchas de las funciones
y los mecanismos de que dispone el hardware, y uno de estos mecanismos que
reproduce es el de las interrupciones. Los procesos pueden necesitar ser informados de acontecimientos que suceden de manera imprevista en cualquier
instante de la ejecucin de un programa.
As, por ejemplo, un proceso puede necesitar saber si se ha producido un
error en el acceso a la memoria para solicitar que se aumente el rea asignada
a una determinada variable; o tambin puede necesitar saber si un cierto terminal sobre el que trabaja se ha apagado, para acabar la aplicacin correctamente, etc.

Las seales de software son la herramienta que proporciona el sistema


operativo para trasladar el mecanismo de las interrupciones al mbito
del proceso. Igual que el mecanismo de hardware de las interrupciones,
las seales proporcionan apoyo a un amplio conjunto de situaciones
variadas que los procesos tienen que reconocer y atender con cierta urgencia.

La procedencia de las seales de software nos permite clasificarlas de esta


manera:
1) Los dispositivos de entrada/salida, que necesitan informar al proceso de
situaciones que pueden dar lugar a un error si el proceso no las conoce. Son
situaciones como, por ejemplo: la desconexin de un terminal, la pulsacin
de una tecla de control por parte del usuario, etc.
2) Las excepciones, que vienen provocadas por el proceso de manera involuntaria durante la ejecucin de una instruccin o a causa de la saturacin de
un elemento de hardware (overflow), de la violacin de un segmento o de una
instruccin errnea*.
3) Las llamadas explcitas al sistema, que se pueden realizar para enviar seales a un proceso determinado. Para poder hacerlo, el proceso que enva la
seal necesita tener permiso. En general, slo se permite enviar seales entre
procesos del mismo dominio de proteccin; se trata de seales como la orden
de eliminar un proceso que utiliza el administrador del sistema, o seales para
sincronizar la ejecucin de procesos que lo necesiten. Por ejemplo, un proceso

* Son instrucciones errneas


la divisin por cero, la raz cuadrada
de un nmero negativo, etc.

FUOC P05/75097/00809 Mdulo 6

26

que tiene como funcin inicializar una estructura de datos determinada podra utilizar una seal para informar a los procesos usuarios de esta estructura
que ya ha sido inicializada.
4) El reloj del sistema, que utilizan los procesos cuando necesitan llevar a
cabo una serie de acciones a intervalos concretos de tiempo. Por ejemplo, un
proceso que est esperando una cierta entrada desde un mdem puede solicitar que el reloj del sistema (timeout) lo avise dentro de un cierto lapso de tiempo para detectar si la lnea se ha cortado o no.
5) Y por ltimo, un proceso puede recibir una seal como el efecto lateral de
una llamada al sistema. Por ejemplo, un proceso padre puede recibir una seal que le indique que uno de sus procesos hijos ha sido destruido.
El tratamiento que da un proceso a una seal que le llega puede ser uno de los
tres tipos que presentamos a continuacin:
1) Un tratamiento definido por el mismo usuario. El proceso indica mediante una llamada al SO qu procedimiento hay que ejecutar cuando llegue
una seal determinada.
2) No dar ningn tratamiento (ignorar el acontecimiento). El proceso puede decidir no preocuparse de la seal y, por lo tanto, cuando llegue la seal
continuar su ejecucin normalmente, como si no hubiese pasado nada.
3) Un tratamiento dado por el SO. Algunas circunstancias que provocan seales se deben a un mal funcionamiento del proceso o pueden llevar a ste si
no se utilizan las medidas necesarias. En estos casos, si el proceso no ha definido un tratamiento, el sistema tiene que proporcionar uno. Por norma general, este tratamiento tiene asociada por defecto la destruccin del proceso al
cual iba destinada la seal. Por ejemplo, si un proceso efecta un acceso incorrecto a la memoria y el proceso no lo soluciona, el SO se ve en la obligacin
de destruir el proceso e informar de ello a su proceso padre.

As pues, el SO destruir un proceso cuando reciba una seal que no espera a causa de un error en su ejecucin, de un acontecimiento imprevisto en uno de los dispositivos a los que accede o por la actuacin
deliberada de otro proceso. En este caso, el SO se encarga de enviar el
estado de finalizacin al proceso padre para indicarle el motivo de la
destruccin.

Para finalizar, tenemos que apreciar que la programacin de las seales es una
informacin de cada proceso que configura el entorno de ejecucin y, como
tal, tiene que formar parte del PCB, y es necesario tenerlo en cuenta en el momento de la creacin de un nuevo proceso.

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

27

La gestin de procesos

4. La gestin de procesos en UNIX

En UNIX, un proceso es un entorno de ejecucin identificado por un

* PID es el acrnimo del trmino


ingls Process IDentifier.

nmero denominado PID*, que es el identificador del proceso y es


nico durante toda la vida del SO.

Los principales elementos que constituyen un proceso en UNIX son:


1) El espacio de memoria, formado por tres segmentos lgicos: uno de cdigo*, uno de datos y uno de pila. El segmento de cdigo puede ser compartido

* El segmento de cdigo tambin


se denomina segmento de texto.

por otros procesos; entre el segmento de datos y el de pila existe una porcin
de espacio lgico no asignada al proceso. Cuando conviene, el proceso puede
aumentar el segmento de datos con la llamada malloc.
2) El entorno de entrada/salida, que est formado por una tabla de file descriptors
(dispositivos virtuales), y es local a cada proceso. Cada entrada de esta tabla apunta

Podis ver los file descriptors


en el apartado 5 del mdulo
didctico Los dispositivos de
entrada/salida.

a otra tabla, que en este caso es de carcter global para el sistema, y contiene los
punteros de lectura secuencial, el modo de acceso y un puntero a la estructura
del SO que gestiona el dispositivo real asociado a un file descriptor. Finalmente,
el entorno de entrada/salida se complementa con la informacin de cul es el
directorio de trabajo actual.
3) El UID y el GID, que corresponden al nmero de identificador del usuario
y al nmero de identificador del grupo del usuario, hacen referencia al usuario y al grupo al que pertenecen los procesos dentro del dominio de proteccin.
4) El estado de los registros del procesador, que refleja en qu estado se encuentra la ejecucin del programa que contiene el proceso.
5) La informacin estadstica, que presenta informaciones tales como el
tiempo consumido de CPU, el volumen consumido de memoria o el nmero
de procesos hijos generados.
Figura 7

El UID y el GID...
... son los acrnimos
de los trminos ingleses
User Dentifier y Group
IDentifier, respectivamente.

FUOC P05/75097/00809 Mdulo 6

28

La gestin de procesos

4.1. La creacin y la destruccin de procesos


Las correspondencias entre las llamadas de UNIX y las que hemos visto en este
mdulo son:
Operacin

Llamadas de UNIX

Crear_proceso

fork

Destruir_proceso

exit

Esperar_finalizacin

wait

UNIX ha optado por tratar el tema de la creacin y la destruccin de procesos


de la manera ms sencilla posible. Las llamadas que ofrece tienen el mnimo
nmero posible de parmetros, y crean y destruyen los procesos a partir de
una definicin implcita en el sistema. A posteriori, y definindolo por programa, el usuario puede cambiar el entorno de ejecucin y hacer el proceso a su
medida. A continuacin veremos cmo acta cada una de las llamadas que hemos visto en el presente mdulo en el sistema operativo UNIX:
Figura 8

La creacin
y destruccin...
... de procesos en UNIX se ajusta a la filosofa general de UNIX
de ofrecer herramientas de uso
sencillas, que permitan desarrollar cualquier poltica que se
necesite.

FUOC P05/75097/00809 Mdulo 6

29

La gestin de procesos

1) La llamada fork no tiene ningn parmetro y crea un nuevo proceso hijo


que es un duplicado del proceso padre. En general, el PCB del hijo es una copia
del PCB del padre; el espacio de memoria del proceso hijo es una copia del espacio del padre y las entradas de la tabla de file descriptors apuntan a las mismas entradas de la tabla de punteros de lectura/escritura. El proceso hijo
pertenece al mismo usuario y grupo de usuarios que el padre. Ambos procesos
continan la ejecucin de manera independiente en el punto inmediatamente posterior a la llamada fork al sistema.
Normalmente, despus de la llamada fork, el proceso hijo tiene que ejecutar
un cdigo diferente del cdigo del padre. Para poder distinguirse, la llamada
fork retorna valores diferentes en funcin de si es el proceso padre o el hijo:
el hijo recibe un valor 0 y el padre recibe el identificador (PID) del hijo.
Durante la creacin de un nuevo proceso, UNIX controla los aspectos importantes que afectan al conjunto del sistema, como puede ser la disponibilidad

* Los recursos del sistema son


la memoria, las entradas en la tabla
de PCB, etc.

de recursos*. Un ejemplo concreto de este control es el hecho de que no permite que un usuario normal (y no procesos de sistema) ocupe la ltima entrada de la tabla de procesos, la ltima rea de memoria libre, etc. Si esto
ocurriese, quiz el sistema no se podra recuperar de situaciones en las que
sera necesario poner en marcha algn proceso del sistema de manera urgente. Por ejemplo, si fuese necesario realizar una rpida detencin del sistema,
podra ser catastrfico no poder poner en marcha el proceso de detencin del
sistema (shutdown).
2) La llamada exit destruye un proceso. La destruccin de un proceso mediante esta llamada es idntica a la que hemos explicado en el caso de la creacin y la destruccin de procesos: el sistema se encarga de destruir el proceso
que la ejecuta. Con el objetivo de notificar el estado de finalizacin, se pasa
un parmetro al sistema operativo que el proceso padre podr recoger mediante la llamada wait.
3) La llamada wait bloquea el proceso que lo ha llamado hasta que alguno
de sus procesos hijo haya sido destruido. Cuando esto sucede, el sistema le retorna el PID de proceso destruido y, como parmetro de salida, el estado en
que ha finalizado.
Combinando las tres llamadas que se han presentado en este subapartado, el
intrprete de rdenes puede ejecutar rdenes en las modalidades de primer
plano y de fondo (observad la figura 9).
UNIX guarda el estado de finalizacin de los procesos destruidos en su PCB y
espera que su proceso padre lo recoja mediante la llamada wait. Por este motivo, UNIX no libera el PCB de un proceso en el momento de su destruccin.
Los procesos esperan en un estado especial denominado zombie hasta que se
ejecuta la llamada wait, que permitir eliminarlos definitivamente. Para evitar la acumulacin de procesos en estado zombie se han previsto los dos mecanismos que ahora exponemos:

Podis ver la destruccin


de procesos en el subapartado 2.1.
de este mdulo didctico.

FUOC P05/75097/00809 Mdulo 6

30

La gestin de procesos

1) Cada usuario slo puede tener en un instante determinado un cierto nmero de procesos activos, incluidos los zombies.
2) Los procesos que se destruyen ms tarde que sus procesos padre pasan a ser
considerados hijos del primer proceso del sistema*, que es el encargado de recoger su estado de finalizacin.
Figura 9

4.2. Los cambios del entorno que configura un proceso


En UNIX hemos visto que cualquier cambio que se quiera llevar a cabo en un
proceso se tiene que realizar tras haberlo creado. El cambio de ejecutable y los
cambios en las entradas/salidas que se han hecho a posteriori de la llamada
fork permiten controlar por programa y, de manera flexible, tener acceso a
un abanico muy amplio de posibilidades que con dificultad se podran haber
previsto a priori desde el SO. Para ilustrar este hecho nos fijaremos en el intrprete de rdenes de UNIX (shell) y en los redireccionamientos que permite.
Antes, sin embargo, analizaremos los puntales de esta flexibilidad, que son los
siguientes elementos:
La llamada fork, que ya hemos visto.
La llamada exec de cambio de ejecutable.
La llamada dup de entrada/salida, que permite manipular los file descriptors.
Las pipes, como dispositivo especial que se basa en la herencia entre procesos para que se puedan utilizar correctamente.
A continuacin veremos cmo los tres ltimos elementos nos permiten modificar el entorno que configura un proceso.

* El primer proceso del sistema


se denomina init y tiene un PID
igual a cero.

FUOC P05/75097/00809 Mdulo 6

31

La gestin de procesos

1) El cambio de ejecutable

La llamada exec al sistema de UNIX permite cambiar la imagen o el ejecutable que contiene un proceso.

El cambio que tiene lugar mediante la llamada exec no afecta a los elementos que
configuran el proceso, como puede ser el entorno de entrada/salida. En general,

Podis ver la programacin de las


seales en el subapartado 4.4.
de este mdulo didctico.

slo afecta a la programacin de las seales y al dominio de proteccin si el fichero ejecutable que hay que cargar tiene activo el bit setuid o el setgid. Los bits setuid
y setgid hacen que durante la ejecucin del programa, el proceso que lo ha cargado
cambie respectivamente al dominio del usuario propietario, o al grupo del usuario
propietario del fichero ejecutable. Estos derechos permiten construir aplicaciones
que accedan de manera controlada a bases de datos o a ficheros en general sobre
los cuales no se quiere dar un derecho de escritura generalizado.
2) La manipulacin de los file descriptors

La llamada dup permite duplicar el valor de una entrada concreta de la tabla de file descriptors en la primera posicin libre que se encuentre
dentro de la tabla.

Con esta operacin se pueden modificar con facilidad los valores en los file
descriptors estndares.
Veamos un ejemplo de uso de la llamada dup en combinacin con la llamada
exec:

int estado, descFichero, pid;

pid = fork ( ) ;
switch (pid)

case 0:
descFichero = open ( fichero, O_RDONLY) ;
if (descFichero == 1) {
/*tratamiento del error*/
}

close (0) ;
dup (descFichero) ;
close (descFichero) ;

exec1 (\bin\orden, orden, 0) ;

Podis ver el cambio de dominio de


usuario por parte del proceso en el
subapartado 5.2. del mdulo didctico
El sistema de ficheros.

FUOC P05/75097/00809 Mdulo 6

32

/* tratamiento del error*/

case 1:

/* tratamiento del error*/

default:
while(pid != wait (&estado) ) ;
}

El cdigo anterior podra ser el que ejecuta el intrprete de rdenes cuando se


ha dado la siguiente orden: $ orden < fichero.
En este caso slo se muestra la parte del cdigo que, tras haber ledo la orden desde
el terminal, ejecuta la orden. Esta ejecucin se lleva a cabo en la modalidad de primer plano. Y ahora vamos a ver los diferentes pasos de esta ejecucin.
En primer lugar, el intrprete crea el proceso hijo que tendr que ejecutar
la orden. Una vez se ha creado, hay que realizar el redireccionamiento de
entrada estndar para que cuando se haya cargado el programa orden se encuentre el redireccionamiento efectuado. Para hacerlo, se crea un file descriptor vinculado a fichero con la llamada open (descFichero), con la
cual se ocupa la primera entrada libre de la tabla de file descriptors.
Las figuras que encontramos a continuacin ilustran la evolucin de las tablas internas del sistema durante este proceso:
a) Situacin despus de haber abierto fichero:
Figura 10

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

33

La gestin de procesos

Para redireccionar la entrada estndar desde fichero, hay que hacer que el
file descriptor 0 se encuentre asociado al fichero. Para hacerlo, desasignamos
el dispositivo real asociado al file descriptor 0 y, mediante la llamada dup, lo
volvemos a asignar copiando sobre su entrada en la tabla de file descriptors la
entrada asociada a descFichero. As, los dos file descriptors hacen referencia
a la misma sesin de trabajo abierta sobre fichero.
b) Situacin despus de haber ejecutado la llamada dup:
Figura 11

Falta eliminar, mediante la llamada close, el file descriptor descFichero para


conseguir el entorno de entrada/salida que debe encontrar la orden que hay
que ejecutar. Despus, el proceso hijo puede cargar el nuevo ejecutable mediante la llamada exec*.
c) Situacin despus de haber cargado el ejecutable de la orden:
Figura 12

* En el ejemplo se utiliza execl,


que es una de la diferentes formas
de esta llamada.

FUOC P05/75097/00809 Mdulo 6

34

La gestin de procesos

3) La utilizacin de las pipes

Por ltimo, las pipes son un dispositivo lgico destinado a comunicar procesos con una relacin de parentesco. Funcionan como una cola de caracteres con una longitud fija, donde los procesos pueden escribir y leer.

Una pipe es un dispositivo que se crea en el momento en que se abre mediante


la llamada pipe, y se destruye cuando el ltimo proceso que lo tiene abierto
lo cierra. La llamada pipe crea el dispositivo y le asocia dos file descriptors, uno
de entrada y otro de salida. Es un dispositivo que no se puede abrir de manera
explcita mediante la operacin open. Una vez se ha creado, los diferentes procesos que se quieren utilizar tienen que heredar los file descriptors de su proceso
padre.

Su funcionamiento bsico se rige por el mecanismo de sincronizacin del paradigma productor/consumidor: cuando un proceso intenta leer sobre una pipe vaca, se queda bloqueado hasta que algn otro proceso le escribe los caracteres
suficientes como para que el proceso bloqueado pueda efectuar la lectura. Cuando un proceso intenta escribir sobre una pipe completa, se queda bloqueado hasta
que algn otro proceso lee los caracteres suficientes de la pipe como para que el
proceso bloqueado pueda efectuar la escritura.
La deteccin del cierre de todos los file descriptors de escritura provoca que, cuando
la pipe se queda vaca, los procesos lectores reciban una marca de fin de fichero en
lugar de bloquearse. El tratamiento de todos los file descriptors de lectura hace que
los procesos con file descriptors de escritura reciban una seal de software asociada
a esta situacin.

Veamos un ejemplo de utilizacin de las pipes:

int estado, descFichero [2], longitud = 512;


char buf [512] ;

estado = pipe(descFichero);
if (estado == 1) {
/*tratamiento del error*/
}

switch (fork()) {
case 0:
close (descFichero[0]);

Podis ver las pipes en el


subapartado 5.1. del mdulo
didctico Los dispositivos
de entrada/salida.

FUOC P05/75097/00809 Mdulo 6

35

write(descFichero[1]);

default:
close(descFichero[1]);

read(descFichero [], buf, longitud);

Como muestra el cdigo anterior, el proceso crea inicialmente una pipe con los
file descriptors de lectura y escritura en el mismo proceso, como podis ver en
la figura 13.
a) Situacin despus de haber creado la pipe:
Figura 13

La pipe es til cuando se lleva a cabo la llamada fork al sistema, y el proceso


hijo hereda del padre los file descriptors entre los cuales encontramos los
que se han creado con la llamada pipe: descFichero[0] es el de lectura,
y descFichero[1], el de escritura.
Despus de la creacin del hijo, y para establecer la comunicacin, ambos
cierran el canal del sentido de la comunicacin que no van a utilizar, para
as permitir la deteccin del proceso de comunicacin. En este punto queda
establecido un canal de comunicaciones unidireccional.

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

36

b) Situacin final despus de haber ejecutado todo el cdigo anterior:


Figura 14

4.3. La jerarqua de procesos en UNIX

El proceso init con PID igual a cero es el primer proceso que se crea en un sistema UNIX, y es el antecesor de todos los procesos que se crearn a continuacin.
Init es el nico proceso que no se ha creado con la llamada al sistema fork, ya
que lo crea directamente el ncleo durante la inicializacin del sistema.

Figura 15

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

37

Las principales funciones del proceso init son las de inicializar todos los procesos de sistema, como por ejemplo los procesos servidores de red*, poner en

La gestin de procesos

* Procesos servidores de la red


como rout o telnet.

funcionamiento un proceso getty para cada terminal y, finalmente, liberar los


procesos zombie que ya no tienen el proceso padre.

El proceso getty se encarga de esperar que se pongan en marcha los terminales. Cuando un terminal se pone en marcha, el proceso que ejecuta el programa getty carga el programa login para identificar al nuevo usuario. Tras haber
verificado la identidad del usuario, el programa login carga el intrprete de
rdenes (shell) e inicia una sesin de trabajo con el usuario. Cuando el usuario
la finaliza, el proceso shell se destruye, e init crea un nuevo proceso getty que
lo sustituye.

4.4. Las seales en UNIX

Las seales (signals) en UNIX se comportan como hemos explicado hasta


ahora. En UNIX se ha previsto un conjunto fijo de seales con un significado
concreto.

En la tabla siguiente mostramos estas seales para el estndar POSIX de UNIX.


Otros estndares de UNIX presentan variaciones con respecto al tratamiento
y al nmero de posibles seales.

Seal

Significado de la seal

SIGABRT

Aborta la ejecucin del proceso. Se realizar un vaciado de la memoria


del proceso.

SIGALRM

Se ha producido una interrupcin de reloj.

SIGFPE

Se ha producido un error de coma flotante.

SIGHUP

Se ha producido un corte de lnea de comunicacin, generalmente


con un terminal o un mdem.

SIGILL

Instruccin de mquina no vlida.

SIGINT

Se ha tecleado la secuencia de teclas de control asociada a esta seal.

SIGQUIT

Se ha tecleado la secuencia de teclas de control asociada a esta seal.


Se realizar un vaciado de la memoria del proceso.

SIGKILL

Destruir el proceso. El proceso no la puede ignorar ni programar.

SIGPIPE

Se ha escrito en una pipe sin ningn lector.

SIGSEGV

Se ha producido un acceso indebido a memoria.

SIGTERM

Se solicita que el proceso finalice.

SIGUSR1

Disponible para usos propios de las aplicaciones.

SIGUSR2

Disponible para usos propios de las aplicaciones.

Podis ver las seales del software


en el apartado 3 de este mdulo
didctico.

FUOC P05/75097/00809 Mdulo 6

38

Como se puede ver por el tipo de seales previstas, los elementos que pueden
provocar una seal son los siguientes:
Los dispositivos de entrada/salida.
Las excepciones.
Las llamadas explcitas al sistema, mediante la llamada kill.
El reloj del sistema. Se puede programar para que genere una seal SIGALARM
cuando haya pasado un cierto intervalo de tiempo. Para hacerlo, el sistema
proporciona la llamada alarm.
La programacin de las seales en UNIX se indica mediante la llamada al sistema signal. Los tratamientos posibles de UNIX a una seal pueden ser los
que presentamos a continuacin:
1) El que da el sistema operativo por defecto en funcin del tipo de seal. Para
las seales estndares consiste en destruir el proceso y, en algunos casos, en
crear un fichero denominado core con el contenido de la memoria del proceso
destruido.
2) Ignorar el acontecimiento. Los procesos pueden ignorar la llegada de seales concretas.
3) El definido por el mismo usuario. Mediante la llamada signal se especifica
qu procedimiento se tendr que ejecutar en caso de que se produzca una seal
determinada. La programacin de una seal slo es vlida una vez, puesto que
tras haberse producido la seal y haberse ejecutado el procedimiento asociado
a su tratamiento, el tratamiento pasa a ser el que hay por defecto. Si se quiere
mantener la programacin, hay que volver a ejecutar la llamada signal.
Un caso especial es la seal SIGKILL, que no puede ser ignorada ni programada, ya que se utiliza como ltimo recurso para destruir un proceso.
En la creacin de un nuevo proceso, la programacin de las seales (signals) se hereda del proceso padre. Cuando se ejecuta exec, las seales con un tratamiento
definido por un procedimiento del usuario pasan a ser por defecto. El motivo de
esto es evidente: estos procedimientos sern sustituidos por el nuevo ejecutable.

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

39

La gestin de procesos

Resumen

En el presente mdulo didctico hemos analizado la gestin de procesos que lleva a cabo el SO partiendo de la definicin de proceso que ya habamos visto en
esta asignatura, y lo hemos hecho siguiendo los pasos que ahora exponemos:
a) En primer lugar, para entender mejor el concepto de proceso, hemos analizado de manera superficial la representacin interna del proceso en el SO y la
gestin de los procesos en un sistema multiprogramado de tiempo compartido. Los principales conceptos que hemos presentado son los siguientes:
El bloque de control de procesos, como estructura bsica que configura
un proceso.
La ejecucin concurrente, mediante la multiplexacin del procesador en
tiempo.
El estado de los procesos (run, ready y wait).
El cambio de contexto como mecanismo para pasar un proceso del estado
run a ready o wait, o viceversa.
b) En segundo lugar, hemos analizado desde el punto de vista del usuario las
llamadas que permiten manipular los procesos, es decir, que permiten crearlos, modificarlos y destruirlos. Como principales conceptos relacionados con estas llamadas, podemos destacar los siguientes:
La herencia entre los procesos padre e hijo en el momento de la creacin
de un nuevo proceso.
La sincronizacin, para ver cmo el proceso padre sincroniza la creacin
y destruccin de un proceso hijo.
Los cambios de ejecutable y los redireccionamientos, como principales
cambios del entorno que configura un proceso.
c) Y, ya para finalizar, hemos presentado las seales en tanto que mecanismo
de sincronizacin de los procesos con acontecimientos que se producen de
manera no prevista. El origen de estos acontecimientos se encuentra en situaciones producidas por un mal funcionamiento del proceso o por situaciones
externas, como pueden ser acciones de otros procesos o estados de los dispositivos. Su aparicin puede alterar el entorno del proceso y a menudo comportan la accin de destruccin de los procesos a los que afectan. A pesar de todo,

Podis ver la definicin de proceso


en el subapartado 2.1. del mdulo
didctico El sistema operativo:
una mquina virtual.

FUOC P05/75097/00809 Mdulo 6

40

el sistema proporciona mecanismos para solucionar la situacin mediante un


tratamiento especfico explicitado con un procedimiento.
Despus de ver los SO en general, hemos hecho una confrontacin de los conceptos anteriores con el sistema UNIX. Las llamadas al sistema de gestin de
procesos siguen una filosofa de diseo basada en la sencillez y la flexibilidad
que permite crear y modificar los procesos con toda libertad desde el programa. Una consecuencia de este hecho es la gran cantidad de posibilidades que
puede ofrecer el intrprete de rdenes (shell) por lo que respecta a modos de
ejecucin y de redireccionamiento de las entradas y salidas.
La siguiente figura muestra un mapa conceptual con los principales conceptos
explicados en este mdulo didctico y sus relaciones:

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

41

La gestin de procesos

Actividades
1. Estudiad la orden ps de UNIX. Observad qu campos presenta y qu significado tienen.
Analizad tambin qu procesos tenis en marcha en el sistema y en qu estado se encuentran.
2. LINUX permite ver los recursos asignados a los procesos como ficheros que cuelgan del
directorio /proc. Buscad en el manual de UNIX la entrada asociada a este directorio y analizad qu se puede encontrar en sta.
3. Analizad las diferentes posibilidades de ejecucin de rdenes y de redireccionamientos
que nos ofrece el intrprete de rdenes (shell) de UNIX y pensad en cmo se podran realizar
desde las llamadas al sistema.
4. Buscad en el manual de UNIX las seales que hay, y con la orden stty analizad qu caracteres provocan seales.

Ejercicios de autoevaluacin
1. Dentro del diagrama de estados de los procesos que se muestra en el subapartado de estados de un proceso, dnde colocarais el estado zombie de UNIX? Justificad la respuesta.
2. Cmo se podran redireccionar las entradas/salidas de los procesos hijos en un sistema en
el que la llamada crear_proceso fuerza el cambio de imagen? Justificad vuestra respuesta.
3. Despus de ejecutar primero, qu salidas obtendremos y por qu dispositivo se realizarn? Justificad la respuesta.
Primero

main ( )
{
char a;
a = A ;
if

(write (1, &a, 1)

==

1)

/*error*/
write (2,error,5)

}
close (1) ;
execl (segundo, segundo, 0) ;
if

(write (2, &a, 1)

==

1)

/*error*/
exit (1)

}
}

Segundo

main ( )
{
char a;
if (write (1, &a, 1)

==

1)

/*error*/
write (2, error, 5)

FUOC P05/75097/00809 Mdulo 6

42

La gestin de procesos

}
if (write(2, &a, 1)

==

1)

==

1)

/*error*/
exit(1)
a

if (write(2, &a, 1)
/*error*/
exit(1)

}
}

4. Comentad cmo se ve afectada la programacin de las seales de software por el hecho de


cambiar de imagen. Justificad la respuesta.
5. Cmo sera el cdigo para conectar mediante una pipe dos procesos que leen y escriben
por sus canales estndares?
6. La seal SIGKILL de UNIX no puede ser inhibida ni programada por el usuario. Creis
que es necesaria su existencia? Explicad por qu.
De seleccin
1. Cuando se lleva a cabo un cambio de contexto entre dos procesos, el sistema tiene que guardar
los valores que configuran el estado del proceso que deja el procesador para poder reemprender
su ejecucin ms adelante. Estableced cules de los elementos que ahora presentamos y que configuran un proceso tienen que ser guardados explcitamente en el momento del cambio:
a) El contador de programa.
b) Los segmentos de memoria.
c) Los dispositivos virtuales.
d) El identificador del proceso.
e) Los registros del procesador.
Justificad la respuesta.
2. De entre los resultados que se presentan a continuacin, cul creis que producir la ejecucin del siguiente programa?

main ( )
{
int fd, pid;
char buff[2];
fd

if

(read(fd, buff, 2)

open(fichero, O_RDONLY)
==

1)

/*error*/
exit(1)

}
write(1, buff, 2);
pid

fork( );

switch(pid)
case

0:
if

(read(fd, buff, 2) == 1)

/*error o fin de fichero*/


exit(1)

}
default:
write(1, buff, 2);default:
if (read(fd, buff, 2)

==

1)

FUOC P05/75097/00809 Mdulo 6

43

/*error o fin de fichero*/


exit(1)

}
write(1, buff, 2)

;}

}
}

a) ABCD.
b) AABBCCDD.
c) ABCCDD.
d) ABDC.
e) Las opciones a o d indistintamente.
Justificad la respuesta.
3. Determinad cul de los siguientes resultados creis que producir la ejecucin del programa que presentamos a continuacin:

main ( )
{
int

num,

pid;

num

pid

= fork( );

3;

switch (pid)
case

0:
num

num

1;

printf(hijo: num

%d/n, num);

default:
num

num

2;

printf(padre: num

= %d/n, num);

}
}

a) hijo: num = 4, padre: num = 6.


b) hijo: num = 4, padre: num = 5.
c) hijo: num = 1, padre: num = 2.
d) hijo: num = 4, padre: num = 5.
e) El valor de num no se encuentra definido en el hijo y el padre efecta la salida: padre:
num = 5. Justificad la respuesta.
4. Cul de los diagramas de tiempo es el que representa la ejecucin del siguiente cdigo?
Justificad la respuesta.

main ( )
{
int

pid1,

pid2,

estado;

A
pid1

fork ( ) ;

switch (pid)
case

0:
B

default:
pid1

fork ( ) ;

switch (pid)

case

0:

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

44

C
default:
while(pid1!= wait(&estado)) ;
while(pid2!= wait(&estado)) ;
D
}
}
}

a)

b)

c)

d)

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

45

Solucionario
Ejercicios de autoevaluacin
1. El estado zombie es previo a la destruccin total del proceso mientras ste espera a que el
proceso padre, o en su defecto el proceso init, recoja el parmetro de finalizacin. Una vez se
ha recogido, se acaban de liberar los recursos del proceso.

Figura 20

2. Puesto que la llamada crear_proceso obliga a cargar un nuevo ejecutable, es imposible que
el hijo herede el cdigo del proceso padre, motivo por el cual no se puede especificar mediante el programa cmo se debe modificar el entorno de entrada/salida del proceso hijo. En estas
condiciones, con los parmetros de la llamada crear_proceso, tenemos que poder especificar
los dispositivos reales que se quieren asociar a los dispositivos virtuales estndares del proceso hijo. Por ejemplo:
crear_proceso(nombre_ejecutable,fichero1,fichero2,fichero3,otros parmetros...)
donde fichero1 corresponde a la entrada estndar, fichero2, a la salida estndar y fichero3, a la salida de error. Si se quisiese hacer ms flexible, de modo que se permitiese redireccionar cualquier
dispositivo con cualquier modo de acceso, sera necesario incluir en l ms parmetros.
3. La salida se efectuar como presentamos ahora:
a) El ejecutable primero escribe A para la salida estndar.
b) Se cierra la salida estndar.
c) Se cambia de ejecutable. Se carga segundo y todo el cdigo que el ejecutable primero
tiene por debajo de la llamada exec desaparece, y no se ejecutar nunca.
d) El ejecutable segundo escribe error para la salida de error estndar, puesto que se encuentra cerrada, tal y como hemos comentado en el punto b.
e) El ejecutable segundo escribe un carcter indeterminado para la salida de error estndar,
ya que la variable a del ejecutable segundo se ha creado en el momento de su carga, y no
ha sido inicializada.
f) El ejecutable segundo escribe B para la salida de error estndar.
4. El hecho de cambiar la imagen hace que todo el cdigo y las variables de la imagen antigua
sean sustituidos por los de la nueva. Por lo tanto, toda programacin de seales que se base
en la premisa de que el proceso proporciona un procedimiento de tratamiento de la seal
debe quedar anulada. El resto de los tratamientos (por defecto e ignorar la seal) no tienen
por qu verse afectados.
5.
main ( )
{
int

estado,

descFichero[2] ;

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

46

estado
if

(estado

pipe (descFichero) ;
==

1) {

/*tratamiento del error*/


}
switch(fork( )) {
case

0:
close(descFichero[0] ) ;
close(1) ;
dup(descFichero[1] ) ;
exec1(fichero2, fichero2, 0) ;

default:
close(descFichero[1] ) ;
close(0) ;
dup(descFichero[0] ) ;
close(descFichero[0] ) ;
exec1(fichero2, fichero2, 0) ;
}
}

6. La existencia de esta seal permite que los procesos de gestin del sistema puedan destruir
cualquier proceso, aunque ste lo intente evitar programando o no haciendo caso de ninguna de las seales. As pues, con esta seal protegemos el sistema de procesos que, a pesar de
que no producen ninguna excepcin, funcionan de manera incorrecta. Por ejemplo, un proceso que se haya quedado ejecutando una iteracin de manera indefinida consume CPU, memoria, etc. El administrador del sistema tiene que poder destruirlo y, as, liberar los recursos
que ocupa.
De seleccin
1. Hay que guardar el contador de programa (a), que indica la prxima instruccin que hay
que ejecutar, y el valor de los registros del procesador (b), que bsicamente contienen valores
parciales de los clculos que se estn llevando a cabo y el puntero a la ltima posicin de la
pila. Es necesario guardar todos aquellos elementos dinmicos que configuran el punto de
ejecucin donde se encuentra el programa que contiene el proceso. El resto de los elementos,
a pesar de que configura el entorno de ejecucin, ya estn guardados en el PCB, de manera
que no es necesario volver a guardarlos.
2. La respuesta correcta es la e. Los procesos padre e hijo comparten los punteros de lectura/escritura de los ficheros que el padre tiene abiertos en el momento de la creacin del hijo. As, las
operaciones de lectura que realice cualquiera de los dos modifican el mismo puntero. Por otra
parte, ambos procesos se ejecutan concurrentemente y, por lo tanto, no podemos saber cul de
los dos efectuar primero la operacin de lectura. Por este motivo se pueden dar ambas salidas.
3. La solucin correcta es la b. La herencia de la llamada fork es de copia, as que el proceso
hijo tendr, una vez creado, el mismo cdigo y los mismos datos que el padre. A partir del momento de la creacin, cada uno evolucionar de manera independiente y con sus variables.
4. La respuesta correcta es la a. El proceso padre ejecuta el cdigo A y despus crea un proceso
hijo que ejecuta el cdigo B. Al mismo tiempo crea un segundo proceso hijo que ejecuta concurrentemente el cdigo C. Una vez se han creado todos los hijos, el proceso padre espera a
que sus dos procesos hijos hayan finalizado, y entonces ejecuta D.

Glosario
bloque de control de procesos
Estructura de datos que contiene la informacin del entorno de cada proceso necesaria para
que el sistema pueda gestionar la ejecucin concurrente de un conjunto de procesos.
sigla: PCB
cambio de contexto
Tcnica que, mediante la multiplexacin del tiempo de procesador, consigue la ejecucin
concurrente de todos los procesos preparados para utilizarlo.

La gestin de procesos

FUOC P05/75097/00809 Mdulo 6

47

cuota
Tiempo mximo de CPU que puede utilizar un proceso de manera continua. Los sistemas
operativos que trabajan en la modalidad de tiempo compartido utilizan la cuota para realizar
cambio de contexto y dar el control del procesador a un nuevo proceso.
sin.: quantum
estado de un proceso
Estado que se asigna a cada proceso para controlar sus cambios de modo de ejecucin a lo
largo de su existencia en el sistema. Slo hay un conjunto limitado de estados posibles, y las
acciones que pueden dar lugar a transiciones entre los estados tambin estn definidas.
overlay
Tcnica que consiste en dividir el ejecutable de la aplicacin en varias partes u overlays, de
manera que en cualquier instante de la ejecucin de una aplicacin slo sea necesario tener
cargado en la memoria un subconjunto del total de overlays.
quantum
Ved cuota.
seal de software
Herramienta que proporciona el sistema operativo con el objetivo de trasladar el mecanismo
de las interrupciones al mbito del proceso. Igual que en el mecanismo de hardware de las
interrupciones, las seales ofrecen apoyo a un amplio conjunto de situaciones diferentes que
tienen que ser conocidas y atendidas con una cierta urgencia por parte de los procesos.

Bibliografa
Bibliografa bsica
Milenkovic, M. (1994). Sistemas operativos, conceptos y diseo (2. ed.; trad. de A. Bautista). Madrid: McGraw-Hill.
Silberschatz, A.; Peterson, J.; Galvin, P. (1994). Sistemas operativos, conceptos fundamentales
(3. ed.; trad. de E. Morales). Wilmington: Addison-Wesley Iberoamericana.
Tanenbaum, A. (1993). Sistemas operativos modernos (trad. de O. Palmas). Mxico: Prentice
Hall Hispanoamericana.

Bibliografa complementaria
Kernighan, B.: Pike, R. (1997). El entorno de programacin UNIX. Mxico: Prentice Hall
Hispanoamericana.
Robbins, K.; Robbins, S. (1997). UNIX: programacin prctica. Mxico: Prentice Hall Hispanoamericana.

La gestin de procesos

También podría gustarte