PDF de programación - Tema 5: Comunicando procesos

Imágen de pdf Tema 5: Comunicando procesos

Tema 5: Comunicando procesosgráfica de visualizaciones

Publicado el 11 de Septiembre del 2019
68 visualizaciones desde el 11 de Septiembre del 2019
540,1 KB
29 paginas
Creado hace 9a (17/03/2010)
Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Tema 5: Comunicando procesos

Enrique Soriano

Laboratorio de Sistemas,

Grupo de Sistemas y Comunicaciones,

URJC

17 de marzo de 2010

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento -

NoComercial - SinObraDerivada (by-nc-nd). Para obtener la licencia completa, véase

http://creativecommons.org/licenses/by-sa/2.1/es. También puede solicitarse a Creative Commons, 559 Nathan

(cc) 2010 Grupo de Sistemas y Comunicaciones.

Abbott Way, Stanford, California 94305, USA.

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Hasta ahora...

• ... los procesos que ejecutábamos tenían su entrada y su salida

en la consola (/dev/cons).

• Pero stdin, stdout, y stderr se pueden redirigir a otros

ficheros.

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Redirecciones en el Shell

• > y < son caracteres especiales para el shell.
• > para redirigir la salida estándar a otro fichero.
• < para redirigir la entrada estándar a otro fichero.
• P. ej.

term % ps > procesos.txt
term % wc -l procesos.txt
term % wc procesos.txt
term % echo hola que tal > hola.txt
term % cat < /NOTICE

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Redirecciones en Shell

• La mayoría de los comandos que aceptan ficheros como

argumentos también leen de su entrada estándar cuando se
invocan sin argumentos:
term % cat < procesos.txt
term % cat procesos.txt # no es lo mismo!!
term % cat > carta.txt

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Plan 9: /fd

• Los comandos que sólo admiten argumentos (raro) se puede

usar /fd/0 y /fd/1.
term % cat /fd/0 # cat lee de su entrada estándar
term % cp /fd/0 /fd/1 # se lee de stdin, se
escribe en stdout

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

/dev/null

• /dev/null es “ninguna parte”.
term % script > /dev/null

• Los comandos que ejecutan en background (&) tiene su

entrada estándar redirigida a /dev/null. P. ej:
term % cat &

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Salida de errores

• Existe para que no se mezclen las salidas. P. ej.

term % ls /kokoko > /tmp/afile
ls: /kokoko does not exist
term % cat /tmp/afile # no hay nada!

• Los hijos heredan la tabla de descriptores de fichero: desde el
inicio de los tiempos tienen 0 (stdin) , 1 (stdout) y 2 (stderr)
apuntando a /dev/cons!

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Más redirecciones

• >>

Redirige la salida sin truncar. Es un open() + seek(), no como
un create().
• >[numero]

Redirige la posición especificada en la tabla de FDs. P. ej.
term % ls * >[2] /tmp/errores

• >[numero1=numero2]

Duplica el descriptor numero2 en el numero1. Atención: se
aplican de izquierda a derecha. P. ej.
term % ping 172.26.0.1 > /dev/null >[2=1]

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Conjugando

• Se pueden conjugar:

term % cat < /tmp/afile > /tmp/copia-afile
term % wc -l /tmp/afile > /tmp/cuentas >[2]
/dev/null

• term % echo ’error!!!’ >[1=2]
• term % cat < afile > afile # afile se trunca!

Solución: Usa un fichero temporal.

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Dup

• int dup(int oldfd, int newfd);
• Duplica FDs: dado un FD (oldfd) con un fichero abierto,
devuelve otro FD (newfd) con el mismo fichero abierto.

• Si newfd es -1, escoge la posición libre más baja de la tabla.
Si es distinto, cierra (si es necesario) el fichero abierto en esa
posición y duplica el descriptor.

ver dup.c

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Pipes

• Estilo “Unix”: pequeños programas que leen datos por su
entrada estándar, los procesan, y los escriben por su salida
estándar.

• |

Los pipes nos permiten concatenar comandos conectando la
entrada de uno a la salida de otro.

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Pipes

• Cada extremo del pipe se comporta como un fichero.
• Todo lo que se escribe en un extremo se lee en el otro.

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Pipes

P. ej.
term % ls *.txt | wc -l

LSWCRC01234...nTabla de Descriptores01234...nTabla de Descriptoresstdoutstdin Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Pipes

P. ej.
term % cat *.txt | grep ’Enrique Soriano’ | wc -l

CATGREPRCstdoutstdinWCstdoutstdin Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Pipes

Más ejemplos:

• term % ps | grep fossil | grep Sleep | wc -l
• term % echo ls | rc
• term % broke | rc

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Pipe

• int pipe(int fd[2]);
• El array contendrá los dos FDs del pipe (uno para cada

extremo).

• En Plan 9 los pipes son full-duplex: se puede enviar en ambos

sentidos simultáneamente. Ojo: en Unix son simplex.

• No se debe usar como medio de almacenamiento.
• Se debe crear antes de llamar a fork() para ambos procesos lo

compartan.

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Pipe

• Debemos cerrar el extremo que no vamos a usar.
• Se conservan los límites de escritura (en Plan 9).
• Un pipe tiene un buffer limitado.
• Leer de un pipe vacío te deja bloqueado.
• Escribir en un pipe lleno te deja bloqueado.
• Leer si no hay nadie al otro lado: retorna 0 bytes. No se puede

diferenciar de un write() de 0 bytes.

• Escribir en un pipe sin nadie al otro lado: error.
• Ambos procesos deben leer/escribir en paralelo, no

secuencialmente, ¿Qué pasa si se llena el pipe? → deadlock.

ver pipe.c, pipexec.c, piperead.c, fill.c

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Shell: comillas invertidas

• El shell reemplaza ‘{...} por la salida de la ejecución del

comando.

• term % echo ‘{seq 1 5}

1 2 3 4 5

SEQRCstdoutfd N Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Pipes no lineales

• El shell reemplaza <{...} por el path del pipe en el que se
• term % cat <{seq 1 3} # se traduce en cat /fd/5

escribe la salida de los comandos ...

1
2
3

CATSEQRC0123456Tabla de Descriptores01234...nTabla de Descriptoresstdoutargv[1] "/fd/5"Path: /fd/5fd 6 Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Síncrono vs. Asíncrono

• Síncrono: la comunicación se realiza cuando se llama a una

función.

• Asíncrono: la comunicación se realiza en cualquier momento,
no al realizar una llamada. Se interrumpe la ejecución normal
del proceso.

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Notas

• Las notas (señales en Unix) son mensajes que se procesan de
forma asíncrona. P. ej. al pulsar Del en una ventana, se envía
la nota a todos los procesos que comparten dicha ventana.

• En realidad, se envía la nota a un grupo de procesos llamado

notegp.

• Normalmente hay un notegp por cada ventana.
• El proceso que recibe la nota se encarga de procesarla cuando

le toca ejecutar.

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Atnotify

• int atnotify(void (*f)(void *, char*), int in);
• Si in es 1 la función f como manejador de notas. Si es 0, la

elimina.

• Si el manejador retorna 0, es que no ha procesado la nota. Si

devuelve 1, es que sí lo ha hecho.

• Si ningún manejador procesa una nota, el programa muere.

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Notas

Las más comunes:

• interrupt → el usuario ha interrumpido el proceso (Del).
• hangup → se ha cerrado la conexión de E/S.
• alarm → se puso una alarma y ha saltado.
• sys: bad address → el kernel nos está “matando” por usar

una dirección de memoria inválida (p. ej. nil).

ver interrupt.c

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Notas

En general, son peligrosas y hay que evitar su uso:

• Interrumpen ciertas llamadas al sistema (las bloqueantes:

read(), write(), etc.).

• Rompe tu idea de un único flujo de control secuencial.

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Alarmas

• long alarm(ulong milsec);
• Permiten determinar un timeout para una operación

bloqueante.

• Si milsec es 0, desactiva la alarma.
• Retorna el número de milisegundos que faltaban para saltar.

ver alarm.c

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Plan 9: /srv

• Plan 9 nos deja “pinchar” descriptores de fichero en un

directorio llamado srv:

ver srv.c

FACTOTUMFOSSILBOOTMYAPPL#s/factotum#s/dns#s/boot#s/myapplsrvfs #sAPPLmount '#s/boot' /n/bootFD 4FD 7FD 5REDFD 6FD 3FD 6FD 4 Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Polling vs. Eventos

Hay dos modelos para recibir mensajes:

• Polling: cada cierto tiempo se mira si hay algún mensaje que
procesar → se malgastan recursos si los mensajes son poco
frecuentes. Si se reduce la frecuencia de polling, se procesan
con retardo.

• Eventos: se subscribe a un tipo de mensajes, y se recibe un

evento cuando hay alguno.

Redirección de entrada/salida

Pipes

Notas y grupos de procesos

/srv

Plumber

Plumber

• Plumber es un sistema de ficheros que tiene reglas y puertos.
Una regla determina a qué puerto se debe reenviar el mensaje.
Un puerto envía el mensaje a todos los procesos subscritos.

• /mnt/plumb/rules → reglas actuales.
• /mnt/plumb/send → fichero para escribir los mensajes.
• El resto son los puertos disponibles.
  • Links de descarga
http://lwp-l.com/pdf16565

Comentarios de: Tema 5: Comunicando procesos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

Revisar política de publicidad