sistemas operativos - ipcgnudelman/sistemas_operativos_ipc.pdf · funciones de alocación de...
Post on 25-Mar-2020
14 Views
Preview:
TRANSCRIPT
Sistemas Operativos - IPC
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Técnicas Digitales III Ing. Gustavo Nudelman 2012
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
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)
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Creación de procesos – fork()
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)
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
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.
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)
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)
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
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
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.
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!!
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
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
top related