ISO Tema 4 Introducción a los Sistemas Operativos, 2015-2016 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos 24 de febrero de 2016 Modificado el 24 de febrero de 2016 Contenidos de la presentación Contenidos Introducción Canales de E/S y Redirección de Entrada/Salida/Error 1 Introducción 2 Canales de E/S y Redirección de Entrada/Salida/Error 3 ¿Más preguntas? ¿Más preguntas? 2 / 18 Contenidos Introducción Introducción 1 Introducción 2 Canales de E/S y Redirección de Entrada/Salida/Error 3 ¿Más preguntas? Canales de E/S y Redirección de Entrada/Salida/Error ¿Más preguntas? 3 / 18 Introducción Contenidos Introducción Introducción Canales de E/S y Redirección de Entrada/Salida/Error La independencia de dispositivo consiste en que el funcionamiento de un programa es indiferente del dispositivo en el que se encuentre un fichero. ¿Más preguntas? El sistema operativo gestiona la información de la ubicación de cada fichero y de las rutinas (código del sistema operativo, módulos) necesarias para acceder a cada dispositivo. De esta forma los programas no cambian para incorporar el código dependiente del hardware. 4 / 18 Tablas de canales La tabla de canales es la estructura de datos que contabiliza los ficheros abiertos por un programa en un momento de su ejecución. Hay una tabla de canales por cada proceso. Contenidos Introducción Introducción Canales de E/S y Redirección de Entrada/Salida/Error Para obtener la tabla de canales con los ficheros abiertos por el demonio de MySQL, o todas en general, se puede hacer: ¿Más preguntas? 1 4 7 10 # en dos lı́neas con el salto de la barra invertida # y el > que pide terminar la lı́nea ls -al /proc/$(ps aux |grep mysqld|grep usr|xargs \ > |cut -d " " -f 2)/fd # de otra forma PIDSQL=$(ps aux|grep mysqld|grep usr|xargs|cut -d " " -f 2) ls -al /proc/$PID/fd # Para listar todas las tablas de canales # (o todas si somos root) cd /proc/ ; ls -al [0-9]*/fd/ 2> /dev/null 5 / 18 Tabla de Ficheros Abiertos (TFA) Contenidos Introducción Introducción Canales de E/S y Redirección de Entrada/Salida/Error ¿Más preguntas? La TFA gestiona para todo el sistema los ficheros abiertos por cualquier proceso, y la forma en que están abiertos (lectura o escritura, etc). Para consultarla se puede usar el comando lsof. Hay muchos ejemplos de uso. 6 / 18 Tabla de inodos y Tabla de dispositivos Contenidos Introducción Introducción Canales de E/S y Redirección de Entrada/Salida/Error La Tabla de inodos contiene los inodos de los ficheros que están abiertos (y probablemente los que se han cerrado en forma de caché). De esta forma se accede a su información rápidamente. Con cada inodo se mantiene la información del dispositivo y sistema de ficheros en el que se encuentra el archivo y por tanto el inodo. ¿Más preguntas? Por tanto, la Tabla de dispositivos contiene las caracterı́sticas de cada uno, por tipo de acceso y por tanto las rutinas de código necesarias. En la actualidad, la Tabla de Dispositivos es una estructura de datos accesible por un sistema de ficheros virtual: udev en /dev Consultar la página de Wikipedia sobre Udev. 7 / 18 Algunas entradas de /dev Contenidos 3 Introducción 6 Introducción Canales de E/S y Redirección de Entrada/Salida/Error 9 12 ¿Más preguntas? 15 18 21 24 27 30 $ ls -al * lrwxrwxrwx lrwxrwxrwx lrwxrwxrwx crw-rw-rwcrw------crw-rw----+ brw-rw---brw-rw---crw-r----crw-rw-rwcrw------lrwxrwxrwx crw------brw-rw---brw-rw---brw-rw---brw-rw----+ lrwxrwxrwx lrwxrwxrwx lrwxrwxrwx crw-rw-rwcrw--w---crw--w---crw------crw-rw---crw-rw-rwcrw------crw------crw-rw----+ crw-rw-rw- 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root disk disk kmem root root root root disk disk disk cdrom root root root tty tty tty root dialout root root root video root 10, 10, 10, 7, 7, 1, 1, 10, 251, 8, 8, 8, 11, 5, 4, 4, 5, 4, 1, 10, 10, 81, 1, 3 3 13 229 183 232 0 1 1 3 1 4 0 0 1 2 0 15 15 15 0 0 1 3 64 9 56 54 0 5 feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb 23 23 24 23 23 23 23 23 23 23 23 23 23 23 23 23 23 24 24 24 23 23 23 23 23 23 23 23 23 23 23:51 23:51 00:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 00:51 00:51 00:51 23:12 23:51 23:52 23:51 23:51 23:51 23:52 23:52 23:51 23:51 cdrom -> sr0 cdrw -> sr0 fd -> /proc/self/fd fuse hwrng kvm loop0 loop1 mem null psaux rtc -> rtc0 rtc0 sda sda1 sda2 sr0 stderr -> /proc/self/fd/2 stdin -> /proc/self/fd/0 stdout -> /proc/self/fd/1 tty tty0 tty1 ttyprintk ttyS0 urandom vboxdrv vboxnetctl video0 zero 8 / 18 Dispositivos de bloques en /dev Dispositivos loop Contenidos mount -o loop disco.iso /dir1 Introducción Introducción Canales de E/S y Redirección de Entrada/Salida/Error ¿Más preguntas? 2 block: lrwxrwxrwx 5 lrwxrwxrwx lrwxrwxrwx lrwxrwxrwx 8 lrwxrwxrwx lrwxrwxrwx 1 1 1 1 1 1 root root root root root root root root root root root root 11 bus: drwxr-xr-x 10 root root 8 8 8 6 7 7 14 $ lsusb Bus 002 Device 001: Bus 008 Device 001: 17 Bus 007 Device 001: Bus 006 Device 002: Bus 006 Device 001: 20 Bus 001 Device 003: Bus 001 Device 001: Bus 005 Device 002: Processor 23 Bus 005 Device 001: Bus 004 Device 001: Bus 003 Device 001: ID ID ID ID ID ID ID ID feb feb feb feb feb feb 23 23 23 23 23 23 23:51 23:51 23:51 23:51 23:51 23:51 7:0 7:1 7:2 8:0 8:1 8:2 -> -> -> -> -> -> ../loop0 ../loop1 ../loop2 ../sda ../sda1 ../sda2 200 feb 24 00:51 usb 1d6b:0002 1d6b:0001 1d6b:0001 0461:4d22 1d6b:0001 0c45:63f2 1d6b:0002 0a5c:5800 Linux Foundation 2.0 root hub Linux Foundation 1.1 root hub Linux Foundation 1.1 root hub Primax Electronics, Ltd Linux Foundation 1.1 root hub Microdia Linux Foundation 2.0 root hub Broadcom Corp. BCM5880 Secure Applications ID 1d6b:0001 Linux Foundation 1.1 root hub ID 1d6b:0001 Linux Foundation 1.1 root hub ID 1d6b:0001 Linux Foundation 1.1 root hub 9 / 18 Dispositivos de caracteres en /dev Contenidos Introducción Introducción Canales de E/S y Redirección de Entrada/Salida/Error ¿Más preguntas? char: 2 lrwxrwxrwx lrwxrwxrwx lrwxrwxrwx 5 lrwxrwxrwx lrwxrwxrwx lrwxrwxrwx 8 lrwxrwxrwx lrwxrwxrwx lrwxrwxrwx 11 lrwxrwxrwx lrwxrwxrwx lrwxrwxrwx 14 lrwxrwxrwx lrwxrwxrwx lrwxrwxrwx 17 lrwxrwxrwx lrwxrwxrwx lrwxrwxrwx 20 lrwxrwxrwx lrwxrwxrwx lrwxrwxrwx 23 lrwxrwxrwx lrwxrwxrwx lrwxrwxrwx 26 lrwxrwxrwx lrwxrwxrwx 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root 8 8 16 10 6 13 11 10 10 16 15 7 7 18 18 18 18 10 12 17 7 7 6 12 9 8 feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb feb 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23:51 23:51 23:51 23:51 23:51 23:52 23:52 23:52 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 23:51 10:1 -> ../psaux 10:183 -> ../hwrng 10:184 -> ../cpu/microcode 10:200 -> ../net/tun 10:232 -> ../kvm 10:54 -> ../vboxnetctl 10:55 -> ../vboxdrvu 10:56 -> ../vboxdrv 116:1 -> ../snd/seq 116:2 -> ../snd/controlC0 116:3 -> ../snd/pcmC0D0p 1:3 -> ../null 1:5 -> ../zero 189:0 -> ../bus/usb/001/001 189:128 -> ../bus/usb/002/001 189:2 -> ../bus/usb/001/003 189:513 -> ../bus/usb/005/002 1:9 -> ../urandom 226:0 -> ../dri/card0 226:128 -> ../dri/renderD128 4:0 -> ../tty0 4:1 -> ../tty1 5:0 -> ../tty 5:3 -> ../ttyprintk 81:0 -> ../video0 89:0 -> ../i2c-0 10 / 18 Dispositivos de tipo disk en /dev Contenidos Introducción Introducción Canales de E/S y Redirección de Entrada/Salida/Error ¿Más preguntas? /dev/disk/by-id: total 0 3 lrwxrwxrwx 1 root root lrwxrwxrwx 1 root root sda1 lrwxrwxrwx 1 root root sda2 6 lrwxrwxrwx 1 root root sda3 lrwxrwxrwx 1 root root ../../sr0 lrwxrwxrwx 1 root root 9 lrwxrwxrwx 1 root root lrwxrwxrwx 1 root root lrwxrwxrwx 1 root root 12 /dev/disk/by-label: total 0 15 lrwxrwxrwx 1 root root lrwxrwxrwx 1 root root 9 feb 23 23:51 ata-Hitachi_HTS7232_09 -> ../../sda 10 feb 23 23:51 ata-Hitachi_HTS7232_09-part1 -> ../../ 10 feb 23 23:51 ata-Hitachi_HTS7232_09-part2 -> ../../ 10 feb 23 23:51 ata-Hitachi_HTS7232_09-part3 -> ../../ 9 feb 23 23:51 ata-TSSTcorp_DVD+_-RW_TS-U633F_R3486 -> 9 10 10 10 feb feb feb feb 23 23 23 23 23:51 23:51 23:51 23:51 wwn-0x5000cca5 -> ../../sda wwn-0x5000cca5-part1 -> ../../sda1 wwn-0x5000cca5-part2 -> ../../sda2 wwn-0x5000cca5-part3 -> ../../sda3 10 feb 23 23:51 Datos -> ../../sda3 10 feb 23 23:51 SO -> ../../sda1 18 /dev/disk/by-uuid: total 0 lrwxrwxrwx 1 root root 10 feb 23 23:51 017ef249-a49f-4716-a136-d687dfb13924 -> ../../sda5 21 lrwxrwxrwx 1 root root 10 feb 23 23:51 18753509-ad3c-4723-8234-c59cbf81e781 -> ../../sda1 lrwxrwxrwx 1 root root 10 feb 23 23:51 916b7f58-e8ab-46b5-a105-9b7d853a1cc6 -> ../../sda3 11 / 18 Dispositivos en /dev Contenidos Introducción Introducción Canales de E/S y Redirección de Entrada/Salida/Error ¿Más preguntas? shm: 2 -rwx------ 1 pablo pablo 67108904 feb 24 01:12 pulse-shm-2969295364 snd: 5 drwxr-xr-x 2 root root crw-rw----+ 1 root audio crw-rw----+ 1 root audio 8 crw-rw----+ 1 root audio crw-rw----+ 1 root audio crw-rw----+ 1 root audio 11 crw-rw----+ 1 root audio crw-rw----+ 1 root audio crw-rw----+ 1 root audio 14 v4l: drwxr-xr-x 2 root root 17 drwxr-xr-x 2 root root 60 116, 2 116, 6 116, 7 116, 4 116, 3 116, 5 116, 1 116, 33 feb feb feb feb feb feb feb feb feb 23 23 23 23 23 24 23 23 23 23:51 23:51 23:51 23:51 23:52 01:13 23:52 23:51 23:51 by-path controlC0 hwC0D0 hwC0D2 pcmC0D0c pcmC0D0p pcmC0D3p seq timer 60 feb 23 23:51 by-id 60 feb 23 23:51 by-path lrwxrwxrwx 1 root root 12 feb 23 23:51 usbCN0D664T7248799A039L_Integrated_Webcam_2M-video-index0 -> ../../video0 20 /dev/v4l/by-path: total 0 23 lrwxrwxrwx 1 root root 12 feb 23 23:51 pci-0000:00:1a.7-usb-0:6:1.0-videoindex0 -> ../../video0 12 / 18 Contenidos Introducción Canales de E/S y Redirección de Entrada/Salida/Error 1 Introducción 2 Canales de E/S y Redirección de Entrada/Salida/Error 3 ¿Más preguntas? Canales de Entrada/Salida Redirección de Entrada/Salida/Error ¿Más preguntas? 13 / 18 Canales de Entrada/Salida Contenidos Introducción Canales de E/S y Redirección de Entrada/Salida/Error Todos los programas pensados para que tengan: Canales de Entrada/Salida Redirección de Entrada/Salida/Error ¿Más preguntas? Canal de entrada estándar de datos Canal de salida estándar de datos Canal de entrada estándar de errores Se numeran como canales 0, 1 y 2, respectivamente. 14 / 18 Redirección de Entrada/Salida/Error Contenidos Introducción Canales de E/S y Redirección de Entrada/Salida/Error Por defecto, la E/S se hace por teclado (canal 0) y pantalla (1 y 2). Redirecciones: Canales de Entrada/Salida Redirección de Entrada/Salida/Error ./programa < entrada.txt ¿Más preguntas? ./programa > salida.txt ./programa | ./programaB ./programa >> salidaappend.txt ./programa 2> errores.txt ./programa 2>&1 | ./programaB 15 / 18 Contenidos Introducción Canales de E/S y Redirección de Entrada/Salida/Error 1 Introducción ¿Más preguntas? 2 Canales de E/S y Redirección de Entrada/Salida/Error 3 ¿Más preguntas? ¿Más preguntas? 16 / 18 ¿Más preguntas? Contenidos Introducción Canales de E/S y Redirección de Entrada/Salida/Error ¿Más preguntas? ¿Más preguntas? ¿Más preguntas? 17 / 18 ISO Tema 4 Introducción a los Sistemas Operativos, 2015-2016 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos 24 de febrero de 2016 Modificado el 24 de febrero de 2016