Publicado el 3 de Junio del 2019
703 visualizaciones desde el 3 de Junio del 2019
2,0 MB
53 paginas
Creado hace 12a (10/10/2011)
Sistemas Operativos
sesión 12: tuberías
Grado en Ingeniería Informática
Universidad Carlos III de Madrid
ARCOS @ UC3M
Alejandro Calderón Mateos
Agenda
Linux
Comunicación
con tuberías
Ejercicios
2
ARCOS @ UC3M
Alejandro Calderón Mateos
Agenda
Linux
Comunicación
con tuberías
Ejercicios
3
ARCOS @ UC3M
Alejandro Calderón Mateos
Contenidos
• Redirección
• Tuberías (pipes)
4
ARCOS @ UC3M
Alejandro Calderón Mateos
Contenidos
• Redirección
• Tuberías (pipes)
5
ARCOS @ UC3M
Alejandro Calderón Mateos
Ejemplo de redirección de entrada
uno,
cuatro,
siete,
diez,
dos,
cinco,
ocho,
once,
f1.txt
tres
seis
nueve
doce
uno, dos, tres
cuatro, cinco, seis
siete, ocho, nueve
diez, once, doce
grep ocho < f1 1
ARCOS @ UC3M
Alejandro Calderón Mateos
Ejemplo de redirección de salida
uno,
cuatro,
siete,
diez,
dos,
cinco,
ocho,
once,
f1.txt
tres
seis
nueve
doce
uno, dos, tres
cuatro, cinco, seis
siete, ocho, nueve
diez, once, doce
siete, ocho, nueve
grep ocho < f1 > s1
ARCOS @ UC3M
Alejandro Calderón Mateos
Ejemplo de redirección de salida
uno,
cuatro,
siete,
diez,
dos,
cinco,
ocho,
once,
f1.txt
tres
seis
nueve
doce
siete, ocho, nueve
grep ocho f1 1> s1
ARCOS @ UC3M
Alejandro Calderón Mateos
Ejemplo de redirección de error
uno,
cuatro,
siete,
diez,
dos,
cinco,
ocho,
once,
f1.txt
tres
seis
nueve
doce
grep: f2: No existe el archivo o el directorio
grep ocho xx 2> s1
ARCOS @ UC3M
Alejandro Calderón Mateos
Contenidos
• Redirección
• Tuberías (pipes)
10
ARCOS @ UC3M
Alejandro Calderón Mateos
Ejemplo de uso de tuberías
uno,
cuatro,
siete,
diez,
dos,
cinco,
ocho,
once,
f1.txt
tres
seis
nueve
doce
uno, dos, tres
cuatro, cinco, seis
siete, ocho, nueve
diez, once, doce
uno, dos, tres
cuatro, cinco, seis
siete, ocho, nueve
siete, ocho, nueve
cat f1 | head -3 | tail -1
ARCOS @ UC3M
Alejandro Calderón Mateos
Agenda
Linux
Comunicación
con tuberías
Ejercicios
12
ARCOS @ UC3M
Alejandro Calderón Mateos
Contenidos
• Los descriptores de ficheros
– Redirección y duplicado
• Los descriptores de ficheros y fork()
• Tuberías
13
ARCOS @ UC3M
Alejandro Calderón Mateos
Contenidos
• Los descriptores de ficheros
– Redirección y duplicado
• Los descriptores de ficheros y fork()
• Tuberías
14
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
…
..
3
2
1
0
..
..
..
..
Proceso 1
Los descriptores de ficheros son el índice de la tabla que hay por proceso
que identifica los posibles ficheros (o dispositivos) con los que comunicarse
15
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
…
..
3
2
1
0
..
..
..
..
Proceso 1
Salida de errores
Salida estándar
Por defecto se utilizan los tres primeros para la entrada estándar, salida estándar y salida
de error respectivamente.
16
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
abstracción ofrecida
…
..
3
2
1
0
..
..
..
..
Proceso 1
Los descriptores de ficheros son una abstracción ofrecida por el sistema operativo para
referenciar los dispositivos reales. Igual que una llave numerada para una consigna.
17
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
abstracción ofrecida
…
..
3
2
1
0
..
..
..
..
Proceso 1
…
...
3
2
1
0
...
...
...
...
El sistema operativo mantiene una tabla interna con la información real de contacto con
los dispositivos y ficheros con los que los procesos piden comunicarse…
18
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
abstracción ofrecida
…
..
3
2
1
0
..
1
1
0
Proceso 1
…
...
3
2
1
0
...
...
...
...
…Y los descriptores de ficheros son el índice de la tabla que hay por proceso, cuyo
contenido es a su vez el índice de la tabla interna del sistema operativo.
19
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
abstracción ofrecida
…
..
3
2
1
0
2
1
1
0
Proceso 1
…
...
3
2
1
0
...
...
...
...
Cuando se pide un nuevo descriptor de ficheros (al abrir un fichero) se busca el primero
hueco libre de la tabla y el índice de esa posición es el descriptor asignado.
20
ARCOS @ UC3M
Alejandro Calderón Mateos
Contenidos
• Los descriptores de ficheros
– Redirección y duplicado
• Los descriptores de ficheros y fork()
• Tuberías
21
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
redirección a fichero
…
..
3
2
1
0
2
1
1
0
Proceso 1
…
...
3
2
1
0
...
...
...
...
¿
close(2) ;
1.
2. open(“/tmp/errores.txt”) ;
?
22
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
redirección a fichero
…
..
3
2
1
0
2
1
1
0
Proceso 1
…
...
3
2
1
0
...
...
...
...
close(2) ;
1.
2. open(“/tmp/errores.txt”) ;
23
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
redirección a fichero
…
..
3
2
1
0
2
1
1
0
Proceso 1
…
...
3
2
1
0
...
...
...
...
close(2) ;
1.
2. open(“/tmp/errores.txt”) ;
24
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
redirección a fichero
…
..
3
2
1
0
2
1
1
0
Proceso 1
…
...
3
2
1
0
...
...
...
...
close(2) + open(“/tmp/errores.txt”)
Es posible cambiar el archivo asociado a un descriptor.
25
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
duplicación de descriptor
…
...
3
2
1
0
...
...
...
...
…
..
3
2
1
0
2
1
1
0
Proceso 1
¿
close(3) ;
1.
2. dup(2) ;
?
26
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
duplicación de descriptor
…
...
3
2
1
0
...
...
...
...
…
..
3
2
1
0
2
1
1
0
Proceso 1
close(3) ;
1.
2. dup(2) ;
27
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
duplicación de descriptor
…
...
3
2
1
0
...
...
...
...
…
..
3
2
1
0
2
1
1
0
Proceso 1
1.
close(3) ;
2. dup(2) ;
28
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
duplicación de descriptor
…
..
3
2
1
0
2
1
1
0
Proceso 1
…
...
3
2
1
0
...
...
...
...
close(3) + dup(2)
Permite acceder a un mismo fichero desde dos descriptores diferentes
29
ARCOS @ UC3M
Alejandro Calderón Mateos
Contenidos
• Los descriptores de ficheros
– Redirección y duplicado
• Los descriptores de ficheros y fork()
• Tuberías
30
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
llamada fork()
Proceso 1
…
..
2
1
0
1
1
0
…
...
3
2
1
0
...
...
...
...
fork() crea un duplicado del hijo
31
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
llamada fork()
Proceso 1
Proceso 2
…
2
1
0
…
2
1
0
..
1
1
0
..
1
1
0
…
...
3
2
1
0
...
...
...
...
• Ambos tienen descriptores iguales (redirecciones antes del fork() se heredan)
• Ambos referencian los mismos elementos (posición L/E después del fork() común)
32
ARCOS @ UC3M
Alejandro Calderón Mateos
Descriptores de ficheros
llamada fork()
1) read(2,…)
Proceso 1
2) write(2,…)
Proceso 2
…
2
1
0
…
2
1
0
..
1
1
0
..
1
1
0
…
...
3
2
1
0
...
...
...
...
• Ambos tienen descriptores iguales (redirecciones antes del fork() se heredan)
• Ambos referencian los mismos elementos (posición L/E después del fork() común)
33
ARCOS @ UC3M
Alejandro Calderón Mateos
Contenidos
• Los descriptores de ficheros
– Redirección y duplicado
• Los descriptores de ficheros y fork()
• Tuberías
34
ARCOS @ UC3M
Alejandro Calderón Mateos
Tubería
1 creación
int p1[2] ;
…
pipe(p1) ;
…
Proceso 1
…
..
4
..
3
2
1
0
..
..
..
..
Una tubería es un fichero especial que se crea con la llamada al sistema pipe()
35
ARCOS @ UC3M
Alejandro Calderón Mateos
Tubería
1 creación
pipe
int p1[2] ;
…
pipe(p1) ;
…
Proceso 1
…
..
4
..
3
2
1
0
..
..
..
..
Una tubería es un fichero especial que se crea con la llamada al sistema pipe()
36
ARCOS @ UC3M
Alejandro Calderón Mateos
Tubería
1 creación
…
..
int p1[2] ;
…
pipe(p1) ;
…
Proceso 1
p1[1]
4
p1[0]
3
2
1
0
..
..
..
..
..
write(p1[1],…)
pipe
read(p1[0],…)
Una tubería es un fichero especial que se crea con la llamada al sistema pipe()
Dicha llamada crea la tubería y reserva dos descriptores de ficheros: lectura y escritura
37
ARCOS @ UC3M
Alejandro Calderón Mateos
Tubería
1 creación
…
..
int p1[2] ;
…
pipe(p1) ;
…
Proceso 1
p1[1]
4
p1[0]
3
2
1
0
..
..
..
..
..
write(p1[1],…)
pipe
read(p1[0],…)
• Si se escribe en una tubería llena, se bloquea la ejecución del proceso hasta poder escribir.
• Si se lee de una tubería vacía, se bloquea la ejecución del proceso hasta poder leer algo.
38
ARCOS @ UC3M
Alejandro Calderón Mateos
Tubería
1 creación
…
..
int p1[2] ;
…
pipe(p1) ;
…
Proceso 1
p1[1]
4
p1[0]
3
2
1
0
..
..
..
..
..
write(p1[1],…)
pipe
read(p1[0],…)
<EOF>
• Cuando todos los procesos escritores cierren la parte de escritura,
entonces se manda un final de fichero (EOF) a los lectores.
39
ARCOS @ UC3M
Alejandro Calderón Mateos
Tubería
2 fork()
…
..
p1[1]
4
p1[0]
3
Proceso 1
2
1
0
..
..
..
..
..
pipe() + fork() -> padre e hijo ven la misma tubería
…
fork();
…
40
…
..
p1[1]
4
p1[0]
3
2
1
0
..
..
..
..
..
Proceso 2
ARCOS @ UC3M
Alejandro Calderón Mateos
Tubería
2 fork()
p1[1]
p1[0]
pipe
…
..
p1[1]
4
p1[0]
3
2
1
0
..
..
..
..
..
Proceso 2
…
..
p1[1]
4
p1[0]
3
Proceso 1
2
1
0
..
..
..
..
..
pipe() + fork() -> padre e hijo ven la misma tubería
-> ambos podrían leer y escribir en ella
ARCOS @ UC3M
Alejandro Calderón Mateos
…
fork();
…
41
Tubería
3 redirección
p1[1]
p1[0]
pipe
…
..
p1[1]
4
p1[0]
3
2
1
0
..
..
..
..
..
…
clos
Comentarios de: Sesión 12: tuberías - Sistemas Operativos (0)
No hay comentarios