Sistemas Operativos - Intro Técnicas Digitales III Ing. Gustavo Nudelman 2012 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Conceptos generales • Un sistema operativo es simplemente un conjunto de programas de software de propósito general con el fin de: • Administrar los recursos del sistema • Gestionar la correcta ejecución de varios programas (aplicaciones) de uno o varios usuarios • Proveer una “visión” unificada a los usuarios y programadores mediante una capa de abstracción del hardware Programas Administradores Middleware – Programadores Scripts Servicios Administradores de sistemas / Programadores de App Sistema operativo Hardware Programador de sistema / Programador de drivers Diseño e implementación de hardware Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Clasificación de los S.O. • Sistemas Real-Time • Se utilizan para sistemas de control industrial, centrales de conmutación, instrumentación científica, etc. • La interface con el usuario suele ser pobre • Su fortaleza consiste en administrar los recursos de la computadora para poder ejecutar una operación en particular en la misma cantidad de tiempo cada vez que ocurre en evento que la dispara. Es decir se busca evitar comportamientos aleatorios mediante: • Máximo asegurado de duración de una interrupción • Swapping reducido Tareas con bajo consumo de memoria • La variación de velocidad y o respuesta un recurso no impacta en los resultados que entrega el sistema. • Ejemplos de implementación • QNX • RT Linux Clasificación de los S.O. • Sistemas Monotarea - Monousuario • No pueden ejecutar mas de una tarea en forma concurrente • Transfieren todo el control del sistema a la aplicación que va a ejecutarse y esta tiene el control hasta que lo devuelve al sistema operativo. • El sistema de este tipo mas difundido fue el DOS • Las primeras Palms empleaban sistemas monotarea, monousuario Clasificación de los S.O. • Multitarea - Monousuario • Utilizados hoy en día en las Pc’s de escritorio • Pueden trabajar con varios programas en memoria en forma estable dentro de un entorno de protección • Solo poseen interfaz para un usuario aunque pueden trabajar con varias sesiones. • Ejemplos: • Windows XP en sus versiones “Home” • Linux instalado como WorkStation Clasificación de los S.O. • Multiusuario • Es la forma actual de los sistemas operativos, y en la que fueron pioneros los sistemas UNIX • Puede ejecutar diferentes sesiones en forma simultanea con múltiples tareas por sesión. • Ejemplos • UNIX desde sus inicios • Windows en sus versiones “server” • Todos los derivados de UNIX incluyendo a LINUX Funciones de un sistema operativo • Gestión del procesador • Asignación de slots de tiempo de CPU para cada tarea (scheduling de procesos) • Gestión de memoria • Gestión de memoria utilizando los recursos de protección y basado en el funcionamiento de la MMU de cada procesador. • Gestión de memoria Virtual (Swapping) • Gestión de memoria cache • Gestión de los dispositivos de E/S • Acceso al hardware de manera transparente para las aplicaciones • Manejo de concurrencia para el acceso al hardware • Gestión del storage • Organización de la información en los dispositivos de almacenamiento Funciones de un sistema operativo • Interfaz para las aplicaciones (API) • Conjunto de llamadas para ejecutarse desde las aplicaciones y acceder a servicios brindados por código del sistema operativo. Se las conoce como “System Calls” • Interfaz para los usuarios • Son una capa de abstracción mediante la cual el sistema operativo brinda sus funcionalidades al usuario. • Pueden ser • Interfaces de texto (consola de comando) • Interfaces gráficas (GUI) • Una combinación de ambas Organización de un sistema Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Linux - Introducción • Sistema operativo Unix Like basado en posix (Portable operating system based on Unix) • Kernel monolítico (único programa + módulos) • Preemptive Kernel (a partir de la versión 2.6) • Soporta SMP (Symetric multi processing) • Soporta varios File systems. (EXT3, EXT4, FAT32, NTFS,…etc) • Es Libre! (licencia GNU) • Posee un sistema de versionado indicado por 3 números Kernel – Gestión de memoria • • • • 1 GDT por procesador en el sistema y esta apuntada por un array Se mantiene una TSS por cada procesador/GDT llamado No hace task switch utilizando la forma ofrecida por el cpu_gdt_table procesador (lo realiza mediante código) y por eso no utiliza multiples TSS’s Y para que mantiene una TSS ? • El procesador busca aquí el stack de PL=0 cuando sube el nivel de privilegio de una tarea • Si un programa en• modo user utiliza una instrucción Es driver de Advanced power I/O el sistema de protección utiliza el IOpuede map de la TSSfunciones de management invocar El descriptor de LDT es un BIOS descriptor Linux no utiliza por lonulo. que se necesitan tener LDT segmentos definidos. Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Procesos - Introducción • Un proceso es una instancia de un programa en ejecución para el cual el sistema operativo mantendrá un contexto que se puede gestionar y administrar. • Poseen un espacio de direccionamiento determinado • Normalmente trabajan en modo user • Cuando requieren pasar a modo Kernel, lo hacen de manera controlada mediante algún servicio del sistema. • El kernel logra que cada proceso vea una CPU dedicada • Como parte del contexto de un proceso, el kernel mantiene varios atributos con los que es posible interactuar y administrar a dichos procesos: • Process ID (0 – 32767) • Priority • Owner • Open resources • Status • La información llevada en una estructura llamada Task_Struct Procesos – Task struct • Se trata la estructura que lleva el contexto completo de un proceso en ejecución. • Se encuentra en /usr/src/kernels/<Kernel Version>/include/linux/sched.h • Dada su complejidad muchos campos son punteros a otras estructuras y/o listas. • Posee secciones de compilación condicional • El scheduler se maneja con una lista doblemente enlazada de dichas estructuras llamado task_array Tipos de procesos • Batch • No interactúan con el usuario • La prioridad asignada puede variar bajo demanda para no provocar efectos perceptibles • Ejemplos. (compiladores, renderizadores, etc) • Interactivos • Interactúan con el usuario • Requieren un tiempo de respuesta aceptable de manera que el usuario no perciba bajo rendimiento. (Ej. Procesadores de texto, planillas de calculo, etc) • Real Time • No pueden ser detenidos ni demorados • Deben tener un tiempo de CPU garantizado y mínimo (Ej. Reproductores de streaming) El kernel posee algoritmos de análisis de comportamiento de los procesos para realizar el manejo de los mismos de forma apropiada. Conmutación de procesos • Linux programa el timer tick para generar una interrupción cada 1ms • Un proceso tiene asignado un tiempo de ejecución llamado quantum que es un múltiplo entero de un tick. • El valor de del quantum asignado depende del tipo, y los valores de prioridad que asigna el administrador del sistema operativo (nice) • El scheduler invoca el cambio de proceso mediante la función switch_to() • El cambio de tarea se realiza completamente por software • De esta manera se incluyen registros que en la arquitectura intel no forman parte del contexto. • Si se tuviera una TSS por cada tarea en una determinada GDT, en un sistema SMP una tarea estaría ligada siempre a una CPU. Estados de un proceso • El estado de un proceso consta en el campo “state” de la estructura stack_struct y puede tomar los valores: • • • • • • • TASK_RUNNING = 0 TASK_INTERRUPTIBLE = 1 TASK_UNINTERRUPTIBLE = 2 TASK_STOPPED = 4 TASK_TRACED = 8 EXIT_ZOMBIE = 16 EXIT_DEAD = 32 • Para establecer el estado de un proceso el kernel utiliza las macros set_task_state() y set_current_state() • Por razones de eficiencia, el kernel mantiene una lista separada de los procesos que están en el estado TASK_RUNNING • La variable nr_running mantiene la cantidad de procesos en este estado Procesos – Consola y daemons • Se denomina consola a la salida standard de un proceso otorgada por el sistema cuando este es instanciado • Comunmente los procesos poseen los siguientes descriptores de archivo al ser instanciados con los que pueden realizar operaciones R/W. • Std_Input 0 • Std_Output 1 • Std_Err 2 • Las salidas de system calls como printf() están asociadas std_Output, asi como las entradas de system calls como scanf están asociadas a std_input • Un daemon es un proceso que no tiene consola asociada y será estudiado mas adelante en este curso. • Tanto std_input y std_Output pueden ser cambiadas mediante técnicas de redireccionamiento tanto por comandos externos como en el código del programa. Redirecciones y pipes • Los sistemas UNIX poseen un diseño modular con programas pequeños pero acoplables entre si • Se puede redireccionar std_out de un programa [Command] [args] > [filename] • Se puede conectar la stdout de un programa con stdin de otro. [Command] [args] | [commmand] Cambio de nivel de privilegio en linux System call handler • Process 3 Scheduler Page fault Exception handler Process 4 Device transfer data Process 2 Timer Interrupt Kernel Mode Process 1 System Services User mode Device Driver En arquitecturas Intel solo se utilizan los anillos 0 y 3 para los niveles kernel y user respectivamente Universidad Tecnológica Nacional - Facultad Regional Buenos Aires System calls • Se conoce como API, al formato de la función que representa una system call siendo esta el requerimiento explicito cursado al kernel. • No todas las system calls poseen una API ya que muchos servicios se resuelven en modo usuario. • Linux no utiliza call_gates para acceder a modo kernel • Podemos visualizar las system calls de un archivo mediante el comando strace Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Gestión del storage • Un sistema de archivos (file system) es la manera en que nuestro s.o. organiza la información en una unidad de almacenamiento. • Sistemas operativos como Windows asignan letras alfabéticas a cada partición o volumen lógico. • Unix mantiene una estructura de directorio raiz fija e independiente de la cantidad de unidades lógicas de almacenamiento • Esto puede lograrse debido a la capa de abstracción VFS (Virtual file system) y al concepto de montaje Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Gestión del storage - VFS • Permite manejar a nivel kernel una capa de abstracción que permite un sistema de archivos independiente del formato. • Es quien recibe y procesa las funciones I/O de las system calls. • Luego de recibir las operaciones I/O interactúa con el driver del file system especifico. • Es quien permite mostrarnos una estructura de directorio fija incluyendo los dispositivos como si fueran archivos. (Concepto “Everything is a file”) Universidad Tecnológica Nacional - Facultad Regional Buenos Aires VFS User mode Process 2 Process 1 (reading /home/stephy/report (reading /etc/passwd) Process 3 (reading /proc/cpuinfo) VFS Kernel Mode Ext3 fs manager Local ext3 Partition NFS manager Network Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Memory Manager Kernel Memory Concepto de montaje • Como vimos en la diapositiva previa, cada file system se asocia a un directorio del sistema. • Esto se lo conoce como “montaje” • Un file-system debe ser montado antes de realizar operaciones I/O y luego desmontarse. • El file-system es asociado a un “punto de montaje” tratándose este de un directorio del sistema. • En el inicio del sistema, Linux monta los file-systems indicados por el archivo de configuración /etc/fstab Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Estructura del sistema de archivos • Los sistema unix, desde su principio basaron toda la administración de sus recursos al sistema de archivos. (Concepto “Everything is a file”) • Esto supone un concepto mas amplio en las entradas del sistema de archivos, y estas adquieren el nombre de “inodes” • El sistema de archivos mantiene una estructura de información asociada a cada inodo con datos como: • Inode ID • Type • Owner • Creation Date • Access rights Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Linux - Directorio raiz • /bin Archivos ejecutables de uso común • /dev Punto de entrada a los dispositivos y dispositivos especiales como /dev/zero /dev/null, etc • /etc archivos de configuración, base de datos de usuario y archivo de claves • /sbin archivos ejecutables para root • /home directorios de los usuarios (generalmente es un filesystem independiente) • /root directorio de archivos de root. • /lib bibliotecas compartidas por los programas • /boot kernel, Grub e Initrd • /usr Archivos de las aplicaciones instaladas − /proc Se trata de un filesystem virtual. Es realmente una sección de la memoria mostrada como un filesystem. − /tmp Archivos temporales generados por los diferentes programas − /var Directorio de tamaño variable. Es usado para archivos y directorios cuyo tamaño cambia frecuentemente. Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Linux – File system ---------Owner File type − - Ordinary file − C char device − b block device − p pipe (FIFO) − l link − s socket Group Others - - - readable Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Writeable Executable