Introducción |1
1. INTRODUCCIÓN Hay que distinguir entre dos tipos de programas: a) Los programas de sistema b) Los programas de aplicación Los programas de sistema se encargan de controlar las operaciones propias del computador. El más importante es el sistema operativo, cuyo objetivo es que el computador se pueda utilizar de una manera eficiente y cómoda, dando la visión de una máquina virtual. Los programas de aplicación son los que resuelven problemas específicos a los usuarios.
1.1 ¿Qué es un sistema operativo? Sus objetivos básicos son: 1) Comodidad para los usuarios: hace que los usuarios vean una máquina virtual o extendida. 2) Eficiencia: gestiona los recursos del sistema de forma más eficaz.
1.1.1 Los sistemas operativos como máquinas virtuales El usuario en general desea una abstracción sencilla y fácil de entender, ocultando toda la problemática de controlar el hardware. El SO tiene que proporcionar servicios para las funciones: a) Creación de programas: Existen otros programas del sistema que no son parte del SO, pero que son accesibles a través de él. b) Ejecución de programas: Para poder ejecutar un programa se tiene que realizar una serie de funciones previas (cargar el código y datos en memoria principal, inicializar los dispositivos de E/S y preparar los recursos necesarios). c) Operaciones de E/S: Cada periférico tiene sus peculiaridades y un controlador específico con su conjunto de instrucciones. El SO es el encargado de hacer todas esas funciones que permiten la lectura, escritura y comunicación con los periféricos. d) Manipulación y control del sistema de archivos: El SO debe conocer la propia estructura de almacenamiento y proporcionar los mecanismos adecuados para su control y protección. e) Detección de errores: Hay gran cantidad de errores provenientes de distintos sitios. El SO debe ser capaz de detectarlos y solucionarlos o por lo menos hacer que tengan el menor impacto sobre el resto de las aplicaciones. f) Control del acceso al sistema: En sistemas de acceso compartido o públicos, el SO debe controlar el acceso al mismo, vigilando quién tiene acceso y a qué recursos. Aspecto que cada vez está teniendo mayor interés. g) Elaboración de informes estadísticos: Para conocer el grado de la utilización de los recursos y de los distintos parámetros del sistema. Así se dispone de información que permite saber con antelación las necesidades futuras y configurar al sistema para un mejor rendimiento.
1.1.2 El sistema operativo como gestor de recursos Un SO es un conjunto de políticas para gestionar un conjuntos de recursos. Su función es proporcionar a los programas que compiten por ellos una asignación ordenada y controlada de: 1) El procesador 2) La memoria 3) El sistema de archivos 4) Los dispositivos de E/S Funciona de la misma forma que otro programa, con la peculiaridad de que con cierta frecuencia pierde el control del procesador y debe esperar a disponer de él.
Introducción |2
1.2 Historia de los Sistemas Operativos 1) Generación cero: Años 40. Ausencia de sistemas operativos en los computadores. Acceso completo al lenguaje máquina y todas las instrucciones se codificaban manualmente. 2) Primera generación: Años 50. 1er SO por los laboratorios de investigación de General Motors, y desarrollado para su computador IBM 701. Permitía en la máquina la secuencia automática de los trabajos de los usuarios. Organización en lotes. Monoproceso. 3) Segunda generación: 1ª parte de los 60. Introducción de la multiprogramación (debido a la diferencia de velocidades entre los dispositivos E/S y el procesador) y el multiprocesamiento. Se utilizaban varios procesadores en un único computador para lograr una mayor potencia de cálculo. Aparecen los primeros sistemas en tiempo real dedicados al control de procesos industriales y monitoreo de miles de puntos con fines militares. SO significativos: Master Control Program (MCP) de Burroughs y SABRE de IBM. MCP escrito en lenguaje de alto nivel y poseía muchas de las características que proporcionan los sistemas actuales: multiprogramación, multiprocesamiento, memoria virtual y capacidad de depurar el lenguaje fuente. SABRE era un SO de tiempo compartido, con miles de terminales distribuidos por toda la geografía norteamericana, desde los cuales se podía interactuar directamente con el sistema. El 1er sistema de tiempo compartido con propósito general fue el Compatible Time-Sharing System (CTSS). Sus características: Empleo de numerosos terminales conectados al computador que se podían usar al mismo tiempo, cada terminal parecía tener disponible toda la potencia y software del computador, el tiempo necesario para hacer tareas no muy grandes era lo suficientemente pequeño como para hacer pensar a los usuarios que tenían la máquina para su servicio, y disposición de varios compiladores, utilidades para el manejo de archivos y aplicaciones específicas. 4) Tercera generación: 1964 hasta mediados de los 70. Comienza con la introducción de la familia de computadores IBM/360. SO era el OS/360. Disponía de la mayor cantidad de programas de utilidad para facilitar el uso del computador que se había suministrado hasta la fecha. Permitía avanzar en serie sin que fuera necesario cambiar de SO. Desarrollo de SO grandes y costosos que pretendían incorporar todas las posibilidades. 5) Cuarta generación: Estado actual del campo. La mayoría de SO de los computadores grandes son descendientes de los de la 3ª generación. Multics de Honeywell, VMS y VM/370 de IBM y Scope de Control Data. Disponían de multiprogramación, tiempo compartido, memoria virtual, procesos secuenciales que cooperan por medio de semáforos, sistemas de archivos jerárquicos y E/S independiente del dispositivo. El SO más influyente UNIX, diseñado a principios de los 70 en los laboratorios de la Bell. Retiene la mayor parte de las características más útiles de su predecesor, Multics: procesos, sistema de archivos jerárquicos, independencia de los dispositivos, redirección de E/S y un lenguaje de intérprete de órdenes (shell) de alto nivel. En los 80 se desarrollan SO para PC’s: MS-DOS, Apple-DOS, CP/M, y Xenix. Estaban muy limitados en sus funciones. Se desarrollaron para microprocesadores de 8 y 16 bits con poca memoria. SO como Unix y VMS de Digital han evolucionado para adaptarse a las redes de computadores. El sistema de archivos de Sun Microsystems, NFS (Network File System) fue uno de los 1º sistemas de archivos situado por encima de una red de servidores y estaciones de trabajo.
1.3 Conceptos fundamentales 1.3.1 Proceso Introducido por los diseñadores de Multics. Un proceso es un programa en ejecución. La información sobre cada proceso se almacena en una tabla de procesos construida y mantenida por el SO.
Introducción |3 1.3.2 Gestión de la memoria y del sistema de archivos Necesidades: disponer de un soporte para la programación modular y para un uso flexible de los datos. Control ordenado y eficiente del almacenamiento asignado. Para esto el SO debe responsabilizarse de: 1) Aislar los procesos 2) Ubicar y gestionar automáticamente a los procesos 3) Soportar una programación modular 4) Controlar el acceso y proteger la memoria 5) Disponer de un medio de almacenamiento de larga duración Para cumplir con estos objetivos el SO cuenta con la memoria virtual (los programas pueden direccionar la memoria desde un punto de vista lógico, sin considerar la cantidad de memoria principal realmente instalada en el sistema) y las funciones del sistema de archivos (la información se almacena en archivos y estos archivos se mantienen en directorios, que pueden tener una estructura arborescente dentro de otros directorios).
1.3.3 Llamadas al sistema Interfaz entre el SO y los programas y los usuarios. Se pueden hacer de varias formas. Se pueden agrupar en cinco categorías: 1) Control de procesos: crear proceso, cargar, ejecutar, abortar… 2) Manipulación de archivos: crear archivo, abrir, escribir, leer, cerrar… 3) Manipulación de periféricos: solicitar periférico, escribir, establecer atributos… 4) Mantenimiento de la información: establecer hora-fecha, obtener datos del sistema… 5) Comunicaciones: crear conexión, enviar mensajes, transferir información del estado…
1.3.4 Gestión planificación de los recursos La política de planificación y de asignación de recursos debe ser justa y eficiente. Todos los procesos que compiten por la utilización de un determinado recurso, deben disponer de él de una forma equitativa. El SO debe intentar hacer la planificación y la asignación considerando el total de los requerimientos, estas decisiones se hacen dinámicamente.
1.3.5 Protección y seguridad de la información Una de las cuestiones que más interés ha despertado últimamente, con el auge de los sistemas de tiempo compartido y con las redes de computadores.
Introducción |4
1.4 Estructura de los sistemas operativos Los SO han ido creciendo llegando a un tamaño vasto y complejo. Un sistema tan grande sólo se puede construir si se particiona en componentes más pequeños. No todos los SO tienen la misma estructura, pero es usual dividirlos de la siguiente manera: 1) Gestor de procesos 2) Gestor de la memoria principal 3) Gestor del almacenamiento secundario y del sistema de archivos 4) Gestor del sistema E/S 5) Sistema de protección 6) Sistema de comunicación 7) Intérprete de órdenes Algunos de estos componentes se suministran como programas de utilidades, más que como un componente propio del SO. Una de las primeras estructuras que se consideraron fue la de hacer sistemas monolíticos, como MS-DOS. En una estructura de este tipo, el SO se puede construir compilando por separado los diferentes procedimientos que los constituyen y enlazándolos después en un único archivo. La 1ª versión de Unix poseía una estructura de este tipo con dos partes separadas: el núcleo y los programas del sistema. Para grandes sistemas operativos, la modularidad solamente no es suficiente y se ha ido imponiendo la utilización de conceptos tales como los de niveles jerárquicos y abstracción de la información. La estructura jerárquica diferencia sus funciones de acuerdo a su complejidad, sus características en el tiempo y su nivel de abstracción:
Nivel 5 Nivel 4 Nivel 3 Nivel 2 Nivel 1 Nivel 0
Programas de los usuarios Manejador de dispositivos y buffers de E/S Manejador de la consola Gestor de la memoria Planificador del procesador Hardware
La mayor dificultad en el diseño de estas estructuras es definir los niveles.
1.5 Diseño e implementación de sistemas operativos El primer problema es definir adecuadamente sus objetivos y especificaciones. Hay que tener en cuenta que se verá afectado por el hardware elegido y por el tipo de sistema que se quiere implementar. Hay que especificar sus requisitos que se pueden dividir en dos grandes grupos: 1) Requisitos del usuario: el usuario desea que el SO sea cómodo, fácil, sencillo de utilizar y aprender, fiable, seguro y rápido 2) Requisitos del sistema: debe ser fácil de diseñar, implementar y mantener, flexible, fiable, sin errores y eficiente. Hay que tener en cuenta otra exigencia del sistema, su capacidad de evolución, por las siguientes razones: 1) Las actualizaciones del hardware y la aparición de nuevos tipos de máquinas. 2) La posibilidad de añadir nuevos servicios solicitados por los usuarios. 3) La necesidad de corregir fallos detectados después de un tiempo de funcionamiento. Una vez diseñados, hay que implementarlo. Hay que elegir el lenguaje a utilizar. En la actualidad es cada vez más normal usar un lenguaje de alto nivel, aunque ciertas partes, muy dependientes del hardware, se escriban en ensamblador.
Introducción |5 Ventajas: 1) El código se puede escribir más rápidamente. 2) Facilidad de comprender y depurar el código. 3) Transportabilidad del SO a otras plataformas. Inconvenientes: 1) Los derivados de un código compilado (menor velocidad y mayores requisitos de almacenamiento). No obstante, se consiguen mejores rendimientos con estructuras de datos apropiadas y utilizando buenos algoritmos, que con sólo una optimización del código. Las partes más críticas para lograr un buen rendimiento del SO son el gestor de memoria y el planificador del procesador.