Sie sind auf Seite 1von 95

PROCESOS

Ing. Emilio Palomino


Olivera
Concepto de Procesos I
• El proceso se define como un programa en
ejecución.
• De una forma un poco mas precisa, como la
unidad de procesamiento gestionada por el SOp.
• El Sop. Mantiene por cada proceso una serie de
estructuras de información que permiten
identificar las característica de éste, así como los
recursos que tiene asignados. En esta última
categoría entran los descriptores de segmentos
de memoria asignados, los descriptores de los
archivos abiertos, los descriptores de los puertos
de comunicaciones, etc.
Concepto de Procesos II
• Una parte muy importante de estas
informaciones se encuentra en el llamado
Bloque de Control del Proceso (BCP). El Sop
mantiene una tabla de procesos con todos los
BCP de los procesos.
▪ Identificador “pid”
▪ Identificador “uid”
▪ Archivos abiertos
▪ Segmentos de memoria
▪ Temporizadores
▪ Señales
▪ Semáforos
▪ Puertos
Información que contiene un
Proceso
• Contenido de los segmentos de memoria
en los que residen el código y los datos
del proceso . A esta información se le
denomina imagen de memoria o Core
image.
• Contenido de los registros del modelo de
programación.
• Contenido del BCP.
Jerarquía de Procesos

• La secuencia de creación de procesos


genera un árbol de procesos.
• Para referirse a las relaciones entre los
procesos de la jerarquía se emplean los
términos de padre, hijo, hermano o
abuelo. Cuando el proceso A solicita al
SOp. que cree el proceso B, se dice que A
es padre de B y que B es hijo de A. bajo
esta óptica, la jerarquía de procesos
puede considerarse como un árbol
genealógico.
Jerarquía de procesos
• Grupos de procesos de cada shell.
• Familia de procesos
▪ Proceso hijo
▪ Proceso padre
▪ Proceso hermano
▪ Proceso Abuelo
• Vida de un Proceso
▪ Crea
▪ Ejecuta
▪ Muere o termina
• Ejecución del Proceso
▪ Batch o Background: No esta asociado a ningún
terminal, Toma los datos de un archivo y los
deja en otro.
▪ Interactivo: Esta asociado a un terminal. Coge
información del usuario y da una contestación.
• Grupo de Procesos.- el conjunto de procesos
creados a partir de un Shell puede formar un
grupo de procesos. También pueden formar
un grupo los procesos dependientes de un
terminal.
Entorno del proceso
• El entorno del proceso consiste en un conjunto de variables que se le pasan
al proceso en el momento de su creación.
• El entorno esta formado por una tabla NOMBRE_VALOR que se incluye en la
pila del Proceso.
▪ El NOMBRE especifica el nombre de la variable.
▪ Y el VALOR su valor.
• Se establece:
▪ Por defecto.
▪ Mediante mandatos del shell ( export)
▪ Mediiante API de SO (putenv, getenv)
• Ejemplo:
PATH=/usr/bin:/home/pepe/bin
TERM=vt100
HOME=/home/pepe
PWD=/home/pepe/libros/primero
PATH.- indica la lista de directorios en los que el SOp busca los programas
ejecutables, TERM.- el tipo de terminal, HOME.- el directorio inicial asociado al
usuario y el PWD.- el directorio de trabajo actual.
Estados del proceso
• En ejecucion (t1110 por procesador)
• Bloqueado (en espera de completar EIS)
• Lista para ejecutar

Nuevc Final EIS


Lis to

• Planificador: Modulo del SO que decide que proceso se ejecuta


Usuario
• Usuario: Persona autorizada a utilizar 1111 sistema
Se identifica en la autenticacion medianre:
• C6digo de cuenta
• Clave (pass,vord)
Intemamente el SO le asigna el "uid" (user identification)
• Super-usuario
- Tiene todos los derechos
- Administra el sistema
• Gn11Jo de usuarios
- Los usuarios se organizan en grupos
• Ahunnos
• Profesores
Toda usuario ha de pertenecer a 1111 grupo
Multitarea
Tipos de sistemas operativos
Base de la multitarea
• Paralelismo real entre EIS y UCP (OMA)
• Alternancia en los procesos de fases de EIS y de procesamiento
• La memoria almacena varios procesos
Ejemplo de ejecución en un
sistema multitarea
Ventajas de la multitarea

• Facilita la programación, dividiendo los


programas en procesos (modularidad).
• Permite prestar un buen servicio, atendiendo a
varios usuarios de forma eficiente, interactiva
y simultanea.
• Aprovecha los tiempos que los procesos
pasan esperando a que se completen sus
operaciones de E/S.
• Aumenta el uso de la CPU, al aprovechar los
espacios de tiempo que los procesos están
bloqueados.
Grado de multiprogramación
Grado de multiprogramación

• A mayor Grado de multiprogramación se


tiene mayores necesidades de memoria.
• En un sistema sin memoria virtual los
procesos activos han de residir
totalmente en memoria principal.
• El grado de multiprogramación viene
limitado por el tamaño de los procesos y
por la memoria disponible.
Necesidades de la memoria
principal
• En los sistemas con memoria virtual es mas
complejo, puesto que los procesos solo tienen en
memoria principal su conjunto residente, lo que hace
que quepan mas procesos.
• Sin embargo al aumentar el número de procesos
disminuye el conjunto residente de cada uno.
• Cuando el conjunto residente de un proceso se hace
menor de un determinado valor ya no representa
adecuadamente al futuro conjunto de trabajo del
proceso, lo que tiene como consecuencia que se
produzcan muchos fallos de pagina. Cada fallo de
pagina consume tiempo de procesador, por que el
Sop ha de tratar el fallo, y tiempo de E/S, puesto que
hay que hacer una migración de paginas.
Necesidades de memoria principal
Rendimiento del procesador y
grado de multiprogramación
• Cuando la memoria principal disponible es
pequeña, se llega a la situación de hiperpaginación
(trashing), antes de alcanzar una cota alta de
utilización del procesador. Para aumentar el
rendimiento de un sistema que este en esta
situación es necesario añadir mas memoria
principal.
• Cuando la memoria es grande se llega a saturar el
procesador con menos procesos de los que caben
en memoria. En este caso se puede aumentar el
rendimiento del sistema manteniendo la memoria
pero aumentando la potencia del procesador o
Rendimiento del procesador y
grado de multiprogramación
Información del proceso
Información del proceso I

• El Proceso es la Unidad de procesamiento


gestionada por el Sop. Para realizar este
cometido el proceso tiene asociado una serie
de elementos de información organizados en
tres grupos:
▪Estado del procesador: contenido de los registros
del modelo de programación.
▪Imagen de memoria del proceso: contenido de los
segmentos de memoria en los que reside el código y
los datos del proceso.
▪Contenido del bloque de control del proceso BCP.
Información del proceso II
Estado del procesador
• Esta formado por el contenido de todos sus
registros:
▪ Registros generales, registros específicos de coma float
también se incluyen aquí.
▪ Contador de programas
▪ Puntero de pila
▪ Registros de estado
▪ Registros especiales. RIED (Reg. Identificador de Espacio
de Direcciones)
• Cuando un proceso esta ejecutándose su estado
reside en los registros del computador.
• Cuando un proceso no ejecuta su estado reside en el
BCP.
Imagen de la memoria

• La imagen de memoria esta formada por los


espacios de memoria que un proceso esta
autorizado a utilizar. Principales características:
▪Si un proceso genera una dirección que esta fuera del
espacio de direcciones, el HW de protección deberá
detectarlo y levantar una excepción (TRAP).
▪La imagen de memoria dependiendo del computador
puede esta referida a memoria virtual o física.
▪Asignación de Memoria contempla la modificación de la
imagen de memoria y la asignación de marcos de
memoria es de aplicación en los sistemas con memoria
virtual y se refiere a la modificación del conjunto
residente del proceso.
Mecanismos de protección de
memoria
Cmp > RegLim
• Los mecanismos de Memoria
Principal excepción de violación
de memoria, Sop trate el
protección de memoria tema.

deben evitar que un


programa en ejecución Registro
Límite
direccione posiciones de Región
asignada al
Proceso Registros
memoria que no le hayan Valla

sido asignadas por el


sistema operativo. Registro
base

• Solución en máquinas sin Posición


0
Incluir una pareja de
registros valla
Proceso con un número fijo de
segmentos de tamaño variable.
• Un proceso contiene varios tipos de información.
▪Texto o código. El programa maquina que ha de
ejecutar el proceso.
▪Datos. Cada programa estructura sus datos de
acuerdo a sus necesidades.
▪Datos con valor inicial
▪Datos sin valor inicial
▪Datos dinámicos
▪Pila. Los programas usan una estructura de pila
residente en memoria.
Modelo de imagen de memoria con
estructura de segmentos fija.
• El modelo tradicional usado en
UNIX contempla 3 segmentos:
texto, pila y datos.
• Observe que el segmento de texto
es de tamaño fijo ( el programa
habitualmente no se modifica) y
que los segmentos de pila y de
datos crecen en direcciones
contrarias.
• Este modelo se adapta bien a los
sistemas con memoria virtual,
puesto que el espacio virtual
reservado no existe, para que
puedan crecer los segmentos de
datos y pila. Solamente se crea,
gastando recursos de disco y
memoria, cuando se asigna.
Modelo de imagen de memoria con
estructura de segmentos variable.
• Este modelo es mas
avanzado que la anterior, al
permitir que existan los
segmentos que desee el
proceso.
• El ejemplo presenta un caso
de siete segmentos que
podrán ser de texto, de pila o
de datos.
• Es la solución mas flexible y,
por tanto, la utilizada en los
Sop modernos como Win NT
y las versiones actuales de
UNIX
Preparación del código de un
proceso
• La preparación del
código de un
proceso, también
llamado texto del
proceso, sigue los
siguientes pasos.
Información de BCP
• Informacion de identificacion
- PID del proceso, PID del padre
- ID de usuario real (uid real)
- ID de grupo real (gid real)
- ID de usuario efectivo (uid efectivo)
- ID de grupo efectivo (gid efectivo)
• Estado del procesador
• Informacion de control del proceso
- Informacion de planificacion y estado
- Descripcion de las segmentos de memoria del proceso
- Recursos asignados (ficheros abiertos, ... )
- Comunicacion entre procesos.
- Punteros para estructurar las procesos en listas o colas.
Información de BCP
• Informacion fuera del BCP
- Por implementacion (la consideramos del BCP)
- Para compartir la
• Tabla de paginas: Se pone fuera
Describe la imagen de memoria del proceso
Ta111at10 variable
El BCP contiene el puntero a la tabla de paginas
(La ccmparticion de memoria requiera que sea extema al BCP)
• Punteros de posicion de los ficheros
Si añaden a la tabla de ficheros abiertos (en el BCP) no se pueden
compartir
Si se asocian al nodo-i se comparte siempre
Se ponen en una estructura comun a los procesos y se asigna uno
nuevo en cada servicio OPEN
Tablas del sistema operativo
• El SOp. Mantiene una serie de tablas que describen los procesos y a
los recursos del sistema. La información asociada a cada proceso se
encuentra parcialmente en el BCP y parcialmente fuera de él.
Compartir información
• Cuando la información ha de ser compartida por varios procesos, no ha de
residir en el BCP, que es de acceso restringido al proceso que lo ocupa. A lo
sumo, el BCP contendrá un apuntador que permita alcanzar esa
información.
FORMACION DE UN
PROCESO
Formación de un proceso
• Consiste en completar todas las informaciones que lo constituyen, mas
especifico, las operaciones que debe hacer el Sop son las siguientes:
▪ Asignar un espacio de memoria para albergar la imagen de memoria.
Sera virtual y compuesto por varios segmentos.
▪ Seleccionar un BCP libre de la tabla de procesos.
▪ Rellenar el BCP con la información de identificación del proceso,
descripción de la memoria asignada, con los valores iniciales de los
registros indicados en el archivo objeto, etc.
▪ Cargar en el segmento de texto, el código mas las rutinas del sistema
y en el segmento de datos los datos iniciales contenidos en el archivo
objeto.
▪ Crear en el segmento de pila, la pila inicial del proceso.
• Una vez completada toda la información del proceso, se puede marcar
como listo para ejecutar, de forma que el planificador, cuando lo
considere oportuno, lo seleccione para su ejecución.
Formación de un proceso
Concepto de proceso

• ¿ Que es un proceso?
• lnstancia de un programa en ejecucion, requiriendo para ello unos
recursos

Programa: estructura pasiva Proceso: estructura activa


Estados del proceso
• Ejecución.- El proceso esta siendo ejecutado por el
procesador, es decir, esta en fase de procesamiento y
el estado del proceso reside en los registros del
procesador.
• Bloqueado.- un proceso bloqueado esta esperando a
que ocurra un evento y no puede seguir ejecutando
hasta que suceda el evento – es cuando el proceso
solicita una operación de E/S, hasta que no termina
esta operación el proceso queda bloqueado, en esta
fase el estado del proceso reside en el BCP.
• Listo.- un proceso esta listo para ejecutar cuando
puede entrar en fase de procesamiento. Dado que
puede haber varios procesos en este estado, una de
las tareas del sistema operativo será seleccionar
aquel que debe pasar a ejecución y esto lo realiza el
Estados básicos de un proceso
• Se muestra estos 3 estados,
indicando algunas de las
posibles transiciones:
▪ Puede verse que hay un solo
proceso en ejecución.
▪ Del estado de ejecución se pasa
al estado de bloqueado al
solicitar una operación de E/S.
▪ También puede pasar del estado
de ejecución al estado de listo
cuando el Sop decide que ese
proceso lleva mucho tiempo en
ejecución.
▪ Del estado de bloqueado pasa al
estado del listo cuando se
produce el evento por el que
estaba esperando el proceso
(cuando se completa la operación
de E/S solicitada)
Diagrama completo de los estados
de un proceso
• Los procesos entran en el sistema porque lo solicita un
proceso de usuario o porque esta prevista su ejecución
Batch.
• Es frecuente tener una lista de procesos Batch en espera
para ser ejecutados cuando se pueda. El sistema operativo
ha de ir analizando dicha lista para lanzar la ejecución de
los procesos a medida que disponga de los recursos
necesarios.
• Los procesos salen del sistema cuando mueren, es decir, al
ejecutar el servicio correspondiente o al producir algún
error irrecuperable.
• El SOp. Puede suspender algunos procesos, lo que implica
retirar sus marcos de páginas, dejándolos en la zona de
intercambio. El objetivo es dejar suficiente memoria a los
procesos no suspendidos para que su conjunto residente
tenga un tamaño adecuado que evite la hiperpaginación.
• Los procesos Batch que entran en el sistema lo hacen
Diagrama completo de los estados
de un proceso
Cambio de contexto
• Cuando se produce una interrupcion se cambia de contexto.
• Cambio de conrexto es el conjunro de dos operaciones:
- Se salva el estado del procesador en el correspondiente BCP
- Se pasa a ejecutar la rutina de tratamiento de interrupcion del
so
• Planificador: Modulo del SO que decide el siguiente proceso a
ejecutar.
• Activador: Modulo del SO que pone a ejecutar un proceso.
- Copia el estado del BCP a Jos registros
- Termina con una insrruccion RETI (retorno de intermpcion)
• Restituye el regisrro de esrado (bit de nivel de ejecucion)
• Restirnye el contador de programa (para el nuevo proceso).
Cambio de contexto
Uso de procesador por el sistema
operativo
Al interrumpirse la ejecución de un
proceso se salva su estado en el
BCP
Procesos Ligeros
hebra, proceso ligero, flujo,
subproceso o “thread”
_. Hasta ahora, un proceso es, a la vez:
.- Unidad de asignacion de recursos
.- Unidad de planificaci6n y ejecuci6n
_. Aunque no tiene por que: hilo => unidad de
planificacion, proceso => unidad de asign. de recursos
_. Un proceso puede tener varios hilos
hebra, proceso ligero, flujo,
subproceso o “thread”
Elementos por hilo Elementos por proceso:
Contador de programa Espacio de direcciones
Pila Variables globales
Estado + contexto Ficheros abiertos
Memoria privada (var. locales) Procesos hijos
Cron6metros
Seiiales
SemAforos
lnformacion
contable
Hilos y procesos
• Capacidad de un SO para mantener varies hilos de ejecucion dentro de un
mismo proceso.
Tipos de hilos
•Hilos a nivel de usuario.
– Se usan aplicaciones o bibliotecas de hilos para
manejarse (Creación, destrucción, planificación).
– El S.O. no conoce la existencia de los hilos
– (Unix) Existe un único hilo por proceso
– Hay un paquete de hilos que corre en el espacio del
usuario
• Hilos a nivel de Kernel.
– El sistema operativo conoce la existencia de los
hilos.
– El planificador no selecciona procesos para ser
ejecutados sino hilos.
– El hilo seleccionado puede pertenecer al mismo
proceso o a un proceso diferente
Ejemplos de aplicacionesmulti-hilo
• Web browser
– Un Hilo decodifica la página y la presenta en Pantalla.
– Un Hilo toma los datos de la página de Internet.
• Procesador de Texto.
– Un Hilo despliega en Pantalla la interfaz.
– Un Hilo toma los datos del Teclado.
– Un Hilo revisa la ortografía.
• Servidor Web
– Un Hilo acepta peticiones de los clientes.
– Para cada petición recibida se crea un Hilo que la atiende.
– Usa muchos Hilos para atender en paralelo a muchos
clientes.
Procesos ligeros
• Un proceso ligero o thread es un
programa en ejecución que
comparte la imagen de memoria
y otras informaciones con otros
procesos ligeros
• Un proceso puede contener un
solo flujo de ejecución, como
ocurre en los procesos clásicos, o
mas de un flujo de ejecución
(procesos ligeros).
• Un proceso ligero se define como una función
cuya ejecución se puede lanzar en paralelo con
otras. El hilo de ejecución primario, o de proceso
ligero primario, corresponde a la función main
Información de un proceso
ligero
• Cada proceso ligero tiene informaciones que
le son propias y que no comparte con otros
proceso ligeros, las informaciones propias se
refieren fundamentalmente al contexto de
ejecución, pudiéndose destacar las
siguientes:
▪Contador de programa
▪Pila
▪Registros
▪Estado del proceso ligero (ejecutando, listo o
bloqueado)
Informacion compartida por los
procesos ligeros de un mismo
proceso
• Todos los proceso ligeros de un mismo
proceso comparten la información del mismo,
es decir:
▪Espacio de memoria
▪Variables globales
▪Archivos abiertos
▪Procesos hijos
▪Temporizadores
▪Señales y semáforos
▪Contabilidad
Threads
Un thread(LWP Light Weight Process) es flujo de ejecucion de un
proceso. Es la unidad basica cle utilizacion del CPU y esta
constituida por:
- PC
- Conjunto de regisrros
- Espacio para pila
Los threads comparten con otros threads:
Codigo
- Datos
- Archivos abiertos, señales.
Procesos MONO y MULTIHILOS

Proceso mono hilado Proceso multihilado


Estados de los hilos
El estado del Proceso P es la combinación de
los estados de sus Hilos.

• Cuando cualquiera de los Hilos está en


estado “Ejecutando”, el estado de P será
“Ejecutando”.
• Si ningún Hilo está en “Ejecutando”, y alguno
está en “Listo”, el estado de P será “Listo”.
• El estado de P es “Bloqueado” sólo si todos
sus Hilos están en estado “Bloqueado”.
Estados del proceso ligero

• Cada proceso ligero de un proceso tiene su propio estado bloqueado, listo o en ejecución.
• El estado del proceso será la combinación de los estados de sus procesos ligeros. Ej: si tiene un proceso ligero en
ejecución, el proceso esta en ejecución.
Paralelismo
• Los procesos ligeros permiten ejecutar una
aplicación en paralelo.
• Un programa puede dividirse en
procedimientos que se ejecutan de forma
independiente, el mecanismo de los
procesos ligeros permite lanzar
simultáneamente la ejecución de todos
ellos. De esta forma se consigue que el
proceso avance mas rápidamente.
Paralelismo utilizando procesos
ligeros
• La base del paralelismo estriba en que, mientras
un proceso ligero esta bloqueado, otro puede
ejecutar.
Diseño con proceso ligeros
Alternativas de diseño con
procesos ligeros
Ventajas de diseño que se
atribuyen a los procesos ligeros
• Permite separación de tareas. Cada tarea se
puede encapsular en un proceso ligero
independiente.
• Facilita la modularidad, al dividir trabajos
complejos en tareas.
• Aumenta la velocidad de ejecución de trabajo,
puesto que aprovecha los tiempos de bloqueo de
unos procesos ligeros para ejecutar otros.
• El paralelismo que permiten los procesos ligeros
unido a que comparten memoria (utilizan
variables globales que ven todos ellos) permite la
programación concurrente.
Hilos herencia
EJECUCION DE PROCESOS CON
semáforos
EJECUCION DE PROCESOS CON
SEMAFOROS
Planificación
Planificación de procesos

• El objetivo es el reparto del tiempo de


procesador entre los procesos que puede
ejecutar.
• Planificador: selecciona el proceso en
estado listo y pasa a estado de ejecución.
• Activador: pone en ejecución el proceso
planificado.
Niveles de planificación del
Sistema Operativo
• A largo plazo: añade nuevos procesos al
sistema de la lista de espera. En los que
no importa cuando se ejecuten.
• A mediano plazo: trata la suspensión de
procesos, decide que procesos pasan a
suspendido y cuales dejan de estar
suspendidos.
• A corto plazo: selecciona el proceso en
estado de listo pasando a estado de
ejecucion.
Niveles de planificación del
Sistema Operativo
Planificación con/sin expulsión
• Sin expulsion
• Ejecucion
• Listo
• Bloqueado
• Con expulsion al disco (swap) �
''"

,----, d ,#*'



L•• F<1EIS

Entra al
sistern a

Procesos batch
en es era
Planificación con/sin expulsión

• Tipos de planificacion
- Sin expulsion: el proceso conserva la UCP 1nie11tras desee.
- Con expulsion: el SO q11ita la UCP al proceso
• Exige un reloj que inte11111npe pe1i6dica111ente
• Colas de procesos
- Por prioridad
- Por tipo
Colas de procesos
Objetivos de la planificación

• Reparto equitativo del procesador


• Eficiencia (optimizar el uso de
procesador)
• Menor tiempo de repuesta en uso
interactivo
• Menor tiempo de espera en lotes (batch)
• Mayor numero de trabajos por unidad de
tiempo (batch)
• Cumplir los plazos de ejecución de un
sistema de tiempo real.
Implementación de las colas de
procesos
• La colas de proceso se construyen con unas
cabeceras y con unos punteros que están incluidos
en los BCP.
Algoritmos de planificación
• Ciclico o Round Robin
- Asignacion de procesador rotatoria
- Equitativo (mejor hacerlo por uid y no por proceso)
- Uso en sistemas de tiempo compartido
Se asigna un tiempo maximo de procesador (rodaja)

Prioridades
- Fijas (problema de 111a11ici6n)
- Aumentarlas con el envejecimiento
Algoritmos de planificación

• Planificación de sistemas de tiempo real.


• A plazo fijo: ejecuta una vez en un instante
determinado.
• Periódico: ejecuta de forma repetitiva cada ciernto
tiempo.
Señales
Señales
• Las señales son interrupciones al proceso
• Envio o generacion
Proceso- Proceso ( dentro del grupo) con el kill
- SO - Proceso

Serial
� +rFunc16n
\. �otam1ento
C6digo
==
Señales II
• Hay muches trpos de seiiales, segun su origen
• SIGILL mstruccion ilegal
• SIGALRM vence el temporizador
• SIGKILL mata al proceso
• El SO las transmite al proceso
- El proceso debe estar preparado para recibirla
• Especificando llll procedimiento de sefial con sigaction
• Enmascarando la senal con sigprogmask
-Si no esta preparado -> accion por defecto
• El proceso, en general, muere
• Hay algunas seiiales que se iguoran o tienen otro efecto
• El servicio pause para el proceso hasta que recibe una señal
Excepciones

• El programador encierra dentro del bloque TRY el fragmento de código que quiere
proteger de la generación de excepciones. En el Bloque EXCEPT sitúa el manejador
de excepciones. En caso de generarse una excepción en el bloque TRY, el Sop
transfiere el control al bloque EXCEPT que se encargara de manejar la
correspondiente excepción.
Temporizadores

• El SO mantiene un temporizador por proceso


- El proceso active el temporizador alarm c
o
• El SO envia una señal SIGALRM al proceso cuando n
vence su temporizador a
l
a
Servicios de gestión de
proceso
Creación de un proceso
Creación de un proceso

• Se invoca el servicio FORK. El Sop trata


este servicio realizando una clonación
del proceso que lo solicite. El proceso que
solicita el servicio se convierte en el
proceso padre del nuevo proceso, que es,
a su vez, el proceso hijo. El prototipo de
esta función es:
• pid_t fork()
Creación de procesos: fork()

• La llamada fork() crea una copia (hijo) del


proceso que la invoca
• El hijo hereda del padre:
▪Estado
▪Semáforos
▪Objetos de memoria
▪Política de planificación, etc.
• El hijo no hereda:
▪El PID
▪Alarmas y temporizadores
▪Operaciones de E/S asíncronas
Interfaz de fork()

• Definida en:
#include <sys/types.h>
pid_t fork(void);
• Valores de retorno:
▪Al padre: el PID del hijo
▪Al hijo: cero
▪En caso de error: devuelve -1 y la variable
errno contiene el valor asociado al error
Ejemplo del Fork
#include <sys/types.h>
int main(void) {
pid_t id;
id = fork();
if (id == -1) {
perror (“Error en el fork”);
exit (1);
}
if (id == 0) {
while (1) printf (“Hola: soy el hijo\n”);
} else {
while (1) printf (“Hola: soy el padre\n”);
}
} /* Fin de main */
Otro ejemplo
• 01) #include <unistd.h> • Las lineas número (01)-(03) contienen los includes
• (02) #include <sys/types.h> de las librerías necesarias (E/S estándar,
• (03) #include <stdio.h> (
• 04) int main() multitarea).
• (05) { El main (como siempre en GNU), devuelve un entero,
• (05) pid_t pid; que es normalmente cero si el programa llega al
• (06) int i; final sin errores o un código de error si va algo mal;
• (07) pid = fork();
• (08) if (pid == 0){ Luego definimos un tipo de dato para contener un
• (09) for (i = 0; i < 8; i++){ pid (05) y un entero para usarlo como contador del
• (10) printf("-Hijo-\n"); bucle (06). Estos dos tipos, como se dijo antes, son
• (11) } idénticos, pero están ahí para mayor claridad.
• (12) return(0); (
• 13) } En la linea (07) llamamos a la función fork, la cual
• (14) for (i = 0; i < 8; i++){ devolverá cero al programa ejecutado en el proceso
• (15) printf("+Padre+\n"); hijo y el pid del proceso hijo al padre; la
• (16) } comprobación está en la linea (08). Ahora el código
• (17) return(0);
• (18) } de las lineas (09)-(13) se ejecutarán en el proceso
hijo, mientras que el resto (14)-(16) las ejecutará el
padre.
Servicio POSIX, fork
Las diferencias que existen entre el
proceso hijo y el padre son:
• El proceso hijo tiene su propio identificador(PID).
• El proceso hijo tiene una nueva descripción de la
memoria. Aunque el hijo tenga los segmentos
con el mismo contenido, no tienen por que estar
en la misma zona de memoria.
• El tiempo de ejecución del proceso hijo es igual a
cero.
• Todas la alarmas pendientes se desactiva en el
proceso hijo.
• El conjunto de señales pendientes se pone en
cero.
• El valor que retorna el sistema operativo como
resultado de fork() es distinto en el hijo que el
padre (el hijo recibe un 0 y el padre el PID del
Condición para que el Padre y el
hijo sigan flujos de ejecución
distintos
Ejemplo: Programa que crea un
proceso
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(){
pid_t pid;
pid = fork();
if(pid==-1) /* error del fork() */
printf(“Error\n”);
else if(pid==0)
printf("Soy el HIJO, Proceso %d; padre = %d \n", getpid(),
getppid());
else
printf("Soy el PADRE, Proceso %d\n", getpid());
}
Ejemplo: Programa que crea una
cadena de procesos
// En cada ejecución del bucle crea un proceso. El proceso padre obtiene el
// identificador del hijo, que será distinto de cero y saldrá del bucle utilizando
la sentencia “break”. El proceso hijo continuará la ejecución, repitiéndose
// este proceso hasta que se llegue al final del bucle
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
int i;
int n = 10;
for (i = 0; i < n; i++){
pid = fork();
if (pid != 0)
break;
}
printf("El padre del proceso %d es %d\n", getpid(), getppid());
}

Das könnte Ihnen auch gefallen