Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Operativos
Sistemas Operativos
Alumno:
Docente:
Los hay de todo tipo, desde muy simples hasta terriblemente complejos, y entre más
casos de uso hay para el cómputo en la vida diaria, más variedad habrá en ellos.
Metas:
Tareas principales:
AÑOS 40
A finales de los años 1940, con lo que podríamos llamar la aparición de la primera
generación de computadoras, se accedía directamente a la consola de la computadora
desde la cual se actuaba sobre una serie de micro interruptores que permitían introducir
directamente el programa en la memoria de la computadora (en realidad al existir tan
pocas computadoras todos podrían considerarse prototipos y cada constructor lo hacía
sin seguir ningún criterio predeterminado). Por aquel entonces no existían los sistemas
operativos, y los programadores debían interactuar con el hardware del computador sin
ayuda externa. Esto hacía que el tiempo de preparación para realizar una tarea fuera
considerable. Además, para poder utilizar la computadora debía hacerse por turnos. Para
ello, en muchas instalaciones, se rellenaba un formulario de reserva en el que se
indicaba el tiempo que el programador necesitaba para realizar su trabajo. En aquel
entonces las computadoras eran máquinas muy costosas lo que hacía que estuvieran
muy solicitadas y que sólo pudieran utilizarse en periodos breves de tiempo. Todo se
hacía en lenguaje de máquina.
AÑOS 50 (Sistema Batch)
Proceso en serie
Monitor residente
Como solución para optimizar el tiempo de montaje surgió la idea de agrupar los
trabajos en lotes, en una misma cinta o conjunto de tarjetas, de forma que se ejecutaran
uno a continuación de otro sin perder apenas tiempo en la transición.
Las primeras máquinas eran muy caras y, por tanto, era importante maximizar la
utilización de las mismas. El tiempo desperdiciado por la planificación y la preparación
era inaceptable.
Para mejorar el uso, se desarrolló el concepto de sistema operativo por lotes (batch). El
primer sistema operativo por lotes fue desarrollado a mediados de los 50 por la General
Motors para usar en un IBM 701 [WEIZ81]. Este concepto fue refinado posteriormente
e implementado en un IBM 704 por una serie de clientes de IBM. A principios de los
60, un conjunto de constructores ya había desarrollado sistemas operativos por lotes
para sus computadores. IBSYS, el sistema operativo de IBM para las computadoras
7090/7094, es particularmente notable por su amplia influencia en otros sistemas.
La idea central que está detrás del esquema sencillo de proceso por lotes es el uso de un
elemento de software conocido como monitor. Con el uso de esta clase de sistema
operativo, los usuarios ya no tenían acceso directo a la máquina. En su lugar, el usuario
debía entregar los trabajos en tarjetas o en cinta al operador del computador, quien
agrupaba secuencialmente los trabajos por lotes y ubicaba los lotes enteros en un
dispositivo de entrada para su empleo por parte del monitor. Cada programa se
construía de modo tal que volviera al monitor al terminar su procesamiento y, en ese
momento, el monitor comenzaba a cargar automáticamente el siguiente programa.
Para entender cómo funciona este esquema, se va a ver desde dos puntos de vista: el del
monitor y el del procesador. Desde el punto de vista del monitor, él es quien controla la
secuencia de sucesos. Para que esto sea posible, gran parte del monitor debe estar
siempre en memoria principal y disponible para su ejecución (figura 2.3). Esta parte del
monitor se conoce como monitor residente. El resto del monitor consta de utilidades y
funciones comunes que se cargan como subrutinas en los programas de los usuarios al
comienzo de cualquier trabajo que las necesite. El monitor lee los trabajos uno a uno del
dispositivo de entrada (normalmente, un lector de tarjetas o una unidad de cinta
magnética). A medida que lo lee, el trabajo actual se ubica en la zona del programa de
usuario y el control pasa al trabajo. Cuando el trabajo termina, se devuelve el control al
monitor, quien lee inmediatamente un nuevo trabajo. Los resultados de cada trabajo se
imprimen y entregan al usuario.
Considérese ahora esta secuencia desde el punto de vista del procesador. En un cierto
momento, el procesador estará ejecutando instrucciones de la zona de memoria principal
que contiene al monitor. Estas instrucciones hacen que el trabajo siguiente sea leído en
otra zona de la memoria principal. Una vez que el trabajo se ha leído, el procesador
encuentra en el monitor una instrucción de desvío que ordena al procesador continuar la
ejecución en el inicio del programa de usuario. El procesador ejecuta entonces las
instrucciones del programa de usuario hasta que encuentre una condición de finalización
o de error. Cualquiera de estos dos sucesos provoca que el procesador vaya a por la
instrucción siguiente del programa monitor. De este modo, la frase "el control se le pasa
al trabajo" quiere decir simplemente que el procesador pasa a leer y ejecutar
instrucciones del programa de usuario, mientras que la frase "el control vuelve al
monitor" quiere decir que el procesador pasa ahora a leer y ejecutar las instrucciones del
programa monitor.
Para ejecutar el trabajo, el monitor lee la tarjeta $FTN y carga el compilador adecuado
desde el dispositivo de almacenamiento masivo (generalmente una cinta). El compilador
traduce el programa de usuario en código objeto, que se almacena en memoria o en el
dispositivo de almacenamiento. Si se carga en memoria, la operación es conocida como
"compilar, cargar y arrancar" (compile, load, and go). Si se almacena en cinta, entonces
se requiere la tarjeta $LOAD. Esta tarjeta es leída por el monitor, quien retoma el
control después de la operación de compilación. El monitor llama al cargador, que carga
el programa objeto en memoria en el lugar del compilador y le transfiere el control. De
esta manera, un segmento grande de memoria se puede compartir entre diferentes
subsistemas, aunque en cada momento sólo uno de ellos tiene que estar presente y
ejecutándose.
Naturalmente, se puede construir un sistema operativo sin estas características, pero los
fabricantes de computadores comprobaron rápidamente que los resultados eran caóticos
y, por tanto, incluso los sistemas operativos por lotes más primitivos ya disponían de
estas características en el hardware. Por otro lado, hay que decir que el sistema
operativo más utilizado del mundo, el PC-DOS/MS-DOS, no dispone de protección de
memoria ni de instrucciones privilegiadas de E/S. Sin embargo, como este sistema está
destinado a computadores personales de un solo usuario, los problemas que se pueden
originar son menos graves.
Almacenamiento temporal
La década de 1960
A lo largo de su ejecución, un programa normalmente pasa por etapas con muy distintas
características: durante un ciclo fuertemente dedicado al cálculo numérico, el sistema
opera limitado por el CPU (CPU-bound), mientras que al leer o escribir resultados a
medios externos (incluso mediante spools) el límite es impuesto por los dispositivos,
esto es, opera limitado por entrada-salida (I-O bound). La programación multitareas o
los sistemas multiprogramados buscaban maximizar el tiempo de uso efectivo del
procesador ejecutando varios procesos al mismo tiempo. El hardware requerido cambió
fuertemente. Si bien se esperaba que cada usuario fuera responsable con el uso de
recursos, resultó necesario que apareciera la infraestructura de protección de recursos:
un proceso no debe sobrescribir el espacio de memoria de otro (ni el código, ni los
datos), mucho menos el espacio del monitor. Esta protección se encuentra en la Unidad
de Manejo de Memoria (MMU), presente en todas las computadoras de uso genérico
desde los años noventa. Ciertos dispositivos requieren bloqueo para ofrecer acceso
exclusivo/único: cintas e impresoras, por ejemplo, son de acceso estrictamente
secuencial, y si dos usuarios intentaran usarlas al mismo tiempo, el resultado para
ambos se corrompería. Para estos dispositivos, el sistema debe implementar otros spools
y mecanismos de bloqueo.
Sistemas de tiempo compartido El modo de interactuar con las computadoras se
modificó drásticamente durante los años sesenta, al extenderse la multitarea para
convertirse en sistemas interactivos y multiusuarios, en buena medida diferenciados de
los anteriores por la aparición de las terminales (primero teletipos seriales,
posteriormente equipos con una pantalla completa como se conocen hasta hoy). En
primer término, la tarea de programación y depuración del código se simplificó
fuertemente al poder hacer el programador directamente cambios y someter el programa
a la ejecución inmediata. En segundo término, la computadora nunca más estaría
simplemente esperando a que esté listo un programa: mientras un programador editaba o
compilaba su programa, la computadora seguía calculando lo que otros procesos
requirieran. Un cambio fundamental entre el modelo de multiprogramación y de tiempo
compartido es el tipo de control sobre la multitarea (se verá en detalle en el capítulo 3).
Multitarea cooperativa o no apropiativa (Cooperative multitasking). La implementaron
los sistemas multiprogramados: cada proceso tenía control del CPU hasta que éste hacía
una llamada al sistema (o indicara su disposición a cooperar por medio de la llamada
yield: ceder el paso). Un cálculo largo no era interrumpido por el sistema operativo, en
consecuencia, un error de programador podía congelar la computadora completa.
Multitarea preventiva o apropiativa (Preemptive multitasking). En los sistemas de
tiempo compartido, el reloj del sistema interrumpe periódicamente a los diversos
procesos, transfiriendo forzosamente el control nuevamente al sistema operativo. Éste
puede entonces elegir otro proceso para continuar la ejecución. Además, fueron
naciendo de forma natural y paulatina las abstracciones que se conocen hoy en día,
como los conceptos de archivos y directorios, y el có- digo necesario para emplearlos
iba siendo enviado a las bibliotecas de sistema y, cada vez más (por su centralidad)
hacia el núcleo mismo del, ahora sí, sistema operativo. Un cambio importante entre los
sistemas multiprogramados y de tiempo compartido es que la velocidad del cambio
entre una tarea y otra es mucho más rápido: si bien en un sistema multiprogramado un
cambio de contexto podía producirse sólo cuando la tarea cambiaba de un modo de
ejecución a otro, en un sistema interactivo, para dar la ilusión de uso exclusivo de la
computadora, el hardware emitía periódicamente al sistema operativo interrupciones
(señales) que le indicaban que cambie el proceso activo (como ahora se le denomina a
una instancia de un programa en ejecución). Diferentes tipos de proceso pueden tener
distinto nivel de importancia —ya sea porque son más relevantes para el
funcionamiento de la computadora misma (procesos de sistema), porque tienen mayor
carga de interactividad (por la experiencia del usuario) o por diversas categorías de
usuarios (sistemas con contabilidad por tipo de atención). Esto requiere la
implementación de diversas prioridades para cada uno de éstos.
Tiempo Real
Estos sistemas se usan en entornos donde se deben aceptar y procesar en tiempos muy
breves un gran número de sucesos, en su mayoría externos al ordenador. Si el sistema
no respeta las restricciones de tiempo en las que las operaciones deben entregar su
resultado se dice que ha fallado. El tiempo de respuesta a su vez debe servir para
resolver el problema o hecho planteado. El procesamiento de archivos se hace de una
forma continua, pues se procesa el archivo antes de que, entre el siguiente, sus primeros
usos fueron y siguen siendo en telecomunicaciones.
Multiprocesador
Además del Atlas Supervisor y el OS/360, los sesenta marcaron el inicio de UNIX, a
mediados de los 60 aparece Multics, sistema operativo multiusuario – multitarea
desarrollado por los laboratorios Bell de AT&T y programado en PL/1 uno de los pocos
SO desarrollados en un lenguaje de alto nivel en aquel tiempo, luego del fracaso del
proyecto UNIX comienza a desarrollarse a partir de este a finales de la década.
AÑOS 70
Para solventar los problemas antes comentados, se realizó un costosísimo trabajo para
interponer una amplia capa de software entre el usuario y la máquina, de forma que el
primero no tuviese que conocer ningún detalle de la circuitería.
Fue uno de los primeros sistemas operativos de tiempo compartido, que implementó un
solo nivel de almacenamiento para el acceso a los datos, desechando la clara distinción
entre los ficheros y los procesos en memoria, y uno de los primeros sistemas
multiprocesador.
* MVS (Multiple Virtual Storage): Fue el sistema operativo más usado en los modelos
de mainframes -ordenadores grandes, potentes y caros usados principalmente por
grandes compañías para el procesamiento de grandes cantidades de datos- System/370 y
System/390 de IBM, desarrollado también por IBM y lanzado al mercado por primera
vez en 1974. Como características destacables, permitía la ejecución de múltiples tareas,
además de que introdujo el concepto de memoria virtual y finalmente añadió la
capacidad de que cada programa tuviera su propio espacio de direccionamiento de
memoria, de ahí su nombre.
CCP (Comand Control Processor): Intérprete de comandos que permitía
introducir los mandatos con sus parámetros separados por espacios. Además, los
traducía a instrucciones de alto nivel destinadas a BDOS.
BDOS (Basic Disk Operating System): Traductor de las instrucciones en
llamadas a la BIOS.
El hecho de que, años después, IBM eligiera para sus PCs a MS-DOS supuso su mayor
fracaso, por lo que acabó desapareciendo.
AÑOS 80
Con la creación de los circuitos LSI -integración a gran escala-, chips que contenían
miles de transistores en un centímetro cuadrado de silicio, empezó el auge de los
ordenadores personales. En éstos se dejó un poco de lado el rendimiento y se buscó más
que el sistema operativo fuera amigable, surgiendo menús, e interfaces gráficas. Esto
reducía la rapidez de las aplicaciones, pero se volvían más prácticos y simples para los
usuarios. En esta época, siguieron utilizándose lenguajes ya existentes, como Smalltalk
o C, y nacieron otros nuevos, de los cuales se podrían destacar: C++ y Eiffel dentro del
paradigma de la orientación a objetos, y Haskell y Miranda en el campo de la
programación declarativa. Un avance importante que se estableció a mediados de la
década de 1980 fue el desarrollo de redes de computadoras personales que corrían
sistemas operativos en red y sistemas operativos distribuidos. En esta escena, dos
sistemas operativos eran los mayoritarios: MS-DOS, escrito por Microsoft para IBM PC
y otras computadoras que utilizaban la CPU Intel 8088 y sus sucesores, y UNIX, que
dominaba en los ordenadores personales que hacían uso del Motorola 68000.
Apple Macintosh
MS-DOS
En 1981 Microsoft compró un sistema operativo llamado QDOS que, tras realizar unas
pocas modificaciones, se convirtió en la primera versión de MS-DOS (MicroSoft Disk
Operating System). A partir de aquí se sucedieron una serie de cambios hasta llegar a la
versión 7.1, a partir de la cual MS-DOS dejó de existir como tal y se convirtió en una
parte integrada del sistema operativo Windows.
Microsoft Windows
Familia de sistemas operativos propietarios desarrollados por la empresa de software
Microsoft Corporation, fundada por Bill Gates y Paul Allen. Todos ellos tienen en
común el estar basados en una interfaz gráfica de usuario basada en el paradigma de
ventanas, de ahí su nombre en inglés. Las versiones de Windows que han aparecido
hasta el momento se basan en dos líneas separadas de desarrollo que finalmente
convergen en una sola con la llegada de Windows XP. La primera de ellas conformaba
la apariencia de un sistema operativo, aunque realmente se ejecutaba sobre MS-DOS.
AÑOS 90
GNU/Linux
En 1991 aparece la primer versión del núcleo de Linux. Creado por Linus Torvalds y
un sinfín de colaboradores a través de Internet. Este sistema se basa en Unix, un sistema
que en principio trabajaba en modo comandos, estilo MS-DOS. Hoy en día dispone de
Ventanas, gracias a un servidor grafico y a gestores de ventanas como KDE, GNOME
entre muchos. Recientemente GNU/Linux dispone de un aplicativo que convierte las
ventanas en un entorno 3D como por ejemplo Beryl. Lo que permite utilizar linux de
una forma muy visual y atractiva.
BeOS
Solaris es un sistema operativo de tipo Unix desarrollado desde 1992 inicialmente por
Sun Microsystems y actualmente por Oracle Corporation como sucesor de SunOS. Es
un sistema certificado oficialmente como versión de Unix. Funciona en arquitecturas
SPARC y x86 para servidores y estaciones de trabajo.
ReactOS
FreeDOS
FreeDOS es un proyecto que aspira a crear un sistema operativo libre que sea totalmente
compatible con las aplicaciones y los controladores de MS-DOS.
La década de 2000
SymbOS
SymbOS es un claro ejemplo de software optimizado, de tal manera que con un mínimo
hardware se obtienen prestaciones similares a otros grandes sistemas operativos
actuales. Esto lo convierte en el antagonista de los modernos sistemas operativos, que
derrochan la mayor parte de los recursos apoyándose en la alta potencia del hardware
actual.
MorphOS
Darwin
Darwin es el sistema que subyace en Mac OS X, cuya primera versión final salió en el
año 2001 para funcionar en computadoras Macintosh.
MAC OS
La primera versión del sistema fue Mac OS X Server 1.0 en 1999, y en cuanto al
escritorio, fue Mac OS X v10.0 «Cheetah» (publicada el 24 de marzo de 2001).
OpenSolaris
La década de 2017
IllumOS
Se trata del código base a partir del cual cualquiera podrá crear su propia distribución de
software basada en el sistema operativo OpenSolaris. Pero Illumos no es una
distribución, ni una bifurcación (fork), al menos por el momento, en la medida que no
pretende separarse del tronco principal, sino un derivado de la "consolidación" OS/Net
(más conocida como ON), que consiste básicamente en el código fuente del kernel
(SunOS), los drivers, los servicios de red, las bibliotecas del sistema y los comandos
básicos del sistema operativo.
OpenIndiana
Las estructuras internas de los sistemas operativos pueden ser muy diferentes, ya que se
deben tener en cuenta las metas de los usuarios (fácil uso, confiable, rápido, etc.) y las
del sistema (fácil de diseñar, implementar y mantener, eficiente, etc.). Veremos 3
posibles diseños del sistema.
• Sistema Monolítico
Estos sistemas no tienen una estructura definida, sino que son escritos como una
colección de procedimientos donde cualquier procedimiento puede invocar a otro.
Ejemplos de estos sistemas pueden ser MS-DOS o Linux (aunque incluye algo de
capas). Es importante tener en cuenta que ningún sistema es puramente de un tipo.
• Sistema en capas
El diseño se organiza en una jerarquía de capas, donde los servicios que brinda una capa
son consumidos solamente por la capa superior. La capa 0 es del Hardware y la N es la
de los procesos de Usuario.
Estos sistemas tienen como ventaja que son
modulares y la verificación se puede hacer a
cada capa por separado (son más
mantenibles). Sin embargo, el diseño es muy
costoso y es menos eficiente que el sistema
monolítico ya que pierde tiempo pasando por
cada capa.
La idea consiste en tener un núcleo que brinde los servicios mínimos de manejo de
procesos, memoria y que provea la comunicación entre procesos. Todos los restantes
servicios se construyen como procesos separados del micronúcleo, que ejecutan en
modo usuario. Estos sistemas tienen como ventaja un diseño simple y funcional, que
aumenta la portabilidad y la escalabilidad. Para agregar un nuevo servicio no es
necesario modificar el núcleo, y es más seguro ya que los servicios corren en modo
usuario.