Prólogo

Los sistemas operativos son una parte esencial de cualquier sistema de computación, por lo que todos los planes de estudio de Informática y otras Ingenierías incluyen uno o más cursos sobre sistemas operativos. La mayoría de los libros de sistemas operativos preparados para estos cursos, contienen gran cantidad de teoría general y aspectos de diseño, pero no muestran claramente cómo se usan. 

Este libro está pensado como un texto general de sistemas operativos, pudiendo cubrir tanto la parte introductoria como algunos aspectos de diseño de estos. En él se tratan todos los aspectos fundamentales de los sistemas operativos, tales como procesos, gestión de memoria, comunicación y sincronización de procesos, entrada/salida, sistemas de ficheros y seguridad y protección. Además, en cada tema, se muestra la interfaz de programación de POSIX con ejemplos de uso de las llamadas al sistema. Esta solución permite que el lector, no sólo conozca los principios teóricos, sino cómo se aplican en sistemas operativos reales.

Contexto de desarrollo del libro

La motivación para llevar a cabo la primera edición de este trabajo a finales de los 90 del pasado siglo surgió de la insatisfacción con los libros de texto existentes en su momento, que, en líneas generales, se caracterizaban por enfatizar los siguientes aspectos:

  • Teoría general sobre sistemas operativos.
  • Aspectos de diseño detallado, generalmente específicos de un sistema operativo.
  • Desarrollo en un ambiente de sistemas operativos clásicos.
  • Comparando esta situación con la del mundo real se observaban considerables diferencias: 
  • Demanda de los estudiantes para tener apoyo en las cuestiones teóricas con ejemplos prácticos.
  • Necesidad de conocer los sistemas operativos desde el punto de vista de la programación de sistemas.
  • Visión generalista del diseño de los sistemas operativos, estudiando distintos sistemas.

Esta situación obligaba a los autores a mezclar textos generales sobre sistemas operativos con otros libros que estudiaban sistemas operativos concretos y la forma de programarlos. Por esta razón, entre otras, generaron un cuerpo de apuntes, aplicado a la docencia de la asignatura desde mediados de los 90, que fue creciendo y modernizándose hasta llegar a la primera edición de este libro en el año 2001. 

Posteriormente, en el año 2006, en parte fruto de la demanda de los usuarios y a la constante evolución de los sistemas operativos, se amplió la primera versión y se publicó la segunda edición del libro que ampliaba los temas de planificación, gestión de memoria, sistemas de ficheros y sistemas distribuidos.  

Tras pasar varios años desde esta segunda edición, la evolución de los sistemas operativos, así como los comentarios de los usuarios de este texto, tanto alumnos como profesores, nos han animado a elaborar una tercera edición del texto, mejorada y ampliada.

Novedades en la tercera edición

La tercera edición del libro incluye varias mejoras sobre la segunda edición publicada en el año 2006.

En primer lugar, se ha ampliado considerablemente el capítulo sobre planificación del procesador, incluyendo nuevos algoritmos de tipo generalista, aspectos de planificación de tiempo real y de planificación en sistemas virtualizados. Estas técnicas son de uso común en todos los sistemas operativos actuales, por los que nos parecía importante incluirlas en el libro. 

En segundo lugar, se han ampliado los temas de gestión de memoria, sistemas de ficheros y directorios, seguridad y sistemas distribuidos, incluyendo material nuevo y actualizaciones sobre la segunda edición.

En tercer lugar, se ha incluido un capítulo nuevo sobre virtualización donde se presentan brevemente las técnicas de virtualización más comunes y su influencia en el sistema operativo. Dado que actualmente se usan las técnicas de virtualización en prácticamente cualquier entorno, nos parecía interesante que los lectores pudieran conocer estos temas. 

En cuarto lugar, se han eliminado las partes correspondientes a las llamadas al sistema del sistema operativo Windows. Dada la evolución de los sistemas operativos, nos parece más interesante centrarnos en el estándar POSIX como interfaz de acceso al sistema. 

Por último, aunque hemos publicado un libro de prácticas y otro de problemas de sistemas operativos asociado a este libro, se han ampliado y mejorado los programas con ejemplos de programación en este libro, de forma que pueda ser todavía más autocontenido. 

Características del libro

Los sistemas operativos son una parte esencial de cualquier sistema de computación, por lo que todos los planes de estudio de Informática incluyen uno o más cursos sobre sistemas operativos. La mayoría de libros de sistemas operativos usados en estos cursos, incluyen gran cantidad de teoría general y aspectos de diseño, pero no muestran claramente cómo se usan. Este libro está pensado como un texto general de sistemas operativos, pudiendo cubrir tanto la parte introductoria como los aspectos de diseño de los mismos. Para ello, se incluyen en el libro las siguientes características para reforzar los contenidos teóricos:

  • Numerosas figuras. Más de quinientas figuras. 
  • Interfaz de programación POSIX de sistemas operativos, con ejemplos de uso de las mismas. Esta solución permite que el lector, no sólo conozca los principios teóricos, sino como se aplican en sistemas operativos reales. 
  • Ejercicios. Cada capítulo incluye ejercicios con diferentes grados de dificultad para adecuarse a los distintos tipos de cursos en que se puede usar este libro. Estos ejercicios hacen énfasis en los aspectos teóricos más importantes. 
  • Bibliografía. Una extensa bibliografía, con referencias básicas y de ampliación, para cada capítulo. En la tercera edición se ha actualizado esta bibliografía para reflejar nuevos contenidos y sistemas existentes en la actualidad.
  • Centro de aprendizaje online, con materiales suplementarios para el libro, situado en la dirección https://www.arcos.inf.uc3m.es/ssoo-va/. En este portal Web se puede encontrar el siguiente material: información sobre el libro, información de los autores, material para el profesor (figuras del libro, transparencias, soluciones de ejercicios y problemas propuestos y material de prácticas) y Material para el estudiante (código fuente de los programas, figuras en PowerPoint, capítulos en PDF, problemas propuestos de sistemas operativos, etc.). 

Organización del libro

El libro está organizado en dos volúmenes que engloban  trece temas, cuyo índice se muestra más abajo. Su contenido cubre todos los aspectos de gestión de un computador, desde la plataforma hardware hasta los sistemas distribuidos. Además, se incluye un apéndice.

Los temas son los siguientes:

VOLUMEN I:

1.- Arquitectura básica de un computador

En este tema se hace una breve descripción de la estructura y funcionamiento de un computador, haciendo énfasis en los aspectos fundamentales para el sistema operativo. La motivación para incluir este capítulo es evitar la necesidad de que el lector posea conocimientos previos de estructura de computadores. En él se tratan aspectos tales como el modelo de programación del computador, tratamiento de interrupciones, jerarquía de memoria, entrada/salida y concurrencia. Además, se comentan brevemente los mecanismos de protección hardware.

2.- Introducción a los sistemas operativos

En este tema se explica qué es un sistema operativo, cuáles son sus funciones principales, los tipos de sistemas operativos existentes actualmente y cómo se activa un sistema operativo. También se introduce brevemente la estructura del sistema operativo y de sus componentes principales (procesos, memoria, ficheros, comunicación, etc.), que se describen en detalle en capítulos posteriores. Además, se ponen dos ejemplos concretos, como son Linux y Windows. 

3.- Procesos y threads

El proceso es la entidad más importante de un sistema operativo moderno. En este tema se estudia en detalle el concepto de proceso, la información asociada al mismo, sus posibles estados y las señales y temporizadores que pueden ser asociadas a un proceso. Un sistema operativo gestiona una colección de procesos que se ejecutan de forma concurrente. La planificación de dichos procesos es crucial para la gestión de un computador.  Es esencial explotar los recursos de forma eficiente, equitativa y evitar bloqueos entre procesos. Además, se estudia en este capítulo el concepto de thread y su influencia sobre los aspectos anteriores del sistema. Todo ello se complementa con ejemplos de uso en POSIX.

4.- Planificación del procesador

La gestión del procesador es fundamental para conseguir un buen funcionamiento del sistema. El tiempo compartido, la multiprogramación o los sistemas multiprocesadores, exigen una gestión eficiente y fiable del procesador. Ello se consigue a través del planificador, un elemento clave del sistema operativo. En este capítulo se muestran los fundamentos de la programación, los mecanismos, las políticas de planificación de propósito general y de sistemas de tiempo real y la interfaz de programación de los servicios de planificación del sistema.

5.- Gestión de memoria

Este tema estudia la gestión de memoria de una manera integral, abarcando no sólo aquellos aspectos que incumben directamente al sistema operativo, sino también los asociados al proceso de compilación y montaje. En el capítulo se estudian los objetivos del sistema de memoria, así como todos los aspectos vinculados con la gestión del mapa de memoria de un proceso. Asimismo, se estudian los diversos esquemas de gestión de memoria, haciendo especial énfasis en la memoria virtual. Al final del tema se muestran los servicios de gestión de memoria existentes en POSIX y algunos ejemplos de uso de estos.

VOLUMEN II:

6.- Comunicación y sincronización de procesos       

Los procesos no son entidades aisladas, sino que en muchos casos cooperan entre sí y compiten por los recursos. El sistema operativo debe ofrecer mecanismos de comunicación y sincronización de procesos concurrentes. En este tema se muestran los principales mecanismos usados en sistemas operativos, tales como tuberías, semáforos o el paso de mensajes, así como algunos aspectos de implementación de estos. Al final del tema se muestran los servicios de comunicación y sincronización existentes en POSIX y algunos ejemplos de uso de los mismos.

7.- Interbloqueos

Las comunicaciones, el uso de recursos compartidos y las sincronizaciones son causas de bloqueos mutuos entre procesos, o interbloqueos. En este capítulo se presenta el concepto de interbloqueo, así como los principales métodos de modelado de interbloqueos. Además, se describen los principales algoritmos existentes para gestión de interbloqueos, incluyendo los de prevención, detección y predicción de interbloqueos.

8.- Entrada/Salida

El procesador de un computador necesita relacionarse con el mundo exterior. Esta relación se lleva a cabo mediante los dispositivos de entrada/salida (E/S) conectados al computador. El sistema operativo debe ofrecer una interfaz de acceso a dichos dispositivos y gestionar los detalles de bajo nivel de estos. En este tema se muestran aspectos del hardware y el software de E/S, estudiando una amplia gama de dispositivos, tales como los de almacenamiento secundario y terciario, los relojes, la red o el terminal. Asimismo, se proporcionan pautas de diseño de manejadores de dispositivos. Al final del tema se muestran los servicios de entrada/salida existentes en POSIX y algunos ejemplos de uso de los mismos.

9.- Sistemas de almacenamiento

La gestión de los sistemas de almacenamiento es una de las funciones principales del sistema operativo, dada su variedad y la necesidad de ocultar la complejidad y heterogeneidad de los diversos dispositivos de almacenamiento, ofreciendo un modo de acceso al mismo uniforme y de alto nivel. En la actualidad, el sistema de almacenamiento ha cobrado más importancia si cabe debido a la explosión de datos producida en los últimos daños, a la gran variedad tecnológica en este tipo de dispositivos y al gran incremento de capacidad de estos. Sorprendentemente, la mayoría de los libros generales de sistemas operativos realizan un tratamiento bastante superficial de este tema, centrándose, básicamente. en la gestión de los discos, dada su importancia como sustrato del sistema de ficheros. En este capítulo se presentan los conceptos básicos de los dispositivos de almacenamiento, se describe brevemente el hardware de estos y su visión lógica desde el punto de vista del sistema operativo. Además, se muestra cómo se organizan los dispositivos de almacenamiento en el sistema operativo y los servicios que proporciona éste

10.- Ficheros y directorios

El sistema operativo debe proporcionar al usuario mecanismos de alto nivel para acceder a la información existente en los dispositivos de almacenamiento. Para ello, todos los sistemas operativos incluyen un sistema de gestión de ficheros y directorios. El fichero es la unidad fundamental de almacenamiento que maneja el usuario. El directorio es la unidad de estructuración del conjunto de ficheros.  En este tema, se muestran los conceptos fundamentales de ficheros y directorios, la estructura de sus gestores y los algoritmos internos usados en los mismos. Al igual que en otros temas, se muestran los servicios de ficheros y directorios existentes en POSIX y algunos ejemplos de uso de los mismos.

11.- Virtualización

En este capítulo se muestra el concepto de virtualización de sistemas operativos, así como las principales formas de virtualizar un sistema. Además, se describe la arquitectura y funcionalidad de un hipervisor y algunos aspectos básicos de planificación de máquinas virtuales en un hipervisor. Por último, se tratan algunos aspectos de consolidación de servidores en centros de datos usando virtualización. 

12.- Seguridad y protección

Un sistema de computación debe ser seguro. El usuario debe tener la confianza de que las acciones internas o externas del sistema no van a ser un peligro para sus datos, aplicaciones o para las actividades de otros usuarios. El sistema operativo debe proporcionar mecanismos de protección entre los distintos procesos que ejecutan en un sistema y entre los distintos sistemas que estén conectados entre sí.  En este tema se exponen los conceptos de seguridad y protección, posibles problemas de seguridad, mecanismos de diseño de sistemas seguros, los niveles de seguridad que puede ofrecer un sistema y los controles existentes para verificar si el estado del sistema es seguro. Además, se estudian los mecanismos de protección que se pueden usar para controlar el acceso a los distintos recursos del sistema, tanto a nivel de sistema individual como de red. Al final del tema, se muestran los servicios de protección existentes en POSIX y algunos ejemplos de uso de estos.

13.- Introducción a los sistemas distribuidos

Los sistemas de computación actuales raramente están aislados. Es habitual que estén conectados formando conjuntos de máquinas que no comparten la memoria ni el reloj, es decir sistemas distribuidos. Este tema presenta una breve introducción a dichos sistemas, estudiando las características de los sistemas distribuidos, sus problemas de diseño, su estructura y sus distintos elementos (redes, comunicación, memoria distribuida, sistemas de fichero distribuido, etc.). También se muestran distintas técnicas de diseño de aplicaciones cliente-servidor en sistemas distribuidos.

Apéndice 1. Resumen de llamadas al sistema POSIX

En este apéndice se incluye una tabla con las principales llamadas al sistema disponibles en POSIX. Además, se incluye un breve comentario de cada llamada.

Bibliografía

Relación de libros y artículos consultados para elaborar este libro y recomendaciones para que los lectores puedan ampliar conocimientos, en caso necesario. 

Materiales suplementarios

Existe un centro de enseñanza on-line disponible a través de Web con materiales suplementarios para el libro, situada en la dirección: hhttps://www.arcos.inf.uc3m.es/ssoo-va/.

En esta página Web se puede encontrar el siguiente material:

  • Información sobre el libro, como el prólogo, tabla de contenidos, capítulos de ejemplo en PDF, erratas, etc.
  • Información de los autores y dirección de contacto.
  • Material para el profesor, como figuras del libro, transparencias, soluciones de ejercicios y problemas propuestos y material de prácticas. Las prácticas que se presentan han sido diseñadas como trabajos de laboratorio para estudiantes de las asignaturas de Sistemas Operativos de la Universidad Politécnica de Madrid y de la Universidad Carlos III de Madrid. Se ha hecho un importante esfuerzo para generalizar sus enunciados, de forma que puedan desarrollarse fácilmente sobre sistemas operativos de amplia difusión como Linux, UNIX o Windows. En casi todos los trabajos prácticos expuestos, se hace referencia al material de apoyo existente para las prácticas, que también se puede conseguir en las páginas Web anteriores.
  • Material para el estudiante, como código fuente de los programas, figuras en PowerPoint, problemas propuestos de sistemas operativos, etc.

Problemas y prácticas

Para completar este libro de texto, concebido como un manual de teoría de sistemas operativos, los autores han escrito otros dos libros que incluyen trabajos sobre problemas y prácticas de sistemas operativos. Están disponibles igualmente en formato electrónico e impreso en Amazon. 

Prácticas de sistemas operativos

Prácticas de sistemas operativos. J. Carretero, F García Carballeira y F. Pérez. Amazon. 2007.

Incluye alrededor de 40 proyectos prácticos relacionados con los aspectos indicados en el libro de teoría. Este libro está pensado como un texto general de prácticas de las asignaturas Sistemas Operativos y Diseño de Sistemas Operativos, pudiendo cubrir tanto la parte introductoria de los aspectos de programación de sistemas como aspectos avanzados de programación y diseño de Sistemas Operativos (programación de shell scripts, programación con llamadas al sistema, programación de módulos del sistema operativo, etc.). También incluye material de apoyo para los alumnos y soluciones de las prácticas para los profesores. Las soluciones de las prácticas están disponibles para los profesores y se pueden solicitar a los autores. 

Problemas de sistemas operativos 

Problemas de sistemas operativos. Segunda edición. J. Carretero, F García Carballeira y F. Pérez. Amazon. 2015.

Incluye una completa colección de problemas de Sistemas Operativos ordenados en cada capítulo por grado de complejidad creciente. Se incluyen muchos problemas de examen. En él se presentan problemas resueltos que abarcan todos los aspectos fundamentales de los sistemas operativos, tales como procesos, planificación de procesos, gestión de memoria, comunicación y sincronización de procesos, entrada/salida y sistemas de archivos. Además, en cada tema, se muestra una pequeña introducción teórica al mismo y la interfaz de programación de sistemas operativos necesaria para los problemas del tema. Se incluye material de apoyo para los alumnos y soluciones en el portal Web del libro. 

Comentario de los autores

Es un placer para nosotros poder presentar la tercera edición de este libro a las personas interesadas en los sistemas operativos, su diseño y su programación. La elaboración de este texto ha supuesto un arduo trabajo para nosotros, tanto por la extensión de la obra como por los ejemplos prácticos incluidos en la misma. Además, se ha hecho un esfuerzo importante para tratar de unificar la terminología usada en distintos países de habla hispana. Con todo, creemos que el resultado final hace que el esfuerzo realizado haya merecido la pena. 

El esfuerzo realizado por mostrar los sistemas operativos más actuales ha dado como resultado final un texto didáctico y aplicado, que puede ser usado tanto en cursos de introducción como de diseño de sistemas operativos. En el libro se incluyen ejemplos que muestran el uso de la interfaz de sistemas operativos del estándar POSIX. 

Nos gustaría mostrar nuestro agradecimiento a todas las personas que han colaborado en este texto con su ayuda y sus comentarios, tanto personalmente como a través de las páginas Web de las anteriores ediciones del libro.

Jesús Carretero Pérez             Fernando Pérez Costoya

Félix García Carballeira

Departamento de Informática                   Departamento de Arquitectura y Tecnología

 de Sistemas Informáticos

Escuela Politécnica Superior                      Facultad de Informática

Universidad Carlos III de Madrid            Universidad Politécnica de Madrid