Sistemas Operativos: Características, historia y evolución (Antología).

Page 1

REPÚBLICA BOLIVARIANA DE VENEZUELA

UNIVERSIDAD BICENTENARIA DE ARAGUA

VICERRECTORADO ACADÉMICO

DECANATO DE LA FACULTAD DE INGENIERÍA

ESCUELA DE INGENIERÍA DE SISTEMAS

SAN JOAQUÍN DE TURMERO - ESTADO ARAGUA

Sistemas operativos:

Características, historia y evolución.

Autor: Yonatan David Mojica Rincón.

CI: 31595613.

Docente: Roberto Carlos Ontiveros Cepeda

Curso: Sistemas Operativos I.

Sección: T1.

Rubio, febrero de 2023

1. Antecedentes e introducción a los sistemas operativos………………. Pág. 2

2. Definición y funcionamiento de un sistema operativo…………………. Pág. 3

2.1 El sistema operativo como parte del sistema de cómputo…….Pág.6

2.2 Papel del sistema operativo en un sistema informático global

2.2.1 Punto de vista del usuario……………………………… Pág. 11

2.2.2 Vista del sistema………………………………………….. Pág. 12

3. Historia y evolución de los sistemas operativos………………………. Pág. 13

3.1.1 La primera generación (1945 a 1955): tubos al vacío……... Pág. 14

3.1.2 La segunda generación (1955 a 1965): transistores y sistemas de procesamiento por lotes……………………………………………

Pág. 15

3.1.3 La tercera generación (1965 a 1980): circuitos integrados y multiprogramación…………………………………….………………..

Índice Introducción………………………………………..……………………….…….. Pág. 1
....…………………………………………………………………………...
Pág. 10
..
Pág.
Resumen………………………………………………………………………….. Pág. 26
16

Introducción

Cada computadora de propósito general consta de hardware, sistema(s) operativo(s), programas de sistema y programas de aplicación. El hardware consta de memoria, CPU, ALU, dispositivos de E/S, dispositivos periféricos y dispositivos de almacenamiento. El programa del sistema consta de compiladores, cargadores, editores, SO, etc. El programa de aplicación consta de programas comerciales y programas de base de datos. Cada computadora debe tener un sistema operativo para ejecutar otros programas. El sistema operativo coordina el uso del hardware entre los diversos programas del sistema y los programas de aplicación para varios usuarios. Simplemente proporciona un entorno en el que otros programas pueden realizar un trabajo útil. El sistema operativo es un conjunto de programas especiales que se ejecutan en un sistema informático que le permite funcionar correctamente.

Realiza tareas básicas como reconocer la entrada del teclado, realizar un seguimiento de los archivos y directorios en el disco, enviar la salida a la pantalla y controlar los dispositivos periféricos.

Un sistema operativo actúa como intermediario entre el usuario de una computadora y el hardware de la computadora. El propósito de un sistema operativo es proporcionar un entorno en el que un usuario pueda ejecutar programas de manera conveniente y eficiente El hardware debe proporcionar los mecanismos adecuados para garantizar el correcto funcionamiento del sistema informático y evitar que los programas de usuario interfieran en el correcto funcionamiento del sistema. En la presente antología se recopilan textos de diferentes libros, con la finalidad de conocer la evolución que han tenido a lo largo de los años los sistemas operativos, y la forma en que revolucionaron la industria tecnológica, desde sus primeras versiones, y la historia detrás de este tan importante software; también definiendo sus características y funcionamiento.

1. Antecedentes e introducción a los sistemas operativos

En las primeras máquinas computadoras no se instalaba ningún programa para manipular los recursos, es decir, no existían en esa época los sistemas operativos. Una persona, conocida como el operador, muy especializada en una computadora en particular tenía el trabajo de operarla. Para que el operador pudiera realizar su trabajo, era necesario que conociera, en todos sus detalles, el hardware específico de la computadora con la cual actuaba. El operador era el responsable de hacer muchas operaciones que hoy en día están automatizadas, entre ellas las siguientes:

* Iniciar la computadora, mediante un panel de control manual, que posteriormente se auxilió de un pequeño cargador sobre cinta de papel o tarjeta perforada.

* Cargar los programas que daban soporte a los demás programas, lo que hoy en día se conoce como programas de sistemas, por ejemplo: compiladores de diversos lenguajes, enlazadores, etc.

* Cargar los programas de usuarios y los datos asociados a ellos.

* Atender cualquier fallo que pudiera suceder y resolverlo, para lo cual a veces se hacía un vaciado de la memoria1 con el objetivo de examinar los valores de los registros del procesador.

En la década de los cincuenta, se hicieron los primeros esfuerzos para automatizar los procesos descritos anteriormente. La idea de la automatización se basó en la observación de que el trabajo del operador de la computadora era bastante rutinario y seguía algunos principios que podían generalizarse. La automatización de ese trabajo a través de un programa específico fue el embrión que dio origen a lo que más tarde se denominó sistema de operación en alusión al trabajo que hacía el operador.

La evolución del hardware ha sido constante: del monoprocesador a los multiprocesadores, memorias ultrarápidas, incorporación de nuevos dispositivos, interconexión con otros sistemas... pero ¿qué ha pasado con los sistemas operativos? Los sistemas operativos debieron acompañar la evolución. Conceptos comunes de lo que es un sistema operativo es que es un manejador de recursos,

un programa de control, el programa que se ejecuta constantemente en una computadora, etc. Tanenbaum lo expresa desde dos puntos de vista (complementarios): como máquina extendida o virtual más fácil de entender y programar que el hardware puro y como administrador de recursos, entendiendo por “recursos” a los componentes tanto físicos como lógicos: el procesador, memoria, discos, ratones o archivos. (Ver Tanenbaum & Woodhull “Sistemas Operativos, diseño e implementación”. Un sistema operativo es un programa que actúa como intermediario entre el usuario (en su sentido amplio) de un computador y el hardware del computador. El propósito de un sistema operativo es crear un entorno en el que el usuario pueda ejecutar programas de forma cómoda y eficiente (ver Silberschatz “Sistemas Operativos” quinta edición p. 3).

Los sistemas operativos deben acompañar la evolución de los sistemas de cómputo, brindando: portabilidad, interoperabilidad, interconectividad, ambiente multitareas, multiusuario, seguridad, protección (entre usuarios y desde el exterior), fácil administración, independencia de dispositivo, abstracción del hardware.

2. Definición y funcionamiento de un sistema operativo.

Un SO actúa como un intermediario entre los usuarios de la computadora y el hardware. El objetivo es proporcionar un medio cómodo, eficiente y seguro para explotar los recursos de la computadora, sin tener que conocer los detalles específicos de cada uno de los componentes del sistema de cómputo. En este entorno, los usuarios pueden ser personas u otros programas. El propósito de un sistema operativo es proporcionar un entorno en el que el usuario pueda ejecutar programas de una manera práctica y eficiente. Un sistema operativo es software que gestiona el hardware de la computadora. El hardware debe proporcionar los mecanismos apropiados para asegurar el correcto funcionamiento del sistema informático e impedir que los programas de usuario interfieran con el apropiado funcionamiento del sistema. Internamente, los sistemas operativos varían enormemente en lo que se refiere a su configuración, dado que están organizados según muchas líneas diferentes.

El diseño de un nuevo sistema operativo es una tarea de gran envergadura. Es fundamental que los objetivos del sistema estén bien definidos antes de comenzar el diseño. Estos objetivos constituyen la base para elegir entre los distintos algoritmos y estrategias. Dado que un sistema operativo es un software grande y complejo, debe crearse pieza por pieza. Cada una de estas piezas debe ser una parte perfectamente perfilada del sistema, estando sus entradas, salidas y funciones cuidadosamente definidas. Debido a su complejidad, los sistemas operativos (SO) se diseñan e implementan por grupos de especialistas, y sus interioridades se estudian en carreras de perfil informático que tienen la necesidad de explotarlos lo más eficientemente posible o de hacer algunas modificaciones con el propósito de resolver problemas específicos no concebidos por los diseñadores originales. De igual forma, los SO modernos deben diseñarse por partes o módulos que tienen responsabilidades específicas e interactúan entre sí para resolver las diversas tareas que tienen a su cargo.

Un sistema operativo es un programa que administra el hardware de una computadora. También proporciona las bases para los programas de aplicación y actúa como un intermediario entre el usuario y el hardware de la computadora. Un aspecto sorprendente de los sistemas operativos es la gran variedad de formas en que llevan a cabo estas tareas. Los sistemas operativos para mainframe están diseñados principalmente para optimizar el uso del hardware. Los sistemas operativos de las computadoras personales (PC) soportan desde complejos juegos hasta aplicaciones de negocios. Los sistemas operativos para las computadoras de mano están diseñados para proporcionar un entorno en el que el usuario pueda interactuar fácilmente con la computadora para ejecutar programas. Por tanto, algunos sistemas operativos se diseñan para ser prácticos, otros para ser eficientes y otros para ser ambas cosas.

De esta forma, los objetivos fundamentales de un sistema operativo son:

1. Hacer que la máquina sea fácil de utilizar, tanto por los usuarios finales de ésta, como por los desarrolladores y administradores del sistema.

2. Hacer que el funcionamiento de la máquina sea lo más eficiente posible.

Nótese que bajo ambos objetivos subyace el propósito de reducir los costes de explotación del sistema.

Un sistema operativo es un software que gestiona el hardware de la computadora y proporciona un entorno para ejecutar los programas de aplicación. Quizá el aspecto más visible de un sistema operativo sea la interfaz que el sistema informático proporciona al usuario. Para que una computadora haga su trabajo de ejecutar programas, los programas deben encontrarse en la memoria principal. La memoria principal es la única área de almacenamiento de gran tamaño a la que el procesador puede acceder directamente. Es una matriz de palabras o bytes, con un tamaño que va de millones a miles de millones de posiciones distintas. Cada palabra de la memoria tiene su propia dirección. Normalmente, la memoria principal es un dispositivo de almacenamiento volátil que pierde su contenido cuando se desconecta o desaparece la alimentación.

La mayoría de los sistemas informáticos proporcionan un almacenamiento secundario como extensión de la memoria principal. El almacenamiento secundario proporciona una forma de almacenamiento no volátil, que es capaz de mantener enormes cantidades de datos de forma permanente. El dispositivo de almacenamiento secundario más común es el disco magnético, que proporciona un sistema de almacenamiento para programas y datos. Para un mejor uso de la CPU, los sistemas operativos modernos emplean multiprogramación, la cual permite tener en memoria a la vez varios trabajos, asegurando por tanto que la CPU tenga siempre un trabajo que ejecutar. Los sistemas de tiempo compartido son una extensión de la multiprogramación, en la que los algoritmos de planificación de la CPU conmutan rápidamente entre varios trabajos, proporcionando la ilusión de que cada trabajo está ejecutándose de forma concurrente.

El sistema operativo debe asegurar la correcta operación del sistema informático. Para impedir que los programas dé usuario interfieran con el apropiado funcionamiento del sistema, el hardware soporta dos modos de trabajo: modo usuario y modo kernel. Diversas instrucciones, como las instrucciones de E/S y las instrucciones de espera, son instrucciones privilegiadas y sólo se pueden ejecutar

en el modo kernel. La memoria en la que el sistema operativo reside debe protegerse frente a modificaciones por parte del usuario. Un temporizador impide los bucles infinitos. Estas características (modo dual, instrucciones privilegiadas, protección de memoria e interrupciones del temporizador) son los bloques básicos que emplea el sistema operativo para conseguir un correcto funcionamiento. Un proceso (o trabajo) es la unidad fundamental de trabajo en un sistema operativo. La gestión de procesos incluye la creación y borrado de procesos y proporciona mecanismos para que los procesos se comuniquen y sincronicen entre sí. Un sistema operativo gestiona la memoria haciendo un seguimiento de qué partes de la misma están siendo usadas y por quién. El sistema opera tivo también es responsable de la asignación dinámica y liberación del espacio de memoria. El sistema operativo también gestiona el espacio de almacenamiento, lo que incluye proporciona: sistemas de archivos para representar archivos y directorios y gestionar el espacio en los dispositivos de almacenamiento masivo.

Existen diversos tipos de sistemas informáticos que sirven a propósitos específicos. Entre estos se incluyen los sistemas operativos en tiempo real diseñados para entornos embebidos, tales como los dispositivos de consumo, automóviles y equipos robóticos. Los sistemas operativos en tiempo real tienen restricciones de tiempo fijas y bien definidas. El procesamiento tiene que realizarse dentro de las restricciones definidas, o el sistema fallará. (Abraham Silberschafz, Greg Gagne, Peter Baer Galvin. Fundamentos de sistemas operativos, séptima edición)

2.1 El sistema operativo como parte del sistema de cómputo

En la Ilustración 1-1 se muestra la organización típica de un sistema informático. En ésta, la capa inferior está compuesta por el hardware del sistema (CPU, dispositivos de E/S y memoria, así como otros dispositivos o coprocesadores auxiliares), siendo la interfaz que proporciona a la capa superior de muy bajo nivel: la interfaz de programación es exclusivamente en código máquina, y los dispositivos se manejan directamente a través de sus registros de control, lo cual, evidentemente, resulta extremadamente complejo. Sobre esta interfaz de tan bajo nivel, el desarrollo de un programa sería extremadamente costoso, pues operaciones tan simples como leer

un carácter de un archivo conllevaría una gran complejidad. Y una vez desarrollado el programa, cargarlo y ejecutarlo sería también muy complejo y costoso.

Programas de sistema Programas de desarrollo

Programas de ayuda

Programas de órdenes

Programas de comandos

Aplicaciones

Ilustración 1-1. Estructura típica de un sistema informático

Con la complejidad de esta interfaz hardware se enfrenta el sistema operativo. Éste proporciona a las capas superiores una interfaz con un mayor grado de abstracción, en la que los programadores no necesitan tener en cuenta las particularidades del hardware a la hora de construir sus programas, puesdichas particularidades quedan ocultas tras la interfaz del sistema operativo. De esta forma, no sólo se simplifica la tarea de construcción de programas, sino que además dichos programas se hacen independientes de las particularidades del hardware. Además de ello, tareas del usuario final como organizar la información o ejecutar los programas se simplifican enormemente.

Sobre el sistema operativo, se pueden ejecutar tres tipos de programas:

 Programas del sistema: Son necesarios para utilizar el sistema operativo, por lo que habitualmente se distribuyen juntos y proceden del mismo fabricante.

Al ser externos al sistema operativo, se pueden sustituir por otros con formas de utilización diferentes. En este grupo de programas encontramos por

IDE
Contabilidad Almacén Facturación
Enlazador Depurador Compilador
Sistema operativo Hardware

ejemplo los intérpretes de comandos los programas de órdenes, como son ls, cp, o mv en el caso de los sistemas UNIX, o format o xcopy en el caso de los sistemas de Microsoft, o los programas de ayuda o documentación en línea.

 Programas de desarrollo: Sirven para construir otros programas. A este grupo pertenecen los compiladores, depuradores, montadores de enlace, gestores de bibliotecas o los entornos de desarrollo integrados. Si la máquina no se va a utilizar para desarrollar programas sino que sólo se utilizará para explotarlos, no son necesarios, por lo que no todos los sistemas operativos los incluyen como parte de sí mismos.

 Programas de aplicación: También conocidos simplemente como aplicaciones, son los programas que realizan el trabajo útil, verdadero objetivo final del sistema informático. Dado que normalmente sus usuarios no son informáticos, deben estar construidos de forma que no se requieran conocimientos en informática para manejarlos.

El programa de interfaz de usuario, shell o GUI, es el nivel más bajo del software en modo usuario y permite la ejecución de otros programas, como un navegador Web, lector de correo electrónico o reproductor de música. Estos programas también utilizan en forma intensiva el sistema operativo. La ubicación del sistema operativo se muestra en la figura 1-1. Se ejecuta directamente sobre el hardware y proporciona la base para las demás aplicaciones de software. Una distinción importante entre el sistema operativo y el software que se ejecuta en modo usuario es que, si a un usuario no le gusta, por ejemplo, su lector de correo electrónico, es libre de conseguir otro o incluso escribir el propio si así lo desea; sin embargo, no es libre de escribir su propio manejador de interrupciones de reloj, que forma parte del sistema operativo y está protegido por el hardware contra cualquier intento de modificación por parte de los usuarios. Algunas veces esta distinción no es clara en los sistemas integrados (a los que también se conoce como integrados o incrustados, y que podrían no tener modo kernel) o en los sistemas interpretados (como los sistemas operativos basados en Java que para separar los componentes utilizan interpretación y no el hardware).

Además, en muchos sistemas hay programas que se ejecutan en modo de usuario, pero ayudan al sistema operativo o realizan funciones privilegiadas. Por ejemplo, a menudo hay un programa que permite a los usuarios cambiar su contraseña. Este programa no forma parte del sistema operativo y no se ejecuta en modo kernel, pero sin duda lleva a cabo una función delicada y tiene que protegerse de una manera especial. En ciertos sistemas, la idea se lleva hasta el extremo y partes de lo que tradicionalmente se considera el sistema operativo (por ejemplo, el sistema de archivos) se ejecutan en el espacio del usuario. En dichos sistemas es difícil trazar un límite claro. Todo lo que se ejecuta en modo kernel forma, sin duda, parte del sistema operativo, pero podría decirse que algunos programas que se ejecutan fuera de este modo también forman parte del mismo sistema, o por lo menos están estrechamente asociados a él. (Andrew s. Tanebaum. “Sistemas operativos modernos, 3raedición.”)

Es importante recalcar que el hardware es muy diverso y por ese motivo no resulta fácil lidiar con cada una de sus especificidades; de hecho, en los primeros años de la computación solo personas muy especializadas se atrevían a enfrentarse a las computadoras, y por eso existía una separación entre los operadores de las computadoras y los programadores.

Quizás el lector que esté consultando este libro no lo pueda comprender pero un operador de computadoras era una persona muy especializada en un tipo de computadora específica y para operar otra debía entrenarse un buen tiempo en ella. Esta especialización se debía a que las computadoras se fabricaban con hardware muy específicos y por eso la forma de operarla difería de una a otra (aunque siempre existieron algunos principios generales).

Por el momento, se puede definir un SO como un programa que maneja los recursos de una computadora. Los recursos pueden ser de hardware o de software:

* Recursos de hardware: el procesador central (Central Process Unit - CPU); la memoria; los equipos de entrada/salida, tales como: el ratón (mouse), las impresoras, el teclado y el monitor, entre otros; los equipos de almacenamiento externo, por ejemplo: discos, memorias usb, cintas magnéticas, etc.

* Recursos de software: estructuras de datos diversas, compiladores, enlazadores, el intérprete de comandos del SO (Shell), los archivos y directorios, etc.

El SO también es un programa o, más bien, un conjunto de programas que conforman un sistema. Los programas de computadoras se pueden dividir en dos categorías generales:

* Programas de sistema. Son programas que dan apoyo a otros programas, por ejemplo: los compiladores, los editores de textos, los enlazadores, etc. El SO es el más importante y complejo de todos los programas de sistemas.

* Programas de aplicación. Son programas que tienen el objetivo de resolver algún problema específico, por ejemplo: un programa para hacer las nóminas de pago o para llevar la contabilidad de una empresa, un programa para controlar las historias clínicas de un hospital, etc.

El SO (el programa de sistema más importante) tiene la responsabilidad de administrar los recursos con que cuenta la computadora. (Lezcano-Brito, M. G. (2017). Fundamentos de sistemas operativos.)

2.2 Papel del sistema operativo en un sistema informático global

El hardware, la unidad central de procesamiento, UCP o CPU (central processing unit), la memoria y los dispositivos de I/S (entrada/salida), proporciona los recursos básicos de cómputo al sistema. Los programas de aplicación, como son los procesadores de texto, las hojas de cálculo, los compiladores y los exploradores web, definen las formas en que estos recursos se emplean para resolver los problemas informáticos de los usuarios. El sistema operativo controla y coordine el uso del hardware entre los diversos programas de aplicación por parte de los distintos usuarios.

También podemos ver un sistema informático como hardware, software y datos. El sistema operativo proporciona los medios para hacer un uso adecuado de estos recursos durante el funcionamiento del sistema informático. Un sistema operativo es similar a un gobierno. Como un gobierno, no realiza ninguna función útil por sí mismo: simplemente proporciona un entorno en el que otros programas pueden

llevar a cabo un trabajo útil. Para comprender mejor el papel de un sistema operativo, a continuación vamos a abordar los sistemas operativos desde dos puntos de vista: el del usuario y el del sistema.

2.2.1 Punto de vista del usuario:

La visión del usuario de la computadora varía de acuerdo con la interfaz que utilice. La mayoría de los usuarios que se sientan frente a un PC disponen de un monitor, un teclado, un ratón y una unidad de sistema. Un sistema así se diseña para que un usuario monopolice sus recursos. El objetivo es maximizar el trabajo (o el juego) que el usuario realice. En este caso, el sistema operativo se diseña principalmente para que sea de fácil uso, prestando cierta atención al rendimiento y ninguna a la utilización de recursos (el modo en que se comparten los recursos hardware y software). Por supuesto, el rendimiento es importante para el usuario, pero más que la utilización de recursos, estos sistemas se optimizan para el uso del mismo por un solo usuario.

En otros casos, un usuario se sienta frente a un terminal conectado a un mainframe o una microcomputadora. Otros usuarios acceden simultáneamente a través de otros terminales. Estos usuarios comparten recursos y pueden intercambiar información. En tales casos, el sistema operativo se diseña para maximizar la utilización de recursos, asegurar que todo el tiempo de CPU, memoria y E/S disponibles se usen de forma eficiente y que todo usuario disponga sólo de la parte equitativa que le corresponde.

En otros casos, los usuarios usan estaciones de trabajo conectadas a redes de otras estaciones de trabajo y servidores. Estos usuarios tienen recursos dedicados a su disposición, pero también tienen recursos compartidos como la red y los servidores (servidores de archivos, de cálculo y de impresión). Por tanto, su sistema operativo está diseñado para llegar a un compromiso entre la usabilidad individual y la utilización de recursos.

Recientemente, se han puesto de moda una gran variedad de computadoras de mano. La mayor parte de estos dispositivos son unidades autónomas para usuarios

individuales. Algunas se conectan a redes directamente por cable o, más a menudo, a través de redes y módems inalámbricos. Debido a las limitaciones de alimentación, velocidad e interfaz, llevan a cabo relativamente pocas operaciones remotas. Sus sistemas operativos están diseñados principalmente en función de la usabilidad individual, aunque el rendimiento, medido según la duración de la batería, es también importante.

Algunas computadoras tienen poca o ninguna interacción con el usuario. Por ejemplo, las computadoras incorporadas en los electrodomésticos y en los automóviles pueden disponer de teclados numéricos e indicadores luminosos que se encienden y apagan para mostrar el estado, pero tanto estos equipos como sus sistemas operativos están diseñados fundamentalmente para funcionar sin intervención del usuario.

2.2.2 Vista del sistema:

Desde el punto de vista de la computadora, el sistema operativo es el programa más íntimamente relacionado con el hardware. En este contexto, podemos ver un sistema operativo como un asignador de recursos. Un sistema informático tiene muchos recursos que pueden ser necesarios para solucionar un problema: tiempo de CPU, espacio de memoria, espacio de almacenamiento de archivos, dispositivos de E/S, etc. El sistema operativo actúa como el administrador de estos recursos. Al enfrentarse a numerosas y posiblemente conflictivas solicitudes de recursos, el sistema operativo debe decidir cómo asignarlos a programas y usuarios específicos, de modo que la computadora pueda operar de forma eficiente y equitativa. Como hemos visto, la asignación de recursos es especialmente importante cuando muchos usuarios aceden al mismo mainframe o minicomputadora.

Un punto de vista ligeramente diferente de un sistema operativo hace hincapié en la necesidad de controlar los distintos dispositivos de E /S y programas de usuario. Un sistema operativo es un programa de control. Como programa de control, gestiona la ejecución de los programas de usuario para evitar errores y mejorar el uso de la computadora. Tiene que ver especialmente con elfuncionamiento ycontrol de los dispositivos de E /S.

3. Historia y evolución de los sistemas operativos

Los sistemas operativos han ido evolucionando a través de los años. Como los sistemas operativos han estado estrechamente relacionados a través de la historia con la arquitectura de las computadoras en las que se ejecutan, analizaremos generaciones sucesivas de computadoras para ver cómo eran sus sistemas operativos. Esta vinculación de generaciones de sistemas operativos con generaciones de computadoras es un poco burda, pero proporciona cierta estructura donde de cualquier otra forma no habría.

La progresión que se muestra a continuación es en gran parte cronológica, aunque el desarrollo ha sido un tanto accidentado. Cada fase surgió sin esperar a que la anterior terminara completamente. Hubo muchos traslapes, sin mencionar muchos falsos inicios y callejones sin salida. El lector debe tomar esto como guía, no como la última palabra. La primera computadora digital verdadera fue diseñada por el matemático inglés Charles Babbage (de 1792 a 1871). Aunque Babbage gastó la mayor parte de su vida y fortuna tratando de construir su “máquina analítica”, nunca logró hacer que funcionara de manera apropiada, debido a que era puramente mecánica y la tecnología de su era no podía producir las ruedas, engranes y dientes con la alta precisión que requería. Por supuesto, la máquina analítica no tenía un sistema operativo.

3.1.1 La primera generación (1945 a 1955): tubos al vacío

En 1944, la máquina Colossus fue construida por un equipo de trabajo en Bletchley Park, Inglaterra; la Mark I, por Howard Aiken en Harvard, y la ENIAC, por William Mauchley y su estudiante graduado J. Presper Eckert en la Universidad de Pennsylvania. Algunas fueron binarias, otras utilizaron bulbos, algunas eran programables, pero todas eran muy primitivas y tardaban segundos en realizar incluso hasta el cálculo más simple. En estos primeros días, un solo grupo de personas (generalmente ingenieros) diseñaban, construían, programaban,

operaban y daban mantenimiento a cada máquina. Toda la programación se realizaba exclusivamente en lenguaje máquina o, peor aún, creando circuitos eléctricos mediante la conexión de miles de cables a tableros de conexiones (plugboards) para controlar las funciones básicas de la máquina.

Los lenguajes de programación eran desconocidos (incluso se desconocía el lenguaje ensamblador). Los sistemas operativos también se desconocían. El modo usual de operación consistía en que el programador trabajaba un periodo dado, registrándose en una hoja de firmas, y después entraba al cuarto de máquinas, insertaba su tablero de conexiones en la computadora e invertía varias horas esperando que ninguno de los cerca de 20,000 bulbos se quemara durante la ejecución. Prácticamente todos los problemas eran cálculos numéricos bastante simples, como obtener tablas de senos, cosenos y logaritmos.

Con las primeras computadoras, el programador interactuaba de manera directa con el hardware de la computadora, no existía realmente un sistema operativo; las primeras computadoras utilizaban bulbos, la entrada de datos y los programas se realizaban a través del lenguaje máquina (bits) o a través de interruptores. A principio de los 50's, la compañía General's Motors implanto el primer sistema operativo para su IBM 170. Empiezan a surgir las tarjetas perforadas las cuales permiten que los usuarios (que en ese tiempo eran programadores, diseñadores, capturistas,etc.), se encarguen de modificar sus programas. Establecían o apartaban tiempo, metían o introducían sus programas, corregían y depuraban sus programas en su tiempo. A esto se le llamaba trabajo en serie. Todo esto se traducía en pérdida de tiempo y tiempos de programas excesivos.

3.1.2 La segunda generación (1955 a 1965): transistores y sistemas de procesamiento por lotes:

La introducción del transistor a mediados de la década de 1950 cambió radicalmente el panorama. Las computadoras se volvieron lo bastante confiables como para poder fabricarlas y venderlas a clientes dispuestos a pagar por ellas, con la expectativa de que seguirían funcionando el tiempo suficiente como para poder llevar a cabo una cantidad útil de trabajo. Por primera vez había una clara

separación entre los diseñadores, constructores, operadores, programadores y el personal de mantenimiento.

Estas máquinas, ahora conocidas como mainframes, estaban encerradas en cuartos especiales con aire acondicionado y grupos de operadores profesionales para manejarlas. Sólo las empresas grandes, universidades o agencias gubernamentales importantes podían financiar el costo multimillonario de operar estas máquinas. Para ejecutar un trabajo (es decir, un programa o conjunto de programas), el programador primero escribía el programa en papel (en FORTRAN o en ensamblador) y después lo pasaba a tarjetas perforadas. Luego llevaba el conjunto de tarjetas al cuarto de entrada de datos y lo entregaba a uno de los operadores; después se iba a tomar un café a esperar a que los resultados estuvieran listos.

Cuando la computadora terminaba el trabajo que estaba ejecutando en un momento dado, un operador iba a la impresora y arrancaba las hojas de resultados para llevarlas al cuarto de salida de datos, para que el programador pudiera recogerlas posteriormente. Entonces, el operador tomaba uno de los conjuntos de tarjetas que se habían traído del cuarto de entrada y las introducía en la máquina. Si se necesitaba el compilador FORTRAN, eloperador tenía que obtenerlo de un gabinete de archivos e introducirlo a la máquina. Se desperdiciaba mucho tiempo de la computadora mientras los operadores caminaban de un lado a otro del cuarto de la máquina (Fig 1-3).

Las computadoras grandes de segunda generación se utilizaron principalmente para cálculos científicos y de ingeniería, tales como resolver ecuaciones diferenciales parciales que surgen a menudo en física e ingeniería. En gran parte se programaron en FORTRAN y lenguaje ensamblador. Los sistemas operativos típicos eran FMS (Fortran Monitor System) e IBSYS, el sistema operativo de IBM para la 7094.

3.1.3 La tercera generación (1965 a 1980): circuitos integrados y multiprogramación:

A principio de la década de 1960, la mayoría de los fabricantes de computadoras tenían dos líneas de productos distintas e incompatibles. Por una parte estaban las computadoras científicas a gran escala orientadas a palabras, como la 7094, que se utilizaban para cálculos numéricos en ciencia e ingeniería. Por otro lado, estaban las computadoras comerciales orientadas a caracteres, como la 1401, que se utilizaban ampliamente para ordenar cintas e imprimir datos en los bancos y las compañías de seguros.

La IBM 360 fue la primera línea importante de computadoras en utilizar circuitos integrados (ICs) (a pequeña escala), con lo cual se pudo ofrecer una mayor ventaja de precio/rendimiento en comparación con las máquinas de segunda generación, las cuales fueron construidas a partir de transistores individuales. Su éxito fue inmediato y la idea de una familia de computadoras compatibles pronto fue adoptada por todos los demás fabricantes importantes. Los descendientes de estas máquinas se siguen utilizando hoy día en centros de cómputo. En la actualidad se utilizan con frecuencia para manejar bases de datos enormes (por ejemplo, para sistemas de reservaciones de aerolíneas) o como servidores para sitios de World Wide Web que deben procesar miles de solicitudes por segundo.

En los 80's Se genera el circuito integrado, se organizan los trabajos y se generan los procesos Batch (por lotes), lo cual consiste en determinar los trabajos comunes y realizarlos todos juntos de una sola vez. En esta época surgen las unidades de cinta y el cargador de programas, el cual se considera como el primer tipo de sistema operativo. Inició el auge de la INTERNET en los Estados Unidos de

América. A finales de los años 80's comienza el gran auge y Evolución de los sistemas operativos. Se descubre el concepto de multiprogramación que consiste en tener cargados en memoria a varios trabajos al mismo tiempo, tema principal de los sistemas operativos actuales.

También popularizaron varias técnicas clave ausentes en los sistemas operativos de segunda generación. Quizá la más importante de éstas fue la multiprogramación. En la 7094, cuando el trabajo actual se detenía para esperar a que se completara una operación con cinta u otro dispositivo de E/S, la CPU simplemente permanecía inactiva hasta terminar la operación de E/S. Con los cálculos científicos que requieren un uso intensivo de la CPU, la E/S no es frecuente, por lo que este tiempo desperdiciado no es considerable. Con el procesamiento de datos comerciales, el tiempo de espera de las operaciones de E/S puede ser a menudo de 80 a 90 por ciento del tiempo total, por lo que debía hacerse algo para evitar que la (costosa) CPU esté inactiva por mucho tiempo.

La solución que surgió fue particionar la memoria en varias piezas, con un trabajo distinto en cada partición, como se muestra en la figura 1-5. Mientras que un trabajo esperaba a que se completara una operación de E/S, otro podía estar usando la CPU. Si pudieran contenerse suficientes trabajos en memoria principal al mismo tiempo, la CPU podía estar ocupada casi 100 por ciento del tiempo. Para tener varios trabajos de forma segura en memoria a la vez, se requiere hardware especial para proteger cada trabajo y evitar que los otros se entrometan y lo malogren; el 360 y los demás sistemas de tercera generación estaban equipados con este hardware.

Aunque los sistemas operativos de tercera generación eran apropiados para los cálculos científicos extensos y las ejecuciones de procesamiento de datos comerciales masivos, seguían siendo en esencia sistemas de procesamiento por lotes. Muchos programadores añoraban los días de la primera generación en los que tenían toda la máquina para ellos durante unas cuantas horas, por lo que podían depurar sus programas con rapidez. Con los sistemas de tercera generación, el tiempo que transcurría entre enviar un trabajo y recibir de vuelta la salida era comúnmente de varias horas, por lo que una sola coma mal colocada podía ocasionar que fallara la compilación, y el programador desperdiciara la mitad del día.

Bell Labs y General Electric (que en ese entonces era un importante fabricante de computadoras) decidieron emprender el desarrollo de una “utilería para computadora”, una máquina capaz de servir a varios cientos de usuarios simultáneos de tiempo compartido. Su modelo fue el sistema de electricidad: cuando se necesita energía, sólo hay que conectar un contacto a la pared y, dentro de lo razonable, toda la energía que se requiera estará ahí. Es allí donde nace sistema conocido como MULTICS (MULTiplexed Information and Computing Service; Servicio de Información y Cómputo MULTiplexado) MULTICS fue un éxito parcial. Se diseñó para dar soporte a cientos de usuarios en una máquina que era sólo un poco más potente que una PC basada en el Intel 386, aunque tenía mucho más capacidad de E/S. MULTICS introdujo muchas ideas seminales en la literatura de las computadoras, pero convertirlas en un producto serio y con éxito comercial importante era algo mucho más difícil de lo que cualquiera hubiera esperado. Luego, Bell Labs se retiró del proyecto y General Electric dejó el negocio de las computadoras por completo. Sin embargo, el M.I.T. persistió y logró hacer en un momento dado que MULTICS funcionara.

A pesar de la carencia de éxito comercial, MULTICS tuvo una enorme influencia en los sistemasoperativos subsecuentes. Se describe en varios artículos y en un libro (Corbató y colaboradores, 1972; Corbató y Vyssotsky, 1965; Daley y Dennis, 1968; Organick, 1972; y Staltzer, 1974). También tuvo (y aún tiene) un sitio Web activo,

ubicado en www.multicians.org, con mucha información acerca del sistema, sus diseñadores y sus usuarios.

Posteriormente, Ken Thompson, uno de los científicos de cómputo en Bell Labs que trabajó en el proyecto MULTICS, encontró una pequeña minicomputadora PDP-7 que nadie estaba usando y se dispuso a escribir una versión simple de MULTICS para un solo usuario. Más adelante, este trabajo se convirtió en el sistema operativo UNIX®, que se hizo popular en el mundo académico, las agencias gubernamentales y muchas compañías.

Como agregado, vale la pena mencionar que en 1987 el autor liberó un pequeño clon de UNIX conocido como MINIX, con fines educativos. En cuanto a su funcionalidad, MINIX es muy similar a UNIX, incluyendo el soporte para POSIX. Desde esa época, la versión original ha evolucionado en MINIX 3, que es altamente modular y está enfocada a presentar una muy alta confiabilidad. Tiene la habilidad de detectar y reemplazar módulos con fallas o incluso inutilizables (como los dispositivos controladores de dispositivos de E/S) al instante, sin necesidad de reiniciar y sin perturbar a los programas en ejecución. También hay disponible un libro que describe su operación interna y contiene un listado del código fuente en un apéndice (Tanenbaum y Woodhull, 2006).

El deseo de una versión de producción (en vez de educativa) gratuita de MINIX llevó a un estudiante finlandés, llamado Linus Torvalds, a escribir Linux. Este sistema estaba inspirado por MINIX, además de que fue desarrollado en este sistema y originalmente ofrecía soporte para varias características de MINIX (por ejemplo, el sistema de archivos de MINIX). Desde entonces se ha extendido en muchas formas, pero todavía retiene cierta parte de su estructura subyacente común para MINIX y UNIX.

3.1.4 La cuarta generación (1980 a la fecha): las computadoras personales:

Los 90's y el futuro Entramos a la era de la computación distribuida y del multiprocesamiento a través de múltiples redes de computadoras, aprovechando el ciclo del procesador. Se tendrá una configuración dinámica con un reconocimiento

inmediato de dispositivos y software que se añada o elimine de las redes a través de procesos de registro y localizadores. La conectividad se facilita gracias a estándares y protocolos de sistemas abiertos establecidos por organizaciones como la Organización Internacional de estándares (ISO-International Standard Organization), fundación de software abierto, todo estará más controlado por los protocolos de comunicación OSI y por la red de servicios digital ISDN.

Con el desarrollo de los circuitos LSI (Large Scale Integration, Integración a gran escala), que contienen miles de transistores en un centímetro cuadrado de silicio (chip), nació la era de la computadora personal. En términos de arquitectura, las computadoras personales (que al principio eran conocidas como microcomputadoras) no eran del todo distintas de las minicomputadoras de la clase PDP-11, pero en términos de precio sin duda eran distintas. Mientras que la minicomputadora hizo posible que un departamento en una compañía o universidad tuviera su propia computadora, el chip microprocesador logró que un individuo tuviera su propia computadora personal.

A principios de la década de 1980, IBM diseñó la IBM PC y buscó software para ejecutarlo en ella. La gente de IBM se puso en contacto con Bill Gates para obtener una licencia de uso de su intérprete de BASIC. También le preguntaron si sabía de un sistema operativo que se ejecutara en la PC. Gates sugirió a IBM que se pusiera en contacto con Digital Research, que en ese entonces era la compañía con dominio mundial en el área de sistemas operativos. Kildall rehusó a reunirse con IBM y envió a uno de sus subordinados, a lo cual se le considera sin duda la peor decisión de negocios de la historia.

Cuando IBM regresó, Gates se había enterado de que un fabricante local de computadoras, Seattle Computer Products, tenía un sistema operativo adecuado conocido como DOS (Disk Operating System; Sistema Operativo en Disco). Se acercó a ellos y les ofreció comprarlo (supuestamente por 75,000 dólares), a lo cual ellos accedieron de buena manera. Después Gates ofreció a IBM un paquete con DOS/BASIC, el cual aceptó. IBM quería ciertas modificaciones, por lo que Gates contrató a la persona que escribió el DOS, Tim Paterson, como empleado de su

recién creada empresa de nombre Microsoft, para que las llevara a cabo. El sistema rediseñado cambió su nombre a MS-DOS (Microsoft Disk Operating System; Sistema Operativo en Disco de Micro- Soft) y rápidamente llegó a dominar el mercado de la IBM PC. Aunque la versión inicial de MS-DOS era bastante primitiva, las versiones siguientes tenían características más avanzadas, incluyendo muchas que se tomaron de UNIX. (Microsoft estaba muy al tanto de UNIX e inclusive vendía una versión de este sistema para microcomputadora, conocida como XENIX, durante los primeros años de la compañía).

CP/M, MS-DOS y otros sistemas operativos para las primeras microcomputadoras se basaban en que los usuarios escribieran los comandos mediante el teclado (Figura 1-6). Con el tiempo esto cambió debido a la investigación realizada por Doug Engelbart en el Stanford Research Institute en la década de 1960. Engelbart inventó la Interfaz Gráfica de Usuario GUI, completa con ventanas, iconos, menús y ratón. Los investigadores en Xerox PARC adoptaron estas ideas y las incorporaron en las máquinas que construyeron. Un día, Steve Jobs, que fue co-inventor de la computadora Apple en su cochera, visitó PARC, vio una GUI y de inmediato se dio cuenta de su valor potencial, algo que la administración de Xerox no hizo.

Posteriormente, Jobs emprendió el proyecto de construir una Apple con una GUI. Este proyecto culminó en Lisa, que era demasiado costosa y fracasó comercialmente. El segundo intento de Jobs, la Apple Macintosh, fue un enorme

Figura. 1-6. Interfaz de MS-DOS.

éxito, no sólo debido a que era mucho más económica que Lisa, sino también porque era amigable para el usuario (user friendly), lo cual significaba que estaba diseñada para los usuarios que no sólo no sabían nada acerca de las computadoras, sino que además no tenían ninguna intención de aprender. En el mundo creativo del diseño gráfico, la fotografía digital profesional y la producción de video digital profesional, las Macintosh son ampliamente utilizadas y sus usuarios son muy entusiastas sobre ellas.

Cuando Microsoft decidió crear un sucesor para el MS-DOS estaba fuertemente influenciado por el éxito de la Macintosh. Produjo un sistema basado en GUI llamado Windows, el cual en un principio se ejecutaba encima del MS-DOS (es decir, era más como un shell que un verdadero sistema operativo). Durante cerca de 10 años, de 1985 a 1995, Windows fue sólo un entorno gráfico encima de MS-DOS. Sin embargo, a partir de 1995 se liberó una versión independiente de Windows, conocida como Windows 95, que incorporaba muchas características de los sistemas operativos y utilizaba el sistema MS-DOS subyacente sólo para iniciar y ejecutar programas de MS-DOS antiguos. En 1998, se liberó una versión ligeramente modificada de este sistema, conocida como Windows 98 (Figura 1-7)

Figura 1-7. Windows 98, el último bastión de los Windows antiguos.

Otro de los sistemas operativos de Microsoft es Windows NT (NT significa Nueva Tecnología), que es compatible con Windows 95 en cierto nivel, pero fue completamente rediseñado en su interior. Microsoft esperaba que la primera versión de NT acabara con MS-DOS y todas las demás versiones de Windows, ya que era un sistema muy superior, pero fracasó. No fue sino hasta Windows NT 4.0 que finalmente empezó a tener éxito, en especial en las redes corporativas. La versión 5 de Windows NT cambió su nombre a Windows 2000 a principios de 1999. Estaba destinada a ser el sucesor de Windows 98 y de Windows NT 4.0. Esto tampoco funcionó como se esperaba, por lo que Microsoft preparó otra versión de Windows 98 conocida como Windows Me (Millennium edition). En el 2001 se liberó una versión ligeramente actualizada de Windows 2000, conocida como Windows XP. Esa versión duró mucho más en el mercado (6 años), reemplazando a casi todas las versiones anteriores de Windows. Después, en enero del 2007 Microsoft liberó el sucesor para Windows XP, conocido como Windows Vista. Tenía una interfaz gráfica nueva, Aero, y muchos programas de usuario nuevos o actualizados. Microsoft espera que sustituya a Windows XP por completo, pero este proceso podría durar casi toda una década.

El otro competidor importante en el mundo de las computadoras personales es UNIX (y todas sus variantes). UNIX es más fuerte en los servidores tanto de redes como empresariales, pero también está cada vez más presente en las computadoras de escritorio, en especial en los países que se desarrollan con rapidez, como India y China. En las computadoras basadas en Pentium, Linux se está convirtiendo en una alternativa popular para Windows entre los estudiantes y cada vez más usuarios corporativos. Muchos usuarios de UNIX, en especial los programadores experimentados, prefieren una interfaz de línea de comandos a una GUI, por lo que casi todos los sistemas UNIX presentan un sistema de ventanas llamado X Window System (también conocido como X11), producido en el M.I.T. Este sistema se encarga de la administración básica de las ventanas y permite a los usuarios crear, eliminar, desplazar y cambiar el tamaño de las ventanas mediante el uso de un ratón. Con frecuencia hay disponible una GUI completa, como Gnome o KDE, para

ejecutarse encima de X11, lo cual proporciona a UNIX una apariencia parecida a la Macintosh o a Microsoft Windows, para aquellos usuarios de UNIX que desean algo así (Figura 1-7)

Microsoft sigue a la delantera, aunque ha sufrido varios tropiezos que acercan a sus competidores. Durante estos años ha sacado al público los siguientes sistemas operativos: Windows 2000, Windows ME, Windows XP, Windows Vista,Windows 7 y el más reciente Windows 8. Cada uno con diferentes versiones dirigidas a algún público en particular ya sea para oficina, empresas medianas y grandes, servidores de varias índoles y para el hogar y el estudio. Además también poseen actualizaciones a través de Windows Update ya sea para corregir fallos, mejorar diferentes procesos y mantener la seguridad. Aunque Microsoft cometió un error con Windows Vista, ya que este sistema tenía altos requerimientos de hardware y solo funcionaba mejor que su antecesor (“Windows XP”) en algunas máquinas muy potentes. Una de las ramas en que Windows más avanzo es la interfaz.

El futuro apunta a sistemas operativos en la nube, llamadosWeb OS que actualmente están en desarrollo y donde no serequiere instalar software, solo

Figura 1-7. X11 – X Window System.

tenemos que escoger el programa (“o aplicación web”) adecuado para realizar lo que queramos hacer, mediante conexión a internet y un navegador recibiendo la información o las solicitudes que nosotros queramos ya que el procesamiento estaría del otro lado, es decir del lado del servidor. Ejemplos de estos sistemas son EyeOs, Icloud y Woos. Otra de las innovaciones que se espera es la forma como el usuario interactúa con el sistema operativo dejando atrás periféricos como el teclado y el mouse, para dar paso a lo táctil, reconocimiento de voz y movimiento (“Cuerpo, manos, ojos”)

Resumen: Los Sistemas Operativos, al igual que el Hardware de los computadores, han sufrido una serie de cambios revolucionarios llamados generaciones. En el caso del Hardware, las generaciones han sido marcadas por grandes avances en los componentes utilizados, pasando de válvulas (primera generación) a transistores (segunda generación), a circuitos integrados (tercera generación), a circuitos integrados de gran y muy gran escala (cuarta generación). Cada generación

Sucesiva de hardware ha ido acompañada de reducciones substanciales en los costos, tamaño, emisión de calor y consumo de energía, y por incrementos notables en velocidad y capacidad. Generación Cero (década de 1940) Los primeros sistemas computacionales no poseían sistemas operativos. Los usuarios tenían completo acceso al lenguaje de la máquina.

Todas las instrucciones eran codificadas a mano. Primera Generación (década de 1950) Los sistemas operativos de los años cincuenta fueron diseñados para hacer más fluida la transición entre trabajos. Antes de que los sistemas fueran diseñados, se perdía un tiempo considerable entre la terminación de un trabajo y el inicio del siguiente. Este fue el comienzo de los sistemas de procesamiento por lotes, donde los trabajos se reunían por grupos o lotes. Cuando el trabajo estaba en ejecución, este tenía control total de la máquina. Al terminar cada trabajo, el control era devuelto al sistema operativo, el cual limpiaba y leía e iniciaba el trabajo siguiente. Segunda Generación (a mitad de la década de 1960) La característica de los sistemas operativos fue el desarrollo de los sistemas compartidos con multiprogramación, y los principios del multiprocesamiento.

En los sistemas de multiprogramación, varios programas de usuario se encuentran al mismo tiempo en el almacenamiento principal, y el procesador se cambia rápidamente de un trabajo a otro. En los sistemas de multiprocesamiento se utilizan varios procesadores en un solo sistema computacional, con la finalidad de incrementar el poder de procesamiento de la máquina. Tercera Generación (mitad de década 1960 a mitad década de 1970) Se inicia en 1964, con la introducción de la familia de computadores Sistema/360 de IBM. Los computadores de esta generación fueron diseñados como sistemas para usos generales. Casi siempre eran sistemas grandes, voluminosos, con el propósito de serlo todo para toda la gente. Eran sistemas de modos múltiples, algunos de ellos soportaban simultáneamente procesos por lotes, tiempo compartido, procesamiento de tiempo real y multiprocesamiento. Eran grandes y costosos, nunca antes se había construido algo similar, y muchos de los esfuerzos de desarrollo terminaron muy por arriba del presupuesto y mucho después de lo que el planificador marcaba como fecha de terminación. Cuarta Generación (mitad de década de 1970 en adelante)

Los sistemas de la cuarta generación constituyen el estado actual de la tecnología. Muchos diseñadores y usuarios se sienten aun incómodos, después de sus experiencias con los sistemas operativos de la tercera generación. Con la ampliación del uso de redes de computadores y del procesamiento en línea los usuarios obtienen acceso a computadores alejados geográficamente a través de varios tipos de terminales. Los sistemas de seguridad se han incrementado mucho ahora que la información pasa a través de varios tipos vulnerables de líneas de comunicación. La clave de cifrado está recibiendo mucha atención; han sido necesarios codificar los datos personales o de gran intimidad para que; aun si los datos son expuestos, no sean de utilidad a nadie más que a los receptores adecuados.

Referencias

Aldea, M. (2015). Administración de Sistemas Operativos (1era edición). España. Educalia.

Deitel, H. (2010). Sistemas Operativos (2da edición). México. Pearson.

Flynn, M. (2010). Sistemas Operativos (6ta edición). España. Cengage Learning.

Silberschatz, A. (2010). Fundamentos de Sistemas Operativos (1era edición). España. Mc. Graw Hill.

Tanenbaum, A. (2009). Sistemas Operativos Modernos (1era edición). México.

Prentice Hall.

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.