universidad tecnológica nacional facultad regional buenos aires

9
Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Funciones Útiles fork() Sistemas Operativos

Upload: isabelle-whitfield

Post on 30-Dec-2015

28 views

Category:

Documents


0 download

DESCRIPTION

Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información. Sistemas Operativos. Funciones Útiles fork(). Fork() – Caso base. #include int main (void) { char c; printf("Ingrese un caracter\n"); c = getchar(); - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Universidad Tecnológica Nacional

Facultad Regional Buenos AiresIngeniería en Sistemas de

Información

Funciones Útilesfork()

Sistemas Operativos

Page 2: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Fork() – Caso base

#include <stdio.h>

int main (void) {char c;printf("Ingrese un caracter\n");

c = getchar();printf(“Se ingresó: %c\n", c);

}

¿Cómo puedo hacer si quiero que si el usuario no presiona ninguna tecla imprima en pantalla el mensaje nuevamente cada un segundo?

Page 3: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Fork() – Introducción

Proceso ejecutando

- Código (solo lectura)- Datos (memoria dinámica)- Stack (asignaciones estáticas)

• Identificador único (PID)• Padre único• Tres estructuras de memoria

Page 4: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Fork() – Introducción

UID PID PPID C STIME TTY TIME CMDroot 1 0 0 12:41 ? 00:00:00 init [2]100 2173 1 0 12:41 ? 00:00:00 /usr/sbin/exim4 -bd -q30mroot 2184 1 0 12:41 ? 00:00:00 /usr/sbin/inetdroot 2206 1 0 12:41 ? 00:00:00 /usr/sbin/sshdstatd 2210 1 0 12:41 ? 00:00:00 /sbin/rpc.statddaemon 2217 1 0 12:41 ? 00:00:00 /usr/sbin/atdroot 2224 1 0 12:41 ? 00:00:00 /usr/sbin/cronroot 2239 1 0 12:41 tty1 00:00:00 /bin/login --root 2242 1 0 12:41 tty2 00:00:00 /sbin/getty 38400 tty2root 2243 1 0 12:41 tty3 00:00:00 /sbin/getty 38400 tty3root 2244 1 0 12:41 tty4 00:00:00 /sbin/getty 38400 tty4root 2245 1 0 12:41 tty5 00:00:00 /sbin/getty 38400 tty5root 2246 1 0 12:41 tty6 00:00:00 /sbin/getty 38400 tty6root 2262 2239 0 12:42 tty1 00:00:00 -bash

Page 5: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Fork() – Introducción

fork()

Proceso en ejecución (PID x)

Proceso Padre (PID x) Proceso Hijo (PID Y / PPID X)

Page 6: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Fork() – ¿Para Qué?Respuesta 1:Que los dos procesos sean iguales no quiere decir que tengan que seguir haciendo lo mismo.

fork()

Proceso en ejecución (PID x)

Proceso en ejecución (PID x). ahora padre de Y

Proceso en ejecución (PID Y).

Hijo de X

Leer_de_teclado()

Escribir_en_archivo()

Page 7: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Fork() – ¿Para Qué?Respuesta 1:Que los dos procesos sean iguales no quiere decir que tengan que seguir haciendo lo mismo.

int main() { int pid = 0, status = 0;

pid = fork()

if (pid == 0) { /* SOLO Proceso Hijo */ printf(``El PID de mi proceso padre es %d\n'', getppid()); exit(1); } else { /* SOLO Proceso Padre */ printf(``Mi PID es el %d y el de mi hijo es %d\n'', getpid(), pid); exit(0); }}

Page 8: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Fork() – Notas

- El proceso hijo comparte el entorno con el proceso padre. (Descriptores abiertos)

-El proceso padre debe esperar la muerte del proceso hijo para que este no sea un zombie. funcion wait()

- Todo proceso puede a su vez ser padre

- Al morir un hijo se recibe la señal SIGCHLD

- Al morir un padre deben morir sus hijos

Page 9: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Fork() – Exec*()La familia de funciones exec() reemplaza la imagen de proceso actual con la imagen de un proceso nuevo.

fork()

Proceso en ejecución (PID x)

if (pid == 0) { // hijo execv(“/bin/ls”, NULL); // nunca se ejecuta exit(0); } else {

// padre wait (pid); exit(0); }