Está en la página 1de 10

CAPITULO 2

Procesos: Llamada al sistema fork()


CONCEPTO DE PROCESOS
✓ Un proceso es un programa en ejecución.

• Programa: entidad pasiva


• Proceso: entidad activa (programa cargado en
memoria)

pseudo-codigo Heap

int main() { Stack


Imprimir (“Hola mundo”) Data
} Text
Fig. Proceso en memoria

Sistemas Operativos I Cursado 2020 Capítulo 2 --- Procesos y threads 2


JERARQUIA DE PROCESOS
Un proceso que tiene determinadas necesidades particulares de
cómputo, puede crear otro proceso al que le delega ese cómputo.

Se establece una jerarquía de procesos, donde un proceso padre crea


procesos hijos, los que a su vez pueden crear otros procesos hijos,
formándose un árbol de procesos.

Sistemas Operativos I Cursado 2020 Capítulo 2 --- Procesos y threads 3


CREACION DE PROCESOS

Creación de procesos en unix

✓ fork
System call para crear un nuevo proceso.

✓ exec
System call que se usa después de fork para reemplazar el
código en el espacio de memoria del nuevo proceso.

Sistemas Operativos I Cursado 2020 Capítulo 2 --- Procesos y threads 4


fork()

✓ Es una llamada al sistema que permite crear un nuevo


proceso idéntico al que realiza la llamada.
⚫ El SO hace una copia del área de memoria del proceso
llamador (Text, Data, Stack y Heap) en otro espacio de
direcciones y lo asigna al nuevo proceso.

Heap Heap

Stack Stack

Data Data

Text Text

Espacio en memoria del proceso que ejecuta Espacio en memoria del nuevo proceso.
fork() Es una copia o duplicado de la memoria del proceso
padre al momento de ejecutar la llamada fork().

Sistemas Operativos I Cursado 2020 Capítulo 2 --- Procesos y threads 5


fork() (cont)

⚫ Cuando el SO finaliza la atención de la llamada fork(), el


proceso padre y el hijo ejecutan concurrentemente.

⚫ Ambos procesos pueden invocar la llamada fork() para crear


otros procesos.
Proceso
Padre

fork()

Proceso
Hijo

Sistemas Operativos I Cursado 2020 Capítulo 2 --- Procesos y threads 6


fork(): valor de retorno

✓ Retorna -1, si no es exitosa la llamada.

✓ Retorna 0 al proceso hijo.

✓ Retorna el identificador (PID) del proceso hijo al proceso


padre.
Heap Retorna PID del Heap
proceso HIJO
(número > 0) Stack Retorna 0
Stack

Data Data

Text Text

Espacio en memoria del proceso PADRE Espacio en memoria del proceso HIJO

Sistemas Operativos I Cursado 2020 Capítulo 2 --- Procesos y threads 7


BLOQUE DE CONTROL DE PROCESOS (PCB)
✓ Al crear un proceso usando fork(), el sistema:

⚫ crea e inicializa un nuevo PCB para el proceso HIJO.

⚫ inicializa recursos del proceso HIJO con los recursos


que el PADRE tenía asignados al momento de ejecutar
la llamada fork(), como por ejemplo archivos abiertos.

Sistemas Operativos I Cursado 2020 Capítulo 2 --- Procesos y threads 8


BLOQUE DE CONTROL DE PROCESOS (PCB)

✓ ¿En qué se va a diferenciar el PCB del


proceso HIJO con el del proceso
PADRE?

✓ ¿Dónde va a empezar la ejecución


del proceso HIJO?

Sistemas Operativos I Cursado 2020 Capítulo 2 --- Procesos y threads 9


fork()

✓ ¿Qué pasa con las variables?


pseudo-codigo
Heap Heap
int main() {
int x; Stack Stack
int pid;
Data Data
x = 20;
pid = fork();
Si (pid = 0) {
Text Text
x = 45;
} Proceso PADRE en Proceso HIJO en
imprimir(x); memoria memoria
exit()
} x=? x=?

✓ Al finalizar la ejecución, x tendrá el mismo valor para ambos


procesos?
Sistemas Operativos I Cursado 2020 Capítulo 2 --- Procesos y threads 10

También podría gustarte