Gestión de Entrada/Salida La gestión de E/S es una de las funciones principales de un SO En origen los SSOO pretendían no más que proporcionar un acceso uniforme y de alto nivel a los dispositivos periféricos – eran una colección de rutinas de E/S Es la parte que más código aporta al SO, dada la diversidad de dispositivos existentes [drivers de disco, terminal, red, …] El diseño de los manejadores (drivers) se pretende que esté abierto al programador Introducción Tipos de dispositivos de E/S Periféricos: interfaz de usuario (ratón, terminal,…), y otros (MIDI,…) Almacenamiento: disco, disquetes, CD, cintas,… Comunicaciones: MODEM, red, wifi,… Características: diferencias de velocidad, interactividad,… Objetivos de la gestión de E/S Ofrecer una visión lógica simplificada al programador Facilitar el manejo: interfaz entre dispositivos y resto del sistema Optimizar las prestaciones Permitir instalar nuevos dispositivos (plug&play) Dispositivos de E/S Perspectiva: programador, diseñador de SO, fabricante de dispositivo Conexión H/W: dispositivo – controlador – buses (SCSI, IDE, PCI,…) Controlador Mapa de E/S: registros de datos, estado y control Dirección de E/S: ports o memory-mapping Unidad de transferencia: bloques o caracteres Interacción con la CPU: operaciones de E/S Tipo de E/S: Programada (polling) Por interrupciones Sectorizadas (IVT), enmascarables, priorizadas Asignadas por SO (o el administrador) Las RSI forman parte del SO: parte genérica y particular (diferida), aportada por fabricante Incremento de prestaciones DMA Canal de E/S Cache de disco Solapamiento “seek-transfer” Control de energía APM, ACPI Control de batería Control de temperatura aumento/reducción velocidad CPU Apagado de pantalla o disco Suspensión/Hibernación del sistema Arquitectura del Sistema de E/S 1. Interfaz del SO: servicios de E/S síncrona o asíncrona. 2. Sistema de Ficheros: interfaz homogénea (VFS) para acceder a los drivers mediante un SF particular 3. Gestor de redes: interfaz homogénea a sistemas de red 4. Gestor de bloques / Gestor de cache 5. Manejadores de dispositivo 6. Manejador de interrupciones Software de E/S Interactúa con el Controlador mediante Manejador de interrupción (salva estado, comunica evento, restaura ejecución) Manejador de dispositivo Código dependiente de dispositivo Manejador de dispositivo El código dependiente de dispositivo procesa peticiones abstractas (listas de peticiones, con/sin bloqueo; control de errores) S/W independiente del dispositivo [S.F. + G.Red + G.Bloques + 1/2.Driver] Tamaño de acceso: bloques, flujo de caracteres Almacenamiento intermedio (buffer) - evita accesos repetidos - oculta diferencias de velocidad - copia única (semántica de compartición) Gestión de dispositivo - nombrado [/dev/cdrom inodo (mayor, menor)] - protección (rwx) - acceso en serie (si no se puede compartir) Planificación de E/S: genérica (ej., FIFO) y de manejador (ej., SCAN) Gestión de errores Transitorios: resueltos por el driver (reparación) Permanentes: notificados al usuario y registrados Interfaz de aplicaciones - llamadas: open(), read(), write(), ioctl() - utilidades: biblioteca (libc.so); demonios (de red – inetd; de spool – lpd,…) 1. Nombres independientes del dispositivo 2. E/S bloqueante [read(), write()]o no bloqueante [aio_read(), aio_return(),…] 3. Control de acceso (compartición) a. Mandatos externos o demonios (lpr, lpd) b. Llamadas de bloqueo (lock, unlock) 4. Indicaciones de error: en UNIX [errno, perror()], en Windows [GetLastError()] DISCOS (dispoisitivo de bloques) Interfaz – VFS – SF o Driver_HL – Cache pág/bloques – Petición disco – Driver_LL Llamadas y planificación Acceso por bloques Interfaz genérico de controlador: SCSI, IDE (EIDE) Tipos de disco: duro (Winchester), ópticos (CD, DVD), extraíbles (floppy) Estructura física formateo (fdformat) Varias superficies (cabezas solidarias) División en cilindros, uno por pista Divididas en sectores de 512 bytes Capacidad: cilindros x cabezas x sectores x tamaño_sector 1023 x 256 x 83 x 512 = 10,3 GB Tiempo de acceso = N x Tseek + Tlatencia + Transferencia Densidad de pistas: fija en toda la superficie o variable Intercalado de sectores (interleaving) Cache de disco (lectura y almacenamiento de una o varias pistas en controlador) Solapamiento “seek-transfer” Estructura lógica Sector 0 (MBR): tabla de particiones con indicación de partición activa Partición: considerado un vector de bloques contiguos Formato lógico: organización de los bloques en la partición Creación de un sistema de ficheros (mkfs) Creación de un espacio lineal de bloques (mkswap) Bloque de carga (programa cargador) Iniciación del hardware Creación de pila inicial de ejecución Copia de datos de configuración desde ROM Construcción de descripción h/w en memoria Carga de imagen del SO y cesión de control Lista de bloques defectuosos Lista de bloques de repuesto Manejador de disco Genérico: procesar la petición de E/S de bloques Particular: traducir del formato lógico a mandatos de controlador Insertar petición en cola y planificar Enviar mandatos al controlador (programas DMA) Bloquear en espera de interrupción Comprobar estado Gestionar errores Indicar el estado de terminación al nivel superior Planificación de disco FCFS SSF SCAN (LOOK) CSCAN (CLOOK) EDF SCAN-EDF SCAN-RT Gestión de errores Transitorios retry, recalibrate Permanentes reinicio del controlador, sustitución por bloque de repuesto, comunicación del error al nivel superior Discos en memoria Discos RAM: acceso volátil a bloques Discos sólidos: placas RAM Disco en chip: memorias flash Fiabilidad y tolerancia a fallos Códigos correctores de error (cabecera y cola de sectores) Operaciones fiables (almacenamiento estable) discos espejo Redundancia: RAID Redundancia hardware: dos controladores por disco RAID 0 RAID 1 espejo RAID 2 reparto de datos a nivel de bits + código de paridad RAID 3 idem. RAID 4 reparto de bloques y cálculo de paridad en disco fijo RAID 5 reparto de bloques y cálculo de paridad de forma cíclica SAN (Storage Area Network) Redes de altas prestaciones a las que se conectan directamente dispositivos de almacenamiento RELOJ (dispositivo interno o de caracteres) a. Reloj del procesador (ej, 5 GHz) CLK, arquitectura H/W b. Reloj del sistema (tiempo real) RTC, fecha y hora (desde 1/1/1970). Cuenta en segundos c. Reloj temporizador. Frecuencia de interrupción programable. (Ej, tic = 55mseg, 18 Hz o tic = 10 mseg, 100 Hz) cuenta en milisegundos d. Registro TSC (time-stamp-counter) de 64 bits TSC cuenta en microsegundos Interrupciones de reloj (tipo c.) - tic no acaparador (entre 1 y 10 mseg) - interrupciones de alta prioridad que enmascara casi todas las demás - tratamiento en dos etapas Urgente RSI Menos urgente invocación diferida Funciones del manejador de reloj 1. Mantenimiento de fecha y hora: RSI 2. Gestión de temporizadores (diferida) 3. Contabilidad y estadística (diferida) 4. Soporte para planificación de procesos (diferida) 1. Obtener fecha de CMOS; programar el temporizador a la frecuencia deseada a. Linux: desde 1/1/1970, nº de segundos, fecha UTC en 32 bits b. Windows: desde 1/1/1601, nº de centenas de nseg (10-7 seg.) c. Tratamiento de husos horarios y cambios por ahorro de energía d. Ajuste de hora [stime()]: reservado a “root” e. Consulta time() 2. Clientes: a. usuario (para establecer plazos) – usleep() b. el SO (interno): plazos de envío de mensajes por red, motor floppy,… c. Estructuras de datos i. Entrada: nº de tics que esperar, acción asociada (ej, SIGALRM) ii. Organización: 1. lista de temporizadores 2. lista con plazos relativos 3. múltiples listas 3. a. Contabilidad de uso de CPU por cada procesador (temporizador virtual). Llamada times() b. Obtención de perfiles de ejecución: muestreo del Contador de Programa. Llamada profil() 4. Planificación basada en tiempos a. P.ej, round-robin TERMINALES: dispositivo de caracteres Tipos: Proyectados en memoria: teclado, pantalla con memoria de video Modo: alfanumérico o gráfico Serie: Terminal (teclado y pantalla) conectado por UART Software de entrada Modo elaborado Caracteres de edición, de control (de proceso, de flujo), de escape Modo crudo Software de salida Terminal serie – por interrupciones, Terminal mapeado en memoria – copia de memoria a memoria Gestión de RED: módulos específicos Gestión compleja y diferente en cada SO Niveles 1. Aplicación. [aplicación, presentación y sesión OSI] a. procesos de usuario: ftp, (http) navegador, (SMTP) correo b. hilos kernel: (NFS) nfsd 2. Interfaz a aplicación. API de sockets (o Winsock) a. connect(), bind(), listen(), accept(), sendto(), recvfrom() b. read(), write(), close() 3. Protocolos (independientes del interfaz de red) a. Transporte OSI: TCP, UDP b. Red OSI: IP 4. Interfaz de red. [enlace y físico OSI] a. Driver de tarjeta de red y protocolo de enlace (Ethernet) UNIX: No hay ficheros de dispositivo especiales Activación automática de manejadores al detectar h/w en el arranque Gestión de ficheros y de redes independiente: solo comparten “descriptor” Envío de mensaje: write(sd,…) (transporte) UDP TCP – transmisión fiable, mensajes en orden, no duplicados, control flujo (red) IP – encaminamiento de mensajes (consulta de tabla) (interfaz de red) Traducción de dirección IP a dirección Ethernet. Protocolo ARP [Copias de mensajes entre niveles: colección de fragmentos (scatter/gather)] Recepción de mensaje: recepción de interrupción llegada de mensaje Copia de mensajes entre niveles Actuación como pasarela (gateway) Control de flujo TCP o descarte de mensajes UDP en caso de congestión