Tema 2: Sistemas Operativos Distribuidos Organización Sistemas Distribuidos Enrique Soriano LS, GSYC 17 de septiembre de 2015 (cc) 2015 Grupo de Sistemas y Comunicaciones. 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 Abbott Way, Stanford, California 94305, USA. Las imágenes de terceros conservan su propia licencia. OS distribuido I OS distribuido: Los servicios del sistema ofrecidos por el OS están distribuidos (sistema de ficheros, procesos, autenticación etc.). I Un OS distribuido... ¿Dónde? Hardware Taxonomı́a de Flynn Imagen: (CC) Wikipedia Modelos de programación paralela I Implı́cita: el sistema (compilador, runtime y/o sistema operativo) se ocupan de paralelizar lo que se pueda. El programador se abstrae. I Memoria compartida: distintos flujos de control concurrentes que acceden a una memoria común. El problema es la sincronización de los flujos de control en el acceso a la memoria. I Paso de mensajes: se programa secuencialmente y los distintos componentes paralelos se comunican pasando mensajes entre ellos, pidiendose cosas. Problema: paso de estructuras de datos grandes. Si no hay memoria compartida, no se puede pasar un puntero. Multiprocesador I Una máquina con varios procesadores y memoria compartida. I Los procesadores están fuertemente acoplados. I Distintas formas de conectar los procesadores con la memoria: bus, switched. UMA I Uniform Memory Access. I Todos los procesadores están conectados a la memoria con un bus y acceceden a la memoria de la misma forma (SMP). I El bus es un cuello de botella. NUMA I Non-Uniform Memory Access. I Cada procesador (o conjunto de procesadores) está conectado a una memoria mediante un bus, a la que accede muy rapido. I También puede acceder a las otras memorias, pero es más lento. I Los procesadores están conectados en una red (p. ej. AMD hypertransport, Intel Quick-Path Interconnect) I ccNUMA: Los distintos procesadores tienen caches de memoria y se garantiza la coherencia. I nccNUMA: Las caches no mantienen coherencia. No encaja bien en el modelo de memoria compartida y ya apenas se usa. Conexión crossbar I Número de switches: N 2 Conexión de red omega I Con N procesadores: I I Número de etapas: log2 (N) Número de switches por etapa: N/2 Ejemplo de rutado: el procesador 100 quiere acceder a la memoria 010: Etapa1: en A1 elige la salida 0 → B1 Etapa2: en B1 elige la salida 1 → C2 Etapa3: en C2 elige la salida 0 → memoria 010 Multiprocesador: Hardware actual P.Ej: uno de nuestras máquinas de testing (2012): AMD64 K10 I I Multiprocesador con memoria compartida, fuertemente acoplado. Conexión de procesadores: switched I I I Hypertransport (6400 MT/s)1 . ccNUMA. Cache (lı́nea de cache de 64 bytes): I I I L1 Datos (64 Kb), L1 Instrucciones (64 Kb), por core. L2 Datos+Instrucciones (512 Kb), por core. L3 (12 Mb), una para todos los cores. I Protocolo de coherencia de caches: MOESI. I Comunicación entre cores: IPIs. 1 Mega-transfers per sec. Multicomputador I Multicomputador != Multiprocesador I Los procesadores son nodos conectados en red con una interfaz dedicada. I Los procesadores están débilmente acoplados (depende de la red). I Varias formas de interconectar los nodos: hypercube, torus, etc. Topologı́as Hypercube: Torus: Multiprocesador: Hardware actual P.Ej: IBM Blue Gene/Q I Cada nodo tiene 16 CPUs 64-bit Power A2 con 16GB de RAM. I Cada rack tiene 32 nodos. I Total: 4096 nodos (65536 cores) I Interconexión: torus de 5 dimensiones. Estructura del SO Estructura del SO Repaso: I Kernel (núcleo): I I I I I Modo privilegiado (puede ejecutar instrucciones como halt, trap, invalidar caches, invalida TLB, gestionar segmentos, etc.) Multiplexa la máquina (espacio y tiempo): CPU, memoria, disco, red,... Maneja el hardware: driver. Proporciona abstracciones (proceso, fichero, etc.). Área de usuario. I I I Modo no privilegiado. Pide servicio al kernel → llamada al sistema. Las aplicaciones y herramientas del SO (shell, compiladores, GUI, etc.). Estructura del SO Application Programming Interface (API) APPLICATIONS Userspace (ring 3) LIBRARIES Userspace (ring 3) System Calls OPERATING SYSTEM Kernel (ring 0) Instruction Set Architecture (ISA) HARDWARE (CPU) SO: Llamadas al sistemas Ejemplo: Plan 9 para AMD64. 1. Coloca los argumentos en la pila del proceso. 2. Carga el número de llamada al sistema en un registro. 3. Ejecuta la instrucción SYSCALL, que pasa a ring 0 y salta al punto de entrada de las llamadas al sistema en el kernel (apuntado por el registro Lstar, configurado en tiempo de arranque) que: 3.1 Cambia el SP para usar pila de kernel del proceso. 3.2 Guarda el contexto del proceso en área de usuario en la pila de kernel. 4. Copia los argumentos de la llamada al sistema a la estructura que representa al proceso. 5. Indexa la tabla de llamadas al sistema con el número de llamada al sistema, y llama a la función que la implementa. Estructura del OS: Kernel Estructura del OS: Tipos de kernel Kernel monolı́tico: I El kernel es un único programa. I Pros: simplicidad, rendimiento. I Contras: protección de los datos, puede haber falta de estructura (si se programa mal). I Ejemplo: Linux, FreeBSD, Plan 9. Estructura del OS: Tipos de kernel Microkernel: I El kernel queda reducido a lo mı́nimo: abstracción del HW (HAL), tareas/hilos, IPC y manejo de memoria virtual. I El resto (OS personality : gestión de procesos, red, FS...) se implementa en servidores independientes. I Idea: polı́ticas en espacio de usuario, mecanismos en espacio de kernel. I Pros: modularidad, tolera fallos en los servidores, distribución. I Contras: bajo rendimiento, más complejo, más código. I Ejemplo: Mach, L4. Estructura del OS: Tipos de kernel Kernel Hı́brido: I Compromiso entre microkernel y monolı́tico. I Algunos incluyen ciertos componentes en espacio de kernel: device drivers, gestión de procesos, etc. Ejemplos: Minix, QNX. I Otros simplemente sólo siguen un diseño de microkernel, pero todos los servidores están en espacio de kernel. Ejemplos: XNU (OSX), Windows NT. Estructura del OS: Tipos de kernel Monolithic Kernel based Operating System Microkernel based Operating System "Hybrid kernel" based Operating System Application Application Application system user mode VFS, System call Scheduler, Virtual Memory Device Drivers, Dispatcher, ... Hardware Imagen: Public Domain, Wikipedia user mode Application IPC IPC, File System kernel mode UNIX Server Device Driver kernel mode File Server File Server kernel mode Basic IPC, Virtual Memory, Scheduling Hardware user mode UNIX Server Application IPC Device Driver Basic IPC, Virtual Memory, Scheduling Hardware kernel mode Estructura del OS: Tipos de kernel Exokernel: I No provee abstracciones, sólo multiplexa la máquina. I Library Operating Systems: las aplicaciones se enlazan con bibliotecas que implementan las abstracciones especializadas para la aplicación. I Ejemplos antiguos: Cambridge Nemesis, MIT Exokernel. I Aproximación actual: MirageOS/Unikernel, basado en Xen. Estructura del OS: Kernel modular I KLM: carga de módulos dinámicos en el kernel. I Ventaja: sólo se cargan los drivers necesarios → ahorro de memoria. I Desventaja: seguridad. I Ejemplos: Linux (.ko), Mac OSX (.kext), FreeBSD (.kld), Windows (.sys). Estructura del OS: Kernel modular Carga de un módulo: I Se le piden al kernel las direcciones de los sı́mbolos del kernel que usa el módulo del kernel. I Se le pasan al kernel los sı́mbolos del módulo, para que los incluya en su tabla de sı́mbolos. I Se pide al kernel que reserve memoria para cargar el módulo (ya no será memoria fı́sica contigua al kernel). I Se pide al kernel que llame a la función init() del módulo para que se inicialize. Máquinas Virtuales Tipos: I Máquina virtual de proceso: tiene como objetivo proporcionar una plataforma para ejecutar un único proceso. I Máquina virtual de sistema: el VMM (VM Monitor) proporciona un entorno completo y persistente para ejecutar un OS y sus procesos. Máquinas Virtuales de Proceso APPLICATION PROCESS VIRTUAL MACHINE Userspace (ring 3) Application Programming Interface (API) System Calls LIBRARIES Userspace (ring 3) OPERATING SYSTEM Kernel (ring 0) Instruction Set Architecture (ISA) HARDWARE (CPU) Máquinas Virtuales de Proceso I Multiprogrammed systems: el propio OS! I Emuladores (dynamic binary translators): ejecuta un programa cuya ISA es distinta a la de la máquina local. P. ej. OSX Rosetta. I Optimizadores: traducen instrucciones de la misma ISA para mejorar la eficiencia. P. ej. Dynamo. I HLL VM: ejecutan programas portables cuya ISA es virtual (bytecode). P. ej. .NET, Java. Máquinas Virtuales de Sistema I VM clásica (hypervisor type 1). I I I Paravirtualización. Virtualización completa asistida por HW. VM alojada (hypervisor type 2). Máquinas Virtuales de Sistema: paravirtualización I El OS huésped está modificado para ejecutar sobre el VMM. I El OS huésped realiza hypercalls para gestionar la tabla de páginas, planificar, poner timers, configurar el HW, etc. I Ejemplos: Xen, KVM. Application Programming Interface (API) System calls APPLICATION Userspace (ring 3) LIBRARIES Userspace (ring 3) OPERATING SYSTEM Kernel (ring 1) APPLICATION Userspace (ring 3) LIBRARIES Userspace (ring 3) OPERATING SYSTEM Kernel (ring 1) hypercalls Instruction Set Architecture (ISA) VMM (HYPERVISOR TYPE 1) (ring 0) HARDWARE (CPU) Máquinas Virtuales de Sistema: asistidas por HW I Se basa instrucciones especiales de la CPU para virtualización. P. ej. Intel VT-x, AMD-V. I Instrucciones VMX: activar el modo VMX root, lanzar una VM, pasar el control al VMM, retomar una VM, etc. I Además de ring 0-3, hay un modo especial en el que ejecuta el VMM: VMX root. I El OS huésped no necesita modificaciones. I Ejemplo: VMware vSphere. Application Programming Interface (API) System Calls APPLICATION Userspace (ring 3) LIBRARIES Userspace (ring 3) OPERATING SYSTEM Kernel (ring 0, VMX non-root) APPLICATION Userspace (ring 3) LIBRARIES Userspace (ring 3) OPERATING SYSTEM Kernel (ring 0, VMX non-root) VMM (HYPERVISOR TYPE 1) (VMX root) Instruction Set Architecture (ISA) HARDWARE (CPU) Máquinas Virtuales de Sistema: alojada I La VM se aloja sobre otro OS. I El VMM puede instalar drivers en el OS anfitrión para mejorar el rendimiento. P. ej. VMWare Fusion, Virtual Box. I Whole-system VM: la ISA de la VM no es la misma que la del HW y necesita emulación. P. ej. Virtual PC. Máquinas Virtuales de Sistema: alojada APPLICATION Application Programming Interface (API) LIBRARIES System Calls OPERATING SYSTEM Instruction Set Architecture (ISA) VMM (HYPERVISOR type 2) Userspace (ring 3) Application Programming Interface (API) LIBRARIES Userspace (ring 3) System Calls VMM Driver Kernelspace (ring 0) OPERATING SYSTEM Kernel (ring 0) Instruction Set Architecture (ISA) HARDWARE (CPU) Virtualización a nivel de Sistema Operativo I Una VM aisla distintas imágenes completas de distintos sistemas operativos ejecutando. Si lo que queremos aislar es un servicio, pagamos cierto coste ejecutando un OS completo para él (tiempo en arrancar y parar la VM, rendimiento, etc.). I Solución: dentro del mismo sistema operativo (kernel) se pueden crear distintos entornos aislados, cada uno con sus propias abstracciones y recursos (espacio de procesos, sistema de ficheros raı́z, CPU, recursos de red, usuarios, etc.). I El sistema operativo tiene que proporcionar mecanismos para aislar procesos. P. ej: Linux Namespaces, Linux Cgroup, etc. I Ejemplos: Docker, Linux Containers (LXC), OpenVZ, FreeBSD Jails, Solaris Zones etc. Virtualización a nivel de Sistema Operativo: Contenedores CONTAINER A CONTAINER B APPLICATION Userspace (ring 3) APPLICATION Userspace (ring 3) Application Programming Interface (API) LIBRARIES A Userspace (ring 3) LIBRARIES B Userspace (ring 3) System Calls RESOURCES A RESOURCES B OPERATING SYSTEM Kernel (ring 0) Instruction Set Architecture (ISA) HARDWARE (CPU) Bibliografı́a I I I I I I I I Mark D. Hill, Norman P. Jouppi, and Gurindar S. Sohi. Chapter 9 ”Multiprocessors and Multicomputers,”from Readings in Computer Architecture, Morgan Kaufmann, 2000 A. S. Tanenbaum. Operating Systems, design and implementaiton. Pearson Prentice Hill. A. S. Tanenbaum. Distributed Systems. Pearson Prentice Hill. A. S. Tanenbaum. Modern Operating Systems. Pearson Prentice Hill. A. Silberschatz. Operating Systems. Wiley. J. E. Smith and R. Nair. The Architecture of Virtual Machines. IEEE Computer 38, 5. 2005. D. Berstein. Containers and Cloud: From LXC to Docker to Kubernetes. Cloud Computing, IEEE (Volume:1 , Issue: 3 ). A. Madhavapeddy and D. J. Scott. Unikernels: Rise of the Virtual Library Operating System. ACM Queue. Volume 11, issue 11.