Teora de Sistemas Operativos Sincronizacin seales Departamento de
- Slides: 24
Teoría de Sistemas Operativos Sincronización: señales Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz http: //www. elo. utfsm. cl/~elo 321
Procesos y Señales Creación Señales Pipes Fifos La forma de crear procesos en *NIX es invocar la llamada al sistema fork. El proceso que invoca a fork es llamado proceso padre, y el nuevo proceso creado es llamado proceso hijo 2
Procesos y Señales Creación Señales Pipes Fifos Sintaxis y Uso: #include<sys/types. h> #include <unistd. h> pid_t fork(void); pid = fork(); Retorno: • 0 en hijo • Identificador de hijo en el padre • -1 en caso de error 3
Procesos y Señales Creación Señales Pipes Fifos int main(void) { pid_t pid, p_pid; pid = fork(); switch (pid) { case -1: printf ("errorn"); exit(1); break; case 0: printf("Proceso hijo: PID mio: %d, PID padre: %dn", getpid(), getppid()); break; default: printf("Proceso padre: PID mio: %d, PID hijo: %d, PID padre %dn", getpid(), pid, getppid()); } exit(0); } 4
Procesos y Señales Creación Señales Pipes Fifos Las señales informan a los procesos de la ocurrencia de un evento asincrónico Los procesos pueden enviarse señales a través de la llamada al sistema kill o el kernel puede enviarlas directamente Funciones clave: • kill() • signal() 5
Procesos y Señales Creación Señales Pipes Fifos int kill(pid_t pid, int signal); permite enviar una señal a un proceso argumentos: • pid • señal ejemplo: • kill(340, SIGINT) 6
Procesos y Señales Creación Señales Pipes Fifos signal() Indica la función que debe ejecutarse al recibir una señal. argumentos: • Tipo de señal • función ejemplo • signal(SIGINT, prueba) 7
Procesos y Señales Creación Señales Pipes int kill(pid_t pid, int signal); Ejemplo: ejemplo 04_signal/ Fifos 8
Procesos y Señales Creación Señales Pipes Fifos 9
Procesos y Señales Creación Señales Pipes Fifos l. Proveen una interfaz para comunicar procesos l. Redirecciona la salida de un comando hacia la entrada del otro STDOUT de un proceso al STDIN de otro Ej. % ls -las l grep prueba l. Funciones claves: popen(), pclose(); 10
Procesos y Señales Creación Señales Pipes Función popen : • Crea una pipe • Crea otro procesos y lee o escribe de la pipe Fifos Uso #include <stdio. h> FILE *popen (const char *command, const char *type); 11
Procesos y Señales Creación Señales Pipes Fifos Se crea una pipe entre el proceso que invoca la función y el comando especificado Según el valor de type = r : el proceso que invoca a popen lee desde la pipe, es decir, de la salida de command (su STDOUT) type = w: el proceso que invoca a popen escribe a la pipe, es decir, en la entrada de command (su STDIN) 12
Procesos y Señales Creación Señales Pipes Fifos Función pclose(*stream): l. Cierra el flujo (stream) de I/O que fue creada por popen (la pipe) l. Espera a que termine el comando (command) l. Retorna el status del shell (que ejecutó el comando) 13
Procesos y Señales Creación Señales Pipes Fifos 14
Procesos y Señales Creación Señales Pipes Fifos l. Una pipe puede creada con la función pipe l. La función pipe provee una comunicación unidireccional para el flujo de datos: Uso: #include <stdio. h> int pipe(int fd[2]); 15
Procesos y Señales Creación Señales Pipes La función pipe retorna 2 descriptores de archivo: • fd[0] : para lectura • fd[1] : para escritura Fifos 16
Procesos y Señales Creación Señales Pipes En general, la pipe se utiliza para comunicar 2 procesos (padre e hijo) La pipe con los 2 procesos se visualiza de la siguiente manera: Fifos 17
Procesos y Señales Creación Señales Pipes Fifos Para realizar la comunicación entre el padre y el hijo se debe realizar: • El proceso padre crea una pipe • Se llama a fork creando una copia del padre • El proceso padre cierra la lectura de la salida de la pipe • El proceso hijo cierra la escritura a la entrada de la pipe 18
Procesos y Señales Creación Señales Pipes Fifos Para tener un flujo de datos bidireccional: l. Crear pipe 1 (fd 1[0] y fd 1[1]) y crear pipe 2 (fd 2[0] y fd 2[1]) l. El padre cierra la lectura desde la salida de la pipe 1 l. El padre cierra la escritura a la pipe 2 l. El hijo cierra la lectura desde la salida de la pipe 2 l. El padre cierra la escritura a la pipe 1 19
Procesos y Señales Creación Señales Pipes Fifos 20
Procesos y Señales Creación Señales Pipes Fifos l. FIFO es similar a una pipe, establece un canal unidireccional de comunicación entre 2 procesos no relacionados l. Una FIFO es creada por la función mkfifo. int mkfifo(const char *pathname, mode_t mode); 21
Procesos y Señales Creación Ejemplo Proceso “Receptor” Señales Pipes Fifos 22
Procesos y Señales Creación Ejemplo Proceso “Transmisor” Señales Pipes Fifos 23
Procesos y Señales Creación Señales Pipes Ayuda en Línea: lhttp: //manuales. elo. utfsm. cl sección “Manuales en Línea” Fifos l. En línea de comandos: $ info libc 24
- La teora
- Buddy system sistemas operativos
- Control de procesos sistemas operativos
- Unix 1969
- Concurrencia de procesos sistemas operativos
- Estructura jerarquica sistemas operativos
- Teoria de sistemas operativos
- Clasificaciones de los sistemas operativos
- Sistemas operativos portables
- Ventajas de symbian os
- Memoria compartida distribuida
- Hebras sistemas operativos
- Sistemas operativos de tempo real
- Ejemplos de sistemas operativos monoliticos
- Sistemas operativos clasificacion
- Objetivos de un sistema operativo
- Sistemas operativos
- Control de procesos sistemas operativos
- Sistemas operativos
- Tabla de procesos sistemas operativos
- Buddy system allocation
- Administracion sistemas operativos
- Sistemas operativos esquema
- Planificador de procesos
- Drivers