sistemas operativos - ipcgnudelman/sistemas_operativos_ipc.pdf · funciones de alocación de...

15
Sistemas Operativos - IPC Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Técnicas Digitales III Ing. Gustavo Nudelman 2012

Upload: others

Post on 25-Mar-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

Sistemas Operativos - IPC

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

Técnicas Digitales III Ing. Gustavo Nudelman 2012

Page 2: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

Creación de procesos

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

• Un proceso puede crear a otro mediante la llamada al sistema

fork() (no es la única manera de crear procesos)

• Se dice que el proceso creado es “hijo” del proceso que ejecuto la

llamada al sistema

• El proceso hijo hereda los recursos del proceso creador (padre)

pero los contenidos no son copiados al momento de crear el

proceso.

• Luego de la llamada al sistema: • El proceso padre continua el flujo de ejecución del programa

obteniendo de la función fork() el pid del proceso hijo.

• El proceso hijo inicia la ejecución del programa desde el mismo punto

que el proceso padre, obteniendo de la función fork() el valor cero

• Dado que en la system call que provoca la función fork() se invocan varias

funciones de alocación de memoria por parte del kernel, la misma podría

fallar devolviendo -1

Page 3: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

Proceso hijo creado con fork()

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

• Desde el punto de vista del programador de aplicaciones,

podemos decir que el proceso hijo:

• Es una copia exacta del padre con un nuevo pid

• Tiene las mismas variables y archivos abiertos

• Las variables son independientes (padre e hijo poseen

distintas pilas)

• Los archivos son compartidos (el hijo hereda el mismo

descriptor)

Page 4: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

Creación de procesos – fork()

Page 5: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

Creación de procesos - Resumen

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

• Cuando un proceso invoca la creación de un proceso hijo se crea

una instancia de si mismo aunque no se duplican totalmente las

áreas de memoria definidas para este

• Si algún elemento del área de datos es modificado en alguna de

las 2 instancias, se realizara en ese momento la copia de dicho

elemento. “Copy on write”

• El código ejecutable de un proceso también puede ser

reemplazado mediante la familia de funciones exec.

• De todas maneras, cada instancia creada tiene definida: • Área de código ejecutable

• Área de datos inicializados y no inicializados

• Un stack de modo user

• Código ejecutable de bibliotecas compartidas

• Memoria que puede requerir dinámicamente (heap)

Page 6: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

IPC (Inter process communication)

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

• El sistema operativo presenta mecanismos para que diferentes

procesos puedan intercambiar información llamados “Mecanismos

IPC”

• Existen mecanismos IPC que requieren que los procesos tengan

“parentesco” como también mecanismos que no lo requieren.

• Comunicar procesos trae aparejado la necesidad de sincronizar la

comunicación. Algunos mecanismos cuentan con sincronismo

mientras que en otros debemos implementarlo por otra vía.

• Una de las columnas principales, para desarrollar soluciones

sobre estandares multitarea, es el conocimiento de comunicación

entre procesos

Page 7: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

IPC - Señales

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

• Una señal es la notificación por software a un proceso de la

ocurrencia de un evento

• Se trata del mecanismo mas simple y primitivo para comunicar

procesos UNIX.

• El sistema operativo cuenta con un set definido de señales para

que sean enviadas a los procesos.

• Una señal puede ser enviada desde otro proceso, desde el mismo

kernel o lo puede hacer un usuario mediante su interfaz de

trabajo.

• La señal no transporta ningún tipo de información adicional que la

propia señal

• El proceso que la recibe interrumpe la ejecución normal del código

y pasa a ejecutar el handler que dicho proceso tiene predefinido

para esa señal.

Page 8: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

IPC – Señales - Implementación

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

• Para preparar a un proceso a que reciba una señal debemos

realizar 2 cosas

• Escribir el handler que deberá ejecutarse al recibir la señal

Se trata de una función en C

• Indicarle al kernel que asocie la función (que funcionará como

handler) a la señal que nos interesa interceptar.

Se utiliza la system call sigaction()

int sigaction(int signum, const struct sigaction *act,

struct sigaction *oldact);

(donde la estructura sigaction esta definida en signal.h)

Page 9: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

Enviando señales a los procesos

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

• Tenemos 2 maneras de enviar señales a los procesos;

Desde la consola de comandos

# kill -<signal> pid (ej: kill –SIGKILL 2345)

Shorcuts como CTRL + C SIGINT

CTRL + Z SIGSTOP

Desde el código de un proceso

int kill (pid_t pid, int sig)

Page 10: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

IPC - Señales # Name Action default Description Posix

1 SIGHUP Terminate Terminal descon Yes

2 SIGINT Terminate CTRL + C Yes

3 SIGQUIT Dump quit Yes

4 SIGILL Dump Illegal Instruc Yes

5 SIGTRAP Dump Dbg breakpoint No

6 SIGABRT Dump Abnormal quit Yes

7 SIGIOT Dump Bus error No

8 SIGBUS Dump FPU exception Yes

9 SIGKILL Terminate Forced ending Yes

10 SIGUSR1 Terminate For general use Yes

11 SIGSEGV Dump Segment invalid Yes

12 SIGUSR2 Terminate For general use Yes

13 SIGPIPE Terminate Broken pipe Yes

14 SIGALARM Terminate RTC Yes

15 SIGTERM Terminate End of process Yes

16 SIGSTKSLT Terminate Coprocessor err No

Page 11: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

IPC - Señales # Name Action default Description Posix

17 SIGCHLD Ignore End of child Yes

18 SIGCONT Continue Resume stoped Yes

19 SIGSTOP Stop Stop process Yes

20 SIGTSTP Stop Stop process Yes

21 SIGTTIN Stop I back needed Yes

22 SIGTTOU Stop O back needed Yes

23 SIGURG Ignore Urgent Sock No

24 SIGXCPU Dump CPU Timeout No

25 SIGXFSZ Dump File size exced No

26 SIGVTALRM Terminate Virtual Timer No

27 SIGPROF Terminate Profile Timer No

28 SIGWINCH Ignore Window resize No

29 SIGIO Terminate I/O allowed No

30 SIGPWR Terminate Power failure No

31 SIGSYS Dump System call fail No

Page 12: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

Procesos zombies

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

• Cuando un proceso finaliza le envía la señal SIGCHLD a su

padre.

• El proceso padre debe dar acuse de recibo de la misma.

• Si no lo hace el proceso hijo no completa su finalización, no libera

completamente los recursos y se dice que queda en estado

zombie o defunct

• La manera de dar acuse de recibo por parte del proceso padre es

mediante la función wait()

• Si el proceso padre no existe (porque finalizo antes que el

proceso hijo) el proceso hijo será hijo de init quien dará el acuse

correspondiente.

Page 13: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

IPC - Pipes

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

• Se crean mediante la system call pipe()

• Como resultado se obtienen 2 file descriptors (o mejor dicho. . .Un

array de 2 file descriptors)

La lectura es extractiva!!

Page 14: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

IPC - Pipes

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

• Se trata de recursos que no son visibles fuera del proceso que los

crea y/o procesos que hereden los file descriptors que lo

identifican

• Son usados por procesos que mantienen parentesco y que

pueden heredar los descriptores de archivo.

• Muchas veces un proceso padre desea tomar el stdout del hijo

• También es lo que creamos por línea de comando cuando

redirigimos el stdout de un proceso hacia el stdin de otro proceso

como por ejemplo efectuando ls | wc -l

Page 15: Sistemas Operativos - IPCgnudelman/Sistemas_Operativos_IPC.pdf · funciones de alocación de memoria por parte del kernel, la misma podría fallar devolviendo -1 . Proceso hijo creado

Named Pipes - FIFO

Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

• Se trata de pipes que poseen una entrada en el file system. Es

decir son mostrados como inodos.

• Esto posibilita comunicar procesos tengan o no parentesco.

• Se los conoce también como named pipes.

• Pueden ser creados:

• Desde el código de un programa

mknod (<name>, S_IFIFO | 0660, 0);

• Desde el shell.

$ mknod <name> p

Lo utilizaremos mas adelante para crear dispositivos