Skip to content

Latest commit

 

History

History
315 lines (263 loc) · 15.9 KB

00_presentacion.org

File metadata and controls

315 lines (263 loc) · 15.9 KB

Presentación

Acerca del libro

Este libro busca brindar a estudiantes y docentes de las carreras de ingeniería en computación, informática, Ciencias de la Computación y similares un material completo, general y autocontenido sobre la materia de sistemas operativos. No se asume conocimiento previo sobre la temática, aunque se utilizarán conceptos de estructuras de datos y algoritmos básicos.

Justificación

Actualmente hay vasta bibliografía sobre sistemas operativos, sin embargo la gran mayoría está escrita en inglés, y cuando están disponibles en castellano, su traducción deja mucho que desear, llevando a conceptos confusos y difíciles de comprender. La intención de los autores es que el presente texto provea un material redactado originalmente en castellano, revisado por docentes latinoamericanos utilizando la terminología más adecuada para los alumnos de la región y eliminando muchos de los errores de traducción.

Generalmente el material de cursos de sistemas operativos está compuesto por partes de distintos libros, artículos de investigación, recursos en línea, software, ejercitación, etc. Por ello, el alumno debe recurrir a distintas fuentes durante el curso. El presente libro pretende ser de utilidad tanto para alumnos como para docentes como una única publicación autocontenida. Cabe remarcar también que el material bibliográfico generalmente está protegido por derecho de autor, es costoso y en muchos casos de difícil acceso (sobre todo las publicaciones en inglés).

Los contenidos de la bibliografía clásica de sistemas operativos están basadas en re-ediciones y compendio de libros de hace varias décadas que incluyen temas obsoletos o desactualizados. Hay también desarrollos y tendencias nuevas en el área que aún no han sido integradas en la bibliografía clásica, y mucho menos a las traducciones. También se quiere revisar y actualizar los conceptos clásicos de sistemas operativos inlcuyendo material de publicación reciente.

Este libro se desarrolló dentro del marco del Proyecto LATIn \parencite{ProyectoLatin}, enfocado a la creación de libros de texto con un esquema de licenciamiento libre, derivados de la creación y colaboración de grupos de trabajo multinacionales, para la región latinoamericana.

Público objetivo

Este libro está apuntado tanto a estudiantes de carreras de informática, computación e ingenierías como a los aficionados de la computadora interesados en conocer un poco más de lo que realmente ocurre dentro de un sistema de cómputo y el papel que cumple el sistema operativo.

Al finalizar el libro se espera que el lector haya adquirido conocimientos y habilidades como:

  • Administrar, diseñar y desarrollar un sistema operativo.
  • Conociendo el funcionamiento general de los sistemas operativos, poder sacar mejor provecho de la computadora
  • Conocer y saber aprovechar no sólo los sistemas, sino las metodologías y principales formas de interacción del software libre

Se asume también que el lector está familiarizado con algún lenguaje de programación de alto nivel, y –al menos en un nivel básico– con C. Aunque los ejemplos de código están dados en diversos lenguajes de programación (Bash, Perl, c, PascalFC, Python, Ruby, Ensamblador, entre otros), éstos son tan sencillos que pueden ser fácilmente escritos en el lenguaje de elección del lector sin mayor esfuerzo.

Resultará muy conveniente tener acceso a una computadora con sistema operativo Linux (gnu) u otro Unix libre.

Estructura temática

El texto comprende los siguientes capítulos:

1. Punto de partida.
Para comenzar a hablar de sistemas operativos, es necesario, en primer término, enmarcar qué es un sistema operativo y cuáles son sus funciones principales. También es importante detallar algunos puntos que, contrario a la percepción común, no pueden considerarse parte de sus funciones.

Este tema se presenta apoyado en la evolución histórica del cómputo, haciendo énfasis en por qué este proceso evolutivo en particular desembocó en los sistemas operativos que se tienen hoy en día.

2. Relación con el hardware.
Partiendo de que una de las principales tareas del sistema operativo es presentar una abstracción regular del hardware a los procesos que se ejecuten, resulta importante presentar cómo éste está estructurado, y cómo el sistema operativo puede comunicarse con él.

Este capítulo aborda la jerarquía de almacenamiento, el mecanismo de interrupciones y excepciones y el papel que desempeñan para las llamadas al sistema, las características base de diversos tipos de dispositivo del sistema, el concepto de canales (o buses) de comunicación, el mecanismo de acceso directo a memoria, y una introducción a un tema que puede ser visto como eje conductor a lo largo de todo el libro: La importancia y complejidad de la concurrencia, y su relación con el paralelismo y multiprocesamiento.

3. Administración de procesos.
La entidad principal con la que interactúa un sistema operativo (ya sea para brindarle servicios o para imponerle restricciones) es el proceso. Este capítulo inicia presentando los diferentes estados de los procesos y la relación entre éstos y sus hermanos menores (los hilos), y los principales modelos empleados para el multiprocesamiento.

Todos los sistemas operativos modernos tienen que enfrentar a la concurrencia: la incertidumbre del ordenamiento en el tiempo entre eventos relativos a los diferentes procesos e hilos. La parte medular de este capítulo presenta a las primitivas de sincronización: mutexes, semáforos y monitores. Para ilustrarlas, se emplean los patrones y problemas clásicos que se han seguido a lo largo de su desarrollo histórico.

Pero las primitivas pueden solamente utilizarse entre procesos que cooperan deliberadamente entre sí. Un sistema operativo debe instrumentar protección y separación, incluso entre procesos que compiten o que sencillamente no saben el uno acerca del otro. Por ello, la última sección de este capítulo aborda los diferentes mecanismos que hay para evitar las situaciones de bloqueo mutuo.

4. Planificación de procesos.
Para que varios procesos coexistan en un sistema de cómputo, el primer recurso que el sistema operativo debe multiplexar o repartir entre todos ellos es el tiempo de cómputo: el uso del procesador. Este capítulo presenta los diferentes niveles de planificador que forman parte de un sistema operativo, y analiza al planificador a corto plazo (también conocido como despachador). Se presentan los principales algoritmos, y se ilustra cómo los sistemas operativos modernos van empleando técnicas mixtas de varios de ellos.

Por último, se abordan tres temas brevemente: los diferentes modelos de planificación de hilos y su relación con los procesos, las particularidades de la planificación en un entorno con multiprocesadores reales, y las necesidades de planificación de tiempo real.

5. Administración de memoria.
Los programas sólo se vuelven procesos cuando se les asigna memoria y tiempo de cómputo: cuando dejan de ser el resultado de una compilación guardada estáticamente para convertirse en una entidad dinámica. Este capítulo presenta, en primer lugar, la visión desde dentro de la memoria por parte de cada uno de los procesos: el espacio de direccionamiento y el acomodo clásico de las regiones de un proceso en la memoria que le es asignada.

Para que los distintos procesos compartan la memoria del sistema, vemos que a lo largo de la historia se han presentado diferentes esquemas. Se explican someramente los esquemas de partición contigua fija y variable, para profundizar posteriormente en los que ofrecen mayor flexibilidad al sistema operativo y se mantienen en uso al día de hoy: la segmentación y la paginación. De esta última, se continúa para presentar la abstracción que ha liberado a los sistemas operativos para sobrecomprometer la memoria de forma eficiente y prácticamente transparente: la memoria virtual.

Al manejar la memoria de un proceso surgen puntos importantes a tomar en cuenta en lo relativo a la seguridad en cómputo; la parte final de este capítulo presenta la vulnerabilidad conocida como desbordamiento de buffer (buffer overflow), y algunas estrategias de mitigación que se han implementado con el paso de los años para mitigar su peligrosidad.

6. Organización de archivos.
De cara al usuario, probablemente la principal abstracción llevada a cabo por el sistema operativo es la organización de la información sobre un medio persistente. Hoy en día, la norma es que esta organización se realice en archivos estructurados sobre una estructura jerárquica llamada directorio. Este capítulo se centra en explicar esta abstracción, sin entrar aún en detalles respecto a cómo se llega a un respaldo físico de la misma.

Estos conceptos parecen tan omnipresentes y universales que podría pensarse que no requieren mayor análisis. Sin embargo, resulta importante abordar las diferencias semánticas derivadas del desarrollo histórico de distintos sistemas. En este capítulo se presentan varios conceptos cuya instrumentación en un medio que asegure la persistencia se describirá en el siguiente capítulo.

Por último, se incluye un breve repaso de distintos tipos de sistemas de archivos en red, enfatizando nuevamente en los cambios semánticos derivados de la distinta historia de cada instrumentación.

7. Sistemas de archivos.
Este capítulo presenta la contraparte obligada del anterior: ¿cómo se estructuran los dispositivos de almacenamiento a largo plazo, a los cuales se hace referencia genéricamente como discos, cómo se van plasmando las estructuras mediante las cuales el usuario organiza la información en bloques dentro de un dispositivo, qué problemas pueden derivar del uso de estos sistemas de archivos, y qué métodos para evitarlos o resolverlos se han implementado?

Este capítulo basa sus ejemplos en un sistema de archivos bastante viejo y simple, pero aún en muy amplio uso en el cómputo moderno: la familia fat.

Los siguientes temas resultan muy importantes para la comprensión y para el desarrollo futuro de la materia, pero dado que son empleados por el sistema operativo (y no necesariamente son parte integral del mismo), se presentan como apéndices

A. Software libre y licenciamiento.
Estudiar sistemas operativos cruza necesariamente la temática del software libre. Uno de los principios fundamentales del desarrollo histórico es la libertad de aprender, esto es, todo software que se diga libre debe permitir a sus usuarios comprender sus estructuras básicas, la relación entre ellas, y la lógica general de su programación.

Hoy en día hay una gran cantidad de sistemas operativos libres, tanto de propósito general como enfocados a un nicho. El movimiento ideológico del software libre, contrario a cualquier pronóstico que pudiera haberse hecho al iniciarse en 1984, claramente ha cambiado el desarrollo del cómputo. Todos los sistemas operativos que pueden ser estudiados de primera mano, constatando la instrumentación de sus principios son necesariamente (aunque con una definición ligeramente laxa) software libre.

Hacia el año 2000 se fue haciendo claro que estas ideas no pueden aplicarse únicamente al software. Poco a poco fue definiéndose una noción mucho más amplia, la de los bienes culturales libres. El presente libro busca brindar una contribución a esta última categoría.

El primer apéndice aborda brevemente estos temas, así como los principales modelos de licenciamiento libre utilizados.

B. Virtualización.
La virtualización es una herramienta muy útil, y está cada vez más al alcance de todos, para el aprendizaje de los sistemas operativos. Hay una gran cantidad de recursos para comprender desde los primeros momentos del arranque de la computadora. Empleando imágenes de máquinas virtuales, pueden comprenderse y desmenuzarse los distintos elementos del sistema operativo, e incluso observar el resultado de realizar modificaciones sobre un sistema operativo real. Es, por tanto, una herramienta muy importante para acompañar al aprendizaje de esta materia.

La virtualización es también una tecnología que permea cada vez más aspectos del uso profesional del cómputo, y comprenderlo ayudará al lector a elegir las herramientas específicas a emplear.

Pero hablar de la virtualización como un todo ignoraría aspectos fundamentales de la riqueza que presenta este campo. Al igual que con los conceptos presentados a lo largo del libro, la virtualización es presentada a partir de su perspectiva histórica, y detallando hacia las distintas modalidades que se han desarrollado con el paso del tiempo.

C. El medio físico y el almacenamiento.
En el capítulo \ref{FS} se presenta cómo se concretiza la abstracción de archivos y directorios para plasmarlo en un gran arreglo lineal de datos, en una entidad aún abstracta a la cual se sigue haciendo referencia con el nombre genérico de disco. Este apéndice se ocupa de los detalles físicos del acomodo de la información en su medio.

Pero un disco va mucho más allá de un dispositivo que simplemente vuelca dicho arreglo a un medio persistente. En primer término, los discos magnéticos rotativos (el medio dominante de almacenamiento) presentan peculiaridades que los sistemas operativos tuvieron que saber resolver. El desarrollo de la tecnología, sin embargo, fue arrebatando estas áreas del ámbito del sistema operativo, entregándolas a la optimización realizada dentro del hardware controlador.

Por otro lado, la tecnología de almacenamiento en estado sólido ha llegado a niveles de madurez que en determinados mercados ya la colocan claramente por encima de los discos magnéticos. Esto implica cambios importantes para el modo en que el sistema operativo debe estructurar y modificar la información.

Por último, un volumen ya no necesariamente se refiere a un único medio físico. Este apéndice aborda tanto a raid, el primer mecanismo que se popularizó para agregar varias unidades para mejorar, tanto la capacidad máxima y la confiabilidad de un volumen, como al manejo avanzado de volúmenes, en que el sistema operativo incorpora la lógica de raid con la del manejo de sistemas de archivos para lograr mucho mayor flexibilidad.

Licenciamiento

Este libro fue desarrollado como parte del Proyecto LATIn \parencite{ProyectoLatin}, que busca la creación de libros de texto libres para nivel universitario, y enfocado a Latinoamérica.

Cualquier parte de este libro puede ser reproducido y utilizado para todo fin, bajo los términos de la licencia Creative Commons-Atribución-CompartirIgual (CC-BY-SA) versión 4.0 \parencite{CCBYSA}.

Este modelo de licenciamiento se presenta y explica en la sección \ref{SL_CC}.