Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en...

42
Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática

Transcript of Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en...

Page 1: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

Visión general e introducción al kernel

Diseño de Sistemas OperativosIngeniería en Informática

Page 2: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

2

Visión general e introducción al ...

Objetivos: Revisar conceptos relacionados con sistemas

operativos Dar una visión general de UNIX, destacando

algunos aspectos del kernel Dar una visión general de Linux, destacando

algunos aspectos del kernel

Page 3: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

3

Visión general e introducción al ...

Revisión de conceptos. Visión general de UNIX. Visión general de Linux.

Page 4: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

4

Revisión de conceptos

Clasificación del software Software de aplicación

Programas que realizan las tareas en las que el usuario está realmente interesado

Software de sistema Programas y librerías de soporte para el software de

aplicación, por ejemplo el sistema operativo

Page 5: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

5

Revisión de conceptos

Objetivos de un sistema operativo Abstracción de los recursos hardware

Almacenamiento heterogeneo Sistema de archivos Memoria física + memoria secundaria Memoria virtual Variedad de dispositivos de E/S E/S estándar

Reparto de recursos CPU, memoría física, espacio de disco, comunicaciones, etc.

Servicios de sistema al software de aplicación Semáforos Memoria compartida Señales Temporización, etc.

Page 6: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

6

Revisión de conceptos

Características generales de un sistema operativo Monotarea o multitarea Multitarea expulsiva

(preemptive), protección entre tareas, protección del hardware

Monousuario o multiusuario Monoplataforma o multiplataforma Monoprocesador o multiprocesador Interactivo o batch Tiempo compartido, pudiendo procesar trabajos batch Kernel monolítico o microkernel (o exokernel) Sistemas operativos de tiempo real

Page 7: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

7

Revisión de conceptos

Características generales de un sistema operativo Procesos

Niveles de protección Las instrucciones no pueden ejecutar cualquier instrucción

potencialmente peligrosa Modo usuario y modo kernel (o supervisor)

Procesos Programa en ejecución y con su contexto Descriptor de procesos (PCB Process Control Block)

struct task_struct (elemento de struct thread_info) Contexto de nivel de usuario Contexto de nivel de sistema (kernel) Contexto de registros

Page 8: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

8

Revisión de conceptos

Características generales de un sistema operativo Planificación y conmutación de procesos

Estados de un proceso Listo, En ejecución, Parado, … Jerarquía de procesos Relación padre-hijo Threads (hilos). Threads del kernel Tipos de planificación quantum (timeslice), prioridad, … El algoritmo de planificación del kernel de Linux O(1) Procesos interumpibles por el kernel (preemptive)

Llamadas al sistema Interfaz entre un proceso y el sistema operativo Invocada por el proceso Causada por una interrupción software (señal)

Page 9: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

9

Revisión de conceptos

Relación entre aplicaciones, el kernel y el hardware

Page 10: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

10

Revisión de conceptos

Sistemas monolíticos versus microkernel Enfoque monolítico

Kernels implementados como un gran proceso único ejecutándose en un único espacio de direcciones kernels en disco como un archivo binario

Todos los servicios del kernel existen y se ejecutan en el gran espacio de direcciones del kernel

Comunicación con el kernel es trivial, ya que todo se ejecuta en modo kernel en el mismo espacio de direccines

El kernel puede llamar directamente a funciones, como si fuesen aplicaciones en modo usuario

Sencillo y buen rendimiento Mayoria de los sistemas UNIX son monolíticos en diseño

Page 11: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

11

Revisión de conceptos

Sistemas monolíticos versus microkernel Enfoque microkernel

Núcleo con funcionalidad mínima Servicios provistos por servidores que son procesos El kernel sólo gestiona la comunicación con los servidores Las distintas partes del S.O. se comunican mediante paso

de mensajes Chorus, QNX, Mach (GNU Hurd), WNT 3.51

Page 12: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

12

Revisión de conceptos

Sistemas monolíticos versus microkernel Enfoque monolítico

+ Eficiente Pocos cambios de contexto - Depuración - Ampliación (modularidad) - Dependencias

Enfoque microkernel + Fácil implementación y depuración + Portabilidad + La separación de varios servidores previene la caida

de servidores - Eficiente sobrecarga de comunicaciones

Page 13: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

13

Revisión de conceptos

Linux Estructura

Monolítico con módulos cargables Threaded Dinámico (añadir y quitar módulos) e interrumpible Mayor modularidad que un sistema monolítico puro

mayor rendimiento que un sistema microkernel Portabilidad

Escrito casi íntegramente en C estándar, con partes en ensamblador dependientes de la arquitectura (/arch)

Nuevamente el equilibrio entre la sencillez y eficiencia gana Linux gana

Page 14: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

14

Revisión de conceptos

Linux Características principales

S.O. estilo UNIX, compatible POSIX Multitarea expulsiva, Multiusuario y Multiplataforma Protección de memoria y memoria virtual, kernel threading,

interrumpible (preemptive) SMP, Clustering Variantes para Tiempo Real y CPUs sin MMU Múltiples sistemas de archivos y protocolos de red Con modelo de dispositivos orientado a objetos Razonable soporte hardware Casi todo escrito en C y depuración en tiempo de ejecución Módulos cargables en tiempo de ejecución (dinámico)

Page 15: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

15

Revisión de conceptos

UNIX/Linux Algo de historia

1969: UNIX, Thompson & Ritchie (AT&T Bell Labs) proyecto MULTICS

1978: BSD, Berkeley Software Distribution Distribuidores comerciales: Sun, HP, IBM, SGI, DEC, Digital, SCO

1984: GNU: Richard Stallman (FSF) 1986: POSIX (Portable Operating System Interface) La norma

POSIX.1 ha uniformado las operaciones de manipulación basándose fundamentalmente en las funcionalidades existentes en System V

1987: MINIX, Andrew Tanenbaum 1989: SVR4, AT&T 1991: 'Nacimiento' de Linux

Page 16: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

16

Revisión de conceptos

Linux Algo de historia

Evolución de MINIX para 8086 (A.S. Tannenbaum, 12000 líneas de código abierto)

En 1991 Linus Torvalds pone un mensaje en USENET diciendo que está escribiendo un S.O. como hobby, y deja los fuentes disponibles. (0.01)

Poco después publica la versión 0.02 y pide colaboraciones a los interesados En menos de un año más de 100 colaboradores

Aparecen múltiples distribuciones comerciales y no comerciales (Slackware, Red Hat, Suse, Mandrake, Caldera, Debian, etc.)

Soporte por parte de grandes empresas (Intel, IBM, Sun, Oracle, HP, Informix, etc.) y para múltiples plataformas, no sólo i386

Page 17: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

17

Revisión de conceptos

Linux Algo de historia

Linux 1.0 aparece en 1994 en forma de distribución (i386) Linux 1.2 en 1994 Soporta diferentes arquitecturas (Sparc,

Alpha, MIPS) Linux 2.0 en 1996 competitivo con sist. UNIXs comerciales Linux 2.2 (Enero 1999), con muchas mejoras y soporte

hardware Linux 2.4 (Enero 2001), más hardware soportado (ISA PnP,

USB) y modificaciones arquitecturales Linux 2.6 (Diciembre 2003), características avanzadas,

enterprise, muchas mejoras en la arquitectura Ultima versión estable 2.6.22 (X.Y.Z X = versión mayor, Y =

versión (par = estable, impar = desarrollo), Z = revisión)

Page 18: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

18

Revisión de conceptos

Linux Modelo de desarrollo de Linux

Modelo Open Source Licencia GPL Motivaciones resolver problemas (compartir

soluciones), educación, reconocimiento, anti-monopolio, seguridad

Autogestión del proyecto objetivos y motivación voluntarios, filosofía y herramientas comunes, desarrollos en paralelo con poda de ramas fallidas, distribución frecuente y pruebas masivas, depuración masiva por ser Open Source

Resultados de gran calidad

Page 19: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

19

Visión general e introducción al ...

Revisión de conceptos. Visión general de UNIX. Visión general de Linux.

Page 20: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

20

Visión general de UNIX

Estructura del sistema UNIX

Page 21: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

21

Visión general de UNIX

Diagrama de bloques del kernel de UNIX

Page 22: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

22

Visión general de UNIX

Subsistema de archivos en UNIX Estructura jerárquica y tratamiento consistente de los datos Crecimiento dinámico de los archivos (crear y borrar archivos) Proteger los datos de los archivos Tratar a los dispositivos y periféricos como si fuesen archivos

Page 23: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

23

Visión general de UNIX

Organización del sistema de archivos en UNIX Boot block cotiene el código de arranque Superblock Describe el estado del sistema de archivos (tamaño,

número total de archivos que puede contener, espacio libre dispon. Lista de inodos Cada archivo en UNIX tiene asociado un inodo,

que lo describe (propietario, permisos, fecha de actualización, …) Bloques de datos datos de los archivos, donde cada uno de los

bloques puede ser asignado a un archivo

Page 24: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

24

Visión general de UNIX

Representación interna y gestión de archivos en UNIX Tabla de inodos Lista de inodos + información adicional Tabla de archivos Estructura global al kernel y tiene una entrada

por cada archivos que los procesos (kern. & usr.) tienen abiertos Tabla de descriptores de archivos de usuario Estructura local a

cada proceso e idenfica a los archivos abiertos por un proceso

Page 25: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

25

Visión general de UNIX

Subsistema de procesos en UNIX Tabla de procesos Entrada = PID, estado, temporizadores, etc. U-área Datos manipulables por el kernel y que son necesarios

sólo cuando el proceso se está ejecutando Tabla de regiones por proceso espacio de direcciones virtuales

del proceso Tabla de regiones

Page 26: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

26

Visión general de UNIX

Contexto de un proceso en UNIX Contexto de un proceso = Estado del proceso su código, los

valores de sus variables de usuario globales y de sus estructuras de datos, el valor de los registros de la CPU, los valores almacenados en su entrada de la tabla de procesos y en su área de usuario; y el contenido de sus pilas (stacks) de usuario y kernel

Contexto de nivel de usuario los segmentos de texto, datos y pila del proceso, las zonas de memoria compartida, direcciones virtuales en el área de swap

Contexto de registros el contador de programa, el registro de estado del procesador (PS), el puntero de la pila, y registros de propósito general

Contexto de nivel de sistema entrada en la tabla de procesos, U-área, entrada en la tabla de regiones por proceso, tabla de regiones y tabla de páginas, y pila del kernel

Page 27: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

27

Visión general de UNIX

Estados de un proceso en UNIX. Perspectiva general (1) El proceso se está ejecutando en modo usuario (2) El proceso se está ejecutando en modo kernel (3) El proceso está listo para ejecutarse (puede haber varios) (4) El proceso está durmiendo/bloqueado por una operación E/S

Page 28: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

28

Visión general e introducción al ...

Revisión de conceptos. Visión general de UNIX. Visión general de Linux.

Page 29: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

29

Visión general de Linux

De forma general … qué es un kernel de un S.O. Es la parte del S.O. (software de sistema) encargado de

monitorizar y controlar todos los recursos hardware del ordenador interface entre usuario y el hardware

Controla y media en el acceso al hardware Abstrae todos los recursos hardware procesos, regiones,

archivos, dispositivos, etc. Planifica y ubica los recursos del sistema CPU, memoria,

disco, etc. Impone fuertes medidas de seguridad y protección en el

sistema Responde a las demandas de los servicios por parte de los

usuarios

Page 30: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

30

Visión general de Linux

Objetivos de diseño del kernel Rendimiento eficiencia y velocidad Obtener el mejor uso

de los recursos del sistema con la menor sobrecarga posible (rápido)

Estabilidad Robistez y capacidad de recuperación Flexibilidad y compatibilidad diferentes plataformas y

compatible con muchos sistemas operativos comunes Seguridad y protección Proteger a los usuarios entre ellos

y proteger el sistema de ataque malignos por parte de otros usuarios

Portabilidad Extensibilidad y dinamismo Módulos cargables

Page 31: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

31

Visión general de Linux

Diagrama de bloques del kernel de Linux (1)

Page 32: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

32

Visión general de Linux

Diagrama de bloques del kernel de Linux (2)

Page 33: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

33

Visión general de Linux

Características destacables de Linux Sistema operativo tipo UNIX Multi* Multitarea expulsiva/interrumpible (preemtive multi-tasking) Memoria virtual memoria protegida, paginación, etc. Librerías compartidas Carga de funcionalidad a demanda Dinamismo del kernel a

través de los módulos cargables Ejecutables ‘Copy-On-Write’ (COW) compartidos siempre que

sea posible, compartir marcos de páginas entre el proceso padre y los procesos hijo, en lugar de duplicarlos

Redes TCP/IP Soporte de SMP (Symmetric MultiProcessor) Open source código abierto

Page 34: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

34

Visión general de Linux

Arquitectura conceptual de Linux El S.O. Linux está compuesto por 4 grandes subsistemas

(1) Aplicaciones de usuario (2) Servicios del S.O. (3) El kernel de Linux (4) Controladores hardware

Esta descomposición se puede representar por niveles

Page 35: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

35

Visión general de Linux

Estructura del kernel de Linux a nivel de subsistemas Planificador de Procesos (Process Scheduler, SCHED) Controla

el acceso de los procesos a la CPU, dando un acceso justo a todos los procesos

Gestor de Memoria (Memory Manager, MM) Permite que muchos procesos compartan memoria, implementando mecanismos de memoria virtual

Sistema de Archivos Virtual (Virtual File System, VFS) Abstrae los detalles de los dispositivos hardware presentándolos como una interface de archivos común

Interface de Red (Networking Interface, NET) Proporciona acceso a los sistemas de red

Comunicación entre procesos (Inter-Process Communication, IPC) Proporciona mecanismos para la comunicación de procesos (colas de mensaje, semáforos y memorias compartidas)

Page 36: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

36

Visión general de Linux

Diagrama de bloques de la estructura del kernel

Page 37: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

37

Visión general de Linux

Dependencias entre subsistemas (1) Todos los subsistemas dependen de SCHED Todos ellos

necesitan supender o reanudar procesos. Por ejemplo, un proceso que intenta enviar un mensaje a través de la red (subsistema NET) el SCHED lo suspende hasta que el mensaje se envía

El subsistema SCHED utiliza el subsistema MM para ajustar el mapa de memoria hardware de un proceso específico cuando dicho proceso reanuda su ejecución

El subsistema IPC depende del subsistema MM para soportar mecanismos de comunicación de memoria compartida en la comunicación entre procesos, y también del SCHED puesto que deben de estar sincronizados los procesos que intervienen en la comunicación

Page 38: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

38

Visión general de Linux

Dependencias entre subsistemas (2) El subsistema VFS depende de los subsistemas MM y NET

para soportar sistemas de archivos en red y ram-disks El subsistema MM utiliza el subsistema VFS para gestionar

los datos del swap (implementa mecanismo de memoria virtual) Por ejemplo, cuando un proceso accede a memoria que está actualmente en el área de swap (swap-out), el subsistema MM realiza una petición al subsistema VFS para traer los datos del dispositivo de almacenamiento secundario, y suspender el proceso

Todos los subsistemas se basan en recursos comunes (información de estado, etc.) que son propios de cada subsistema Cada subsistema es responsable de manterner sus propios recursos

Page 39: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

39

Visión general de Linux

Estructuras de datos de los subsistemas (1) SCHED: Task list

El scheduler mantiene un bloque de datos por cada proceso que está activo (thread_info, task_struct)

Estos bloques están almacenados en una lista encadenada (list_head)

El scheduler siempre mantiene un puntero current que indica el proceso activo

MM: Memory Map El MM almacena un mapping de dirección virtual a física sobre

un proceso base (page) La estructura de datos (memory map, mm) se encuentra como

un campo del descriptor de procesos

Page 40: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

40

Visión general de Linux

Estructuras de datos de los subsistemas (2) VFS: I-nodes

El VFS utiliza index-nodes para representar archivos sobre un sistema de archivos lógico (super_block, inode, file, dentry_cache, fs_struct)

La estructura de datos inode almacena el mapping de los números de bloques de archivos a las direcciones de dispositivo físicas. También inode puede ser compartida entre procesos

NET: Data Connection Punteros a información del mapping de memoria Punteros a inodos que representan todos los archivos abiertos Estructuras de datos que representan todas las conexiones de

red abiertas NET hace transparente muchos dispositivos hardware y protoc.

Page 41: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

41

Visión general de Linux

Diagrama de la estructura del fuente del kernel

Page 42: Visión general e introducción al kernel Diseño de Sistemas Operativos Ingeniería en Informática.

42

Visión general de Linux

Características más relevantes que aporta Linux 2.6 HyperThreading Kernel expulsivo/interrumpible (Preemtive kernel) Scheduler O(1) Mejora del soporte NUMA (non-uniform memory architecture) Soporte RMAP (Reverse Mapping for Anonymous Pages)

para memoria virtual Nueva estructura de dispositivo del kernel (kdev_t) Threading POSIX mejorado (NGPT (Next Generation POSIX

Threading Package) y NPTL (Native POSIX Thread Library)) Nuevo modelo de driver y estructura de dispositivo unificada AMD 64-bit, PPC64 ACPI, ALSA, USB 2.0