Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Operativos - Mod1 V2 - 3 PDF
Sistemas Operativos - Mod1 V2 - 3 PDF
Esta asignatura está organizada en tres módulos funcionales, en los cuales se verán
diferentes conceptos desde una breve historia de los SO y los aspectos de instalación y utilización.
Después se hará un repaso de las diferentes posibilidades de que existen hoy en día y de los concepto
avanzados de las estructuras internas, módulos que lo forman, cómo se ejecutan las aplicaciones
sobre ellos, cómo se virtualizan los sistemas operativos y cuáles son las tendencias más importantes
para los desarrolladores de aplicaciones. Todo el trabajo está encaminado para que el estudioso
pueda realizar diferentes experiencias y analizar cuáles son los conceptos necesarios, aplicarlos y
experimentar integrándolos con los aspectos prácticos para desarrollar las competencias propuestas
por el curso.
En el módulo uno se realizará una breve introducción a los primeros sistemas operativos
que han impulsado la utilización de dispositivos digitales hasta los actuales (Unix-Linux-Android,
Windows y MacOS-iOS, básicamente), mostrando los diferentes aspectos claves, estructuras e
interfaces de programación (API) que presentan y analizando con cierto detalle la estructura interna
de sus núcleos (kernel).
En el módulo dos se mostrarán las principales tendencias de los sistemas operativos y cómo
estos se han adaptado a diferentes entornos: industriales, sistemas críticos, electrónica de consumo,
oficina, servidores, etc. Asimismo, se presentarán cuáles son las tendencias actuales haciendo
experimentos con algunos sistemas operativos en cloud y virtualizados.
Ideograma
Sistemas Windows
Tipos Evolución
Operativos Mac OS X
Arquitectura
Contenido
1. ¿Qué es el Sistema Operativo (SO)? .................................................................................................. 5
2. Breve historia de los SO ...................................................................................................................... 5
3. Arquitectura de un Sistema Operativo (SO) ................................................................................... 27
3.1. Estructura monolítica ................................................................................................................ 31
3.2. Estructura jerárquica o por capas ............................................................................................ 33
3.3. Estructura de máquina virtual .................................................................................................. 35
3.4. Estructura por funciones........................................................................................................... 36
3.5. Micronúcleos, nanonúcleos y exonúcleos............................................................................... 37
4. Caso de uso.......................................................................................................................................... 39
4.1. Carga del sistema operativo e inicio (login).............................................................................. 39
5. Glosario ................................................................................................................................................ 46
6. Bibliografía ........................................................................................................................................... 47
1. ¿Qué es el Sistema Operativo (SO)?
Uno de los primeros conceptos que se deben definir es qué es un sistema operativo y para qué
sirve un sistema operativo. Existen muchas definiciones formales, pero se puede concluir que un
Sistema Operativo (SO) es un entorno software (programa) que se ejecuta en un dispositivo
electrónico, con o sin interacción con el usuario, para gestionar y administrar los recursos que
dispone dicho dispositivo.
El sistema operativo permite, por un lado, presentar un interfaz de interacción a los diferentes
usuarios aceptando órdenes y realizando el trabajo correspondiente. Esta visión se denomina ‘visión
centrada en el usuario’ y está orientada a diferentes tipos de usuario; por ejemplo, una interfaz
gráfica para los usuarios no expertos, una de texto para administradores o programadores, una de
librerías y programación para las aplicaciones que se ejecutarán sobre este sistema operativo, una
de entrada/salida para los diferentes elementos que se quieran interconectar con él, etc. Por otro a
lado, el sistema operativo, en su misión de gestión y administración de la infraestructura hardware,
se puede considerar, en una ‘visión como gestor de recursos’, como el artífice de extraer las mayores
prestaciones al hardware subyacente con la menor utilización de recursos y con el menor gasto de
energía (esta premisa es muy importante hoy en día, sobre todo en los dispositivos móviles).
Es importante aclarar que estas dos visiones son complementarias y los programadores de
sistemas operativos se deben esforzar para que en su conjunto presenten unas prestaciones óptimas
y eficientes, integradas bajo un mismo objetivo evitando, por ejemplo, que aspectos funcionales de
una vayan en detrimento de la otra o viceversa.
Se puede considerar que esta evolución ha permitido transformar la sociedad actual en la cual
las TIC (Tecnologías de la Información y la Comunicación) cumplen un papel predominante y las
personas ya no conciben la vida sin Internet o conexiones móviles, instantáneas y ubicuas. El futuro
depara un incremento de esta visión con la nueva ola de interacción e interconexión que llegará con
la implantación del paradigma llamado Internet de las Cosas (Internet of Things, IoT). Esta nueva
revolución está basada en la interconexión de objetos habituales a Internet, lo cual permitiría
gestionar extraer, procesar, aprender y tomar decisiones sobre grandes conjuntos de datos que
podrían ser desde los zapatos, a la ropa, alimentos, coches o electrodomésticos o cualquier artículo
o elemento que, conectado a Internet, pudiera ofrecer/recibir de forma fácil e inmediata
información y que sirviera, básicamente, en forma individual o agregada, para mejorar la calidad de
vida de las personas, reducir costos/mejorar eficiencias u ofrecer funcionalidades/información que
fueran objeto de negocio o de interés para las personas/empresas/instituciones.
En un principio, alrededor de 1940, los sistemas informáticos eran los sistemas electrónicos
digitales que estaban construidos por tecnólogos expertos (ingenieros electrónicos y físicos,
básicamente), pero que carecían de sistema operativo. Es decir, estos sistemas complejos y
específicos se diseñaban con las instrucciones que debían ejecutar y su control y datos eran
introducidos por un conjunto de interruptores que indicaban las operaciones de control. Este
procedimiento rudimentario, tedioso y arduo, llamado codificación en lenguaje máquina, permitía
ejecutar un programa y realizar una serie de instrucciones con sus correspondientes datos en un
hardware que utilizaba válvulas electrónicas como dispositivos electrónicos y donde todos los
componentes eran discretos y ocupaban un gran espacio físico, consumían gran cantidad de energía
y tenían un fiabilidad baja, ya que las válvulas eran de vida muy reducida. Esta es llamada la primera
generación de hardware.
La propuesta de esta arquitectura es una solución a los problemas que presentaban las
arquitecturas del momento, ya que al estar integrado el programa dentro de la computadora, una
actividad tan necesaria como cambiar el programa a ejecutar significaba reestructurar las conexiones
internas, las diferentes partes o, en algunos casos, rediseñar la propia máquina, motivo por el cual
solo se ‘reprogramaba’ cuando no había otra alternativa, siendo un proceso tedioso y complejo que
incluía una nueva definición de los módulos (y la electrónica) a partir de diagramas en papel, la
ingeniería correspondiente (interconexión de las partes y adecuación) y verificación de que todo lo
diseñado en el papel funcionaba. ¡Existen registros que tardaban tres semanas en reprogramarse y
poner un nuevo programa en funcionamiento de ENIAC!
La arquitectura Von Neumann supuso un avance notable, ya que los programas se almacenaban
en memoria principal y luego solo se debían cambiar un conjunto de interruptores para seleccionar
uno u otro programa según la necesidad.
El monitor residente evolucionó con gran aceptación por parte de los usuarios y gestores,
ya que optimizaba notablemente el tiempo de preparación entre usuarios y permitía fácilmente
cargar programas/datos a memoria utilizando como dispositivos de E/S cinta o de tarjetas
perforadas, ponerlos a ejecutar y salvar los resultados de la ejecución (generalmente, en una
impresora).
Con la irrupción a mediados de la década del 50 de la segunda generación de computadores,
ya basada en electrónica de estado sólido (silicio), se pudo obtener más fiabilidad de los sistemas
informáticos, reducir su costo y tamaño y poder ofrecerlo a clientes no tecnólogos estableciendo
una separación entre quien construía la máquina y quien la utilizaba, generando una posibilidad de
negocio y, por lo tanto, un instrumento con el cual dejaba de ser prototipos de laboratorio y solo
para personas expertas. Esto propició que grandes empresas e instituciones gubernamentales se
sintieran interesadas, formando su personal y alquilando o comprando uno de estos computadores.
Uno de los problemas que se presentaban en ese momento era la eficiencia, ya que la carga/descarga
de programas era muy alta en relación a la ejecución y la mayor parte del tiempo el computador,
que tenían costos elevados, estaba ocioso.
Eso motivó a que las investigaciones se dirigieran a solucionar este problema y llevaron a la
empresa General Motors, en 1955, a diseñar un programa de administración para la arquitectura
IBM701, llamado GM-NAA-I/O1. Este fue considerado como el primer sistema operativo, aunque
otros consideran que el primero fue desarrollado y diseñado por el Massachusetts Institute of
Technology (MIT), llamado MIT's Tape Director Operating System (1954), que se ejecutaba en
un computador Univac-1103 (ver lecturas complementarias) y que cumplía objetivos similares2.
Para automatizar el trabajo y rentabilizar las compras de estos costosos computadores, los
primeros sistemas operativos trabajaban ‘por lotes’ (llamado, en inglés, procesamiento batch) para
ordenar todos los trabajos similares y reducir el tiempo que se requería en la preparación y ejecución
de los programas, es decir, si se debía compilar un programa se preparaban todos los trabajos de
compilación juntos y se aprovechaba a hacerlos todos de una tirada para no tener que cargar y
descargar el software del compilador desde la memoria y solo leer todos los datos de entrada (desde
tarjetas perforadas o desde cintas), generando la salida de todas las ejecuciones en el dispositivo
correspondiente (lo habitual era una impresora o también podían ser cintas). Ejemplos de estos
sistemas informáticos eran los IBM serie 7000, ya con transistores (que reemplazaron la serie 700
que eran de válvulas) que incluían como operativo el IBM-FMS (Fortran Monitor System) y Share-
OS (conocido como SOS y creado en 1959 como una mejora del GM-NAA-I/O)3.
En 1962, este sistema operativo fue discontinuado a favor de IBSYS (basado en sus
predecesores -FMS y Share- e incompatible con estos, por lo cual solo se vendía con las nuevas
unidades en 1960) y diseñado para aprovechar todas las funcionalidades de las nuevas (y muy caras)
IBM 7090-94. IBSYS estaba compuesto por un monitor residente básico que leía las tarjetas de
control existente entre las tarjetas de datos (que identificaba por el signo $ en la primera columna
de la tarjeta) y donde se especificaba cuál programa se debía ejecutar para la siguiente secuencia de
tarjetas de datos. Un aspecto importante que introdujo el 7090 fue que ya no era necesario utilizar
lectoras mecánicas de tarjetas (muy lentas), sino que estas previamente se volcaban a una cinta
(mucho más rápida) y luego el 7090 las leía/escribía en cintas, reduciendo notablemente el tiempo
http://web.archive.org/web/20070928190200/http://www.piercefuller.com/library/share.html?id=share
de E/S (representando también un negocio para IBM que no solo vendía/alquilaba el computador,
sino varias lectoras adicionales de tarjetas/cintas para acelerar el trabajo previo de pasar las tarjetas
a cintas o pasar la salida de los programas de cinta a impresora). Este tipo de procesamiento se
conoció como E/S o procesamiento offline.
IBM desarrolló en esta década (1960) diferentes variantes del OS/360 que, junto con una
nueva línea de SO, llamado TimeSharing Operating System TSS/360, se adecuaba a las diferentes
máquinas y necesidades de negocio. Entre ellos se pueden mencionar, además del TSS/360, el
BOS/360 (Basic Operating System, pensado para las IBM360 pequeñas con 8 kB de memoria),
TOS/360 (Tape Operating System, para máquinas de por lo menos 16k bytes de memoria) y
finalmente DOS/360 (Disk Operating System), primero en utilizar la tecnología de discos
magnéticos para almacenar el propio sistema operativo y el código/datos de las tareas. El DOS/360
evolucionó al DOS/VS (1972) y fue el primero en incluir soporte de memoria virtual. Las técnicas
de memoria virtual permitían que una tarea se pudiera ejecutar sin estar totalmente su código y
datos ubicados en la memoria principal, sino en un dispositivo secundario (generalmente, un disco
llamado unidad de swap) y cargar el código y los datos que le eran necesarios en tiempo de ejecución.
Obviamente, esto necesitaba una memoria de gran tamaño y un soporte hardware importante para
permitir almacenar las tablas de páginas, forma en que se dividía la memoria, algo que ya incluían
las máquinas de la época5.
Otros sistemas operativos relevantes de esta década para ordenadores de la 3ª generación (todos
en base a circuitos integrados) fueron:
- Pick Operating System (1965): soportaba tiempo compartido y paginación bajo demanda,
técnica mediante la cual un programa se comenzaba a ejecutar sin tener nada cargado en
memoria principal e iba solicitando la carga del código y los datos que necesitaba a través
del soporte de memoria virtual, y el hardware correspondiente con el consiguiente ahorro de
memoria principal. Estaba diseñado específicamente para cómputo de
negocio/transacciones y existen algunas versiones evolucionadas que todavía se pueden
ejecutar en máquinas actuales (Sisk et al., 1985).
- Michigan Terminal System (MTS) (1967)7: que era un time-sharing computer operating system
desarrollado en la Universidad de Michingan para un IBM S/360-67, pero compatible con
diversos computadores de la época. Se mantuvo en funcionamiento y con soporte durante
más de 30 años (1967 a 1999).
- WAITS (1967): acrónimo no oficial de West-coast Alternative to ITS. Fue una rama de
diseño derivada, aunque con grandes diferencias, del sistema operativo de DEC MOS
(Digital Equipment Corporation's Monitor Operating System). WAITS fue renombrado
posteriormente como TOPS-10 para la PDP-6/10 y utilizado por Stanford Artificial
Intelligence Laboratory (SAIL) desde los 60 hasta 1991. Los exalumnos de Stanford y
WAITS que trabajaron en Xerox PARC, empresa que ha realizado grandes aportes al
mundo de la informática, como la impresión láser, Ethernet, el ordenador personal, la
Graphical User Interface (GUI), tuvieron un papel importante en Xerox Star, Apple
Macintosh y Sun Microsystems, que han sido las empresas que han revolucionado el
mercado de las TIC al finales del siglo pasado.
- UNICS (1969): durante el desarrollo de Multics por el MIT, AT&T Bell Labs, y General
Electric se introdujeron muchas innovaciones, pero también se generaron muchos
problemas complejos de resolver y que hacían peligrar la viabilidad del proyecto. Los
investigadores de Bell Labs, frustrados por el tamaño y complejidad que adquiría Multics,
dejaron el proyecto y un grupo de ellos, formado por Thompson, Ritchie, McIlroy y
Ossanna, tomó la decisión de continuar el trabajo iniciado pero a menor escala. En 1970
presentaron el proyecto UNICS (UNiplexed Information and Computing Service) como
contrapunto a Multics (Multiplexed Information and Computer Services) y que luego, en
1972, sería reescrito en lenguaje C y renombrado como Unix9.
Ya en la década de 1970, Unix empezó a trabajar bajo licencia abierta, lo cual generó una amplia
gama de versiones académicas, como la de BSD (University of California, Berkeley), o comerciales,
como Microsoft Xenix, IBM AIX y Sun Microsystems SunOS/Solaris. AT&T finalmente cerró
la licencia y desarrolló en 1983 una versión comercial que incluía el aporte realizado por la
comunidad y las universidades, llamada Unix System V Release 1, que es sobre el cual está basado
la mayoría de los SO Unix comerciales. Posteriormente, vendió sus derechos a la empresa Novell a
principios de los 90 y esta, a su vez, a la empresa SCO (Santa Cruz Operation) en 1995. La marca
Unix es una marca registrada por The Open Group que permite su utilización a los sistemas que
cumplen con las especificaciones de Single Unix Specification (SUS). En general, Unix se ha
caracterizado por su modularidad e independencia de dispositivos (llamada filosofía Unix), donde
el sistema operativo provee un conjunto de llamadas (API), comandos y herramientas simples para
Sobre las versiones representativas de este sistema operativo se pueden mencionar Unix
Version 6 (1975), la primera versión de Unix liberada por Bell Labs y que se ejecutaba sobre una
DEC PDP-11, y la Unix Version 7 en 1978/9. y se tiene constancia que ha estado en
funcionamiento hasta 1985. La Version 5 Unix solo fue licenciada por AT&T a instituciones
académicas y la Version 6 destinada a empresas comerciales (con un costo de U$S 20.000).
- Unix System III (1982): junto a las diferentes versiones basadas en versiones anteriores y
desarrolladas por empresas o universidades, generaba mucha confusión en el mercado y es
por ello que AT&T en 1983 presentó Unix System V Release 1 con el compromiso que
sería compatible con versiones futuras y que incluiría tanto sus propios desarrollos como
otros realizados en universidades y centros de investigación. Esta versión (ya con licencia
cerrada) ha sido la que ha dado lugar a otros Unix como HP-UX, AIX, Solaris, Irix, etc.
- RT-11 (Real Time Operating System) (1970): fue uno de los primeros sistemas
operativos con especificaciones para trabajar en tiempo real y soportar procesos
(generalmente, industriales) con restricciones temporales (usualmente, tiempo máximo de
respuesta y de ejecución de tareas que deben ser atendidas en tiempo real) desarrollado para
una arquitectura DEC PDP-11 de 16 bits. Este sistema (hw/sw) fue utilizado ampliamente
en el control de procesos industriales para la adquisición de información y control de
procesos en tiempo real11.
- Cray Operating System (COS) (1976): fue el sistema operativo desarrollado por la
empresa Cray para sus superordenadores, los más potentes de su época, llamados Cray-1, y
su sucesor, Cray X-MP. Esto incluía todas las técnicas y avances en sistemas operativos de
su época, pero gestionaban grandes cantidades de procesos en diferentes procesadores y en
memoria compartida. Incluía, además, el Cray Assembly Language (CAL), Cray FORTRAN
(CFT) y Pascal como parte del sistema operativo12.
Operating_System_COS_Workbook-Training-September_1981.OCR.pdf
- FLEX (1976): fue un single-tasking operating system desarrollado por Technical Systems
Consultants (TSC) para un procesador Motorola 6800 y que se ejecutaba desde una unidad
de disco flexible de 8 pulgadas, pero también disponía una versión en discos flexibles de
5,25 pulgadas llamada mini-Flex. La interacción con el usuario era en modo texto, pero
algunos fabricantes lo adaptaron para dispositivos gráficos y ratón. No obstante, su mayor
innovación es que funcionaba desde un disco flexible que utilizaba sectores de 256 bytes con
una estructura de directorios simple (a través de unas tablas) incluyendo soporte para la
programación en BASIC13.
- Apple DOS (1978): fue una gama de sistemas operativos para la familia de ordenadores
Apple II y que se llamaron DOS 3.1- 3.2-3.3 (última versión en 1983). En 2013, 35 años
después de la aparición de Apple II, el código de Apple DOS fue liberado al Computer
History Museum por su creador Paul Laughton y se encuentra disponible en su página web14.
- Atari DOS (1979): fue el sistema operativo (en disco flexible también) utilizado por la
familia de ordenadores de 8 bits Atari (llamados home computers o game computers),
fabricados por la empresa del mismo nombre. Las extensiones del sistema operativo eran
cargadas en memoria junto con un controlador de disco que permitía gestionar los archivos
almacenados en este. El gestor de disco era la extensión más importante del sistema
operativo y que en la versión de 2.0 se transformó en el File Management System (FMS)
que era una implementación de sistema de archivos en memoria cargado desde el disco
flexible15.
A partir de la década de 1980 se popularizaron las máquinas de uso personal (conocidsa como
4ª generación de computadores) con la irrupción en el mercado de los circuitos integrados de gran
escala (LSI), con chips de miles de transistores y el surgimiento del microprocesador, similares a lo
conocemos hoy en día, que favorecieron la construcción de estos computadores para uso personal.
La evolución a pantalla gráficas, una capacidad de cómputo apreciable e interactivo, propició una
floreciente industria que producía ordenadores para un público no tecnólogo y más orientado a la
electrónica de consumo que al negocio o el cómputo científico. Los mayores actores al inicio de
esta década fueron Apple con su hardware Macintosh y el sistema operativo MacOS, IBM+Microsoft
con el PC+MSDOS y Unix (aunque este último más orientado hacia estaciones de trabajo –un poco
más potentes- que a computadores, personales pero rápidamente haría el paso para ejecutarse
también en estos).
Darwin ha continuado su camino como desarrollo abierto a través de diversos proyectos, como
OpenDarwin (liderado por Apple) y cerrado en 2006, o PureDarwin (sucesor de OpenDarwin a
partir de 2007) (http://www.puredarwin.org/). Para evitar problemas de licencias abiertas (open
source), Apple mantiene un sitio web (http://www.opensource.apple.com/) donde incluye todo el
código de este tipo e incluido en las diferentes versiones de sus sistemas operativos.
- Windows 1.0 (1985) es un interfaz gráfica desarrollada por Microsoft y que se ejecutaba
bajo MSDOS. Este desarrollo es fruto de los trabajos conjuntos entre Microsoft (Bill Gates)
Fuente: http://futurist.se/gldt/
No se puede dejar de mencionar las evoluciones del sistema operativo Windows a partir de
la versión Windows 95 (versión para usuarios domésticos), en la cual se integraron todas las
funcionalidades de Windows 3.1 y MSDOS agregando una nueva interfaz de usuario, pasando de
una arquitectura de 16 bits multitarea a una arquitectura de 32 bits multitarea pero con apropiación.
Sucesivas evoluciones de esta versión fueron Windows 98 y Windows ME que incluían los avances
de las arquitecturas modernas de procesadores y la posibilidad de gestionar mayor cantidad de
memoria. Un proyecto desarrollado en paralelo al Windows 95 fue el diseño de Windows NT
(1993) como sistemas operativo multitarea con apropiación y multiusuario con interfaz gráfica para
monoprocesadores y sistemas multiprocesadores. Es de destacar la Windows NT versión 4 (1996)
que incluía la interfaz de Windows 95 sobre la familia de operativos NT. Windows XP (2001) es
otra evolución de las versiones de Windows NT, pero basado sobre el núcleo de este y no sobre la
línea de Windows95, con el objetivo de unir las dos líneas de núcleos y de negocio. Los esfuerzos
en XP estaban puestos en mejorar la seguridad, escalabilidad y eficiencia de los sistemas Windows
transformándose en un referente para la época. Sucesivas evoluciones de XP han sido Vista (2006),
7 (2009), 8 (2012), 10 (2015), acompañados por versiones de servidores Windows Server (2003,
2008, 2012)24.
Microsoft, a partir de Windows XP, desarrolló una estrategia para los sistemas operativos
diferenciados en la misma versión para usuarios (Home, Professional, Media Center, Tablet
Edition) y que ha seguido manteniendo en las versiones posteriores para adaptar el mismo sistema
operativo a diferentes segmentos del mercado teniendo en cuenta el hardware necesario para
ejecutarse y adecuando el precio (si bien la estructura y núcleo continúan siendo los mismos,
incluyen más o menos utilidades/herramientas/módulos/prestaciones). Por ejemplo, para
Windows8 encontramos las siguientes versiones: Single Language (básico o starter), para países
emergentes con una capacidades muy reducidas; Core, versión estándar para usuario doméstico;
Pro, para pequeñas empresas; Pro WMC, versión Pro pero con el Media Center; Enterprise, con
características específicas para empresas; RT, para dispositivos con arquitectura ARM (RISC
Technology) para tabletas y teléfonos. También se dispone una edición llamada N para países de la
Comunidad Europea, que no incluye el Windows Media Player a raíz de los litigios por monopolio
a los que ha tenido que enfrentarse la empresa en estos países.
8.1 W10
- Palm OS (1996): también conocido como Garnet OS, es un sistema operativo para los
primeros sistemas móviles desarrollado por Palm, Inc., para los dispositivos de agenda y
asistente personal (PDA, personal digital assistants). Este fabricante fue uno de los primeros
en introducir en una PDA (que ya existían en aquel momento pero con teclado y más similar
a una calculadora que a un dispositivo gráfico) una pantalla táctil con una interfaz gráfica.
El dispositivo incluía una serie de aplicaciones como agenda, contactos, calendario,
traductor, conversores, notas, etc., que permitía organizar la información personal en forma
fácil y sencilla. Después de diversas compras de empresas y litigios PalmOS se ha
transformado en WebOS25.
- WebOS (2009): también conocido como LG WebOS, Open WebOS, HP WebOS o Palm
WebOS, es una evolución de PalmOS y fue reescrito utilizando un núcleo de Linux para
hacer frentes a diferentes necesidades del mercado de consumo liderado por dispositivos
inteligentes (móviles o no), como televisores, impresoras, tabletas o relojes. Este SO fue
inicialmente desarrollado por Palm (para sus PDA) y, cuando la empresa fue comprada por
Las pantallas que se muestran a continuación son de un teléfono móvil y la versión 4.4 (KitKat,
nombre de una famosa chocolatina de una empresa multinacional).
Conclusiones
En este apartado se han visto una breve reseña sobre la historia de los sistemas operativos
y se han descrito las principales aportaciones en el tiempo que han realizado. Es importante destacar
que este solo es un resumen no es exhaustivo, que no contiene todos los sistemas y que el lector
puede encontrar que faltan algunas aportaciones que considere importantes o algunos desarrollos
que no se han tenido en cuenta. Para ello se sugiere consultar a la bibliografía a final del módulo y
una línea de tiempo muy completa. Se puede obtener desde
https://en.wikipedia.org/wiki/Timeline_of_operating_systems.
Con los concepto definidos hasta el momento se puede realizar una primera clasificación de los
Sistemas Operativos considerando cómo actúan, se distribuyen y ejecutan las actividades de los
usuarios teniendo diferentes tipos, por ejemplo ‘por lotes’ (batch), multiprogramado, de tiempo
compartido, de tiempo real, distribuidos, de red, etc. No obstante es interesante analizar cómo los
diseñadores de Sistemas Operativos han adoptado diferentes estructuras internas para atender
nuevos requerimientos y solucionar los problemas que la tecnología les presentaba. En esta sección
no se pretende hacer una clasificación exhaustiva de las estructuras internas de los SO sino presentar
las más peculiares y que representan una diferencia considerable a otros diseños entre ellas:
monolíticas, jerárquica o por capas, máquina virtual, micronúcleos
(microkernels/nanokernels/exokernels), por funciones/cliente-servidor.
a) Una función colectora principal que atiende las peticiones de servicio y las envía a los
procedimientos de servicio que son internos en el núcleo del SO.
b) Procedimientos de servicio que llaman a rutinas de código mucho más específicas accesibles
desde cualquier punto interno del SO y que necesite esta funcionalidad.
c) Acceso a los recursos físicos que puede ser realizado desde diferentes puntos del código en
virtud de cual sea el servicio que lo necesita.
En los sistemas *Nix (se utiliza esta abreviación para definir todos los sistemas Unix-Linux
equivalentes) ha habido diversas reorientaciones en el diseño para adaptarlos a nuevas necesidades
de flexibilidad como, por ejemplo, el sistema de módulos cargables en tiempo de ejecución, lo cual
lo acerca más a otras estructuras por ejemplo de micronúcleo. Estas ventajas de módulos flexibilizan
la integración de nuevas funcionalidades/dispositivos al núcleo, quedando integrados en este, pero
que puede ser cargado y descargado en tiempo de ejecución.
Fuente: http://www.makelinux.net/kernel_map/
Fuente: http://www.cs.utexas.edu/users/EWD/ewd01xx/EWD196.PDF
Los diseños de este tipo evolucionaron a formas por capas concéntricas (estructura
comúnmente llamada Onion –cebolla-) definiendo que la comunicación solo se podía hacer entre
capas adyacentes, siendo las capas interiores más cercanas a los dispositivos hardware que las
superiores. En estos sistemas la interfaz con el núcleo se realizaba a través de puntos bien definidos
(igual que los SO monolíticos evolucionados), con un mecanismo similar a las llamadas al sistema
con parámetros acordados. Muchos diseñadores adoptaron este tipo de organización ya que
facilitaba el diseño y permitía hacer desarrollos con grupos de trabajos diferentes y en paralelo, ya
que la ventaja principal radicaba en la independencia entre las capas y lo cual facilitaba su
programación individual y la depuración aislada. Unas de las desventajas importantes de esta
estructura, que derivaba también de la independencia, era que quien diseñaba el SO debía tener muy
claro la definición de las funcionalidades/capas, ya que al solo poder utilizar servicios en el anillo
interior complicaba la definición e implementación de servicios complicando extremadamente el
diseño. Además como solo se podía hacer intercambio de información entre una capa y la siguiente,
esto implicaba un costo que se transformaba en una pérdida de eficiencia para ir de las acciones en
las capas más exteriores hacia las más interiores.
Ejemplo de estos sistemas (además del THE) se pueden mencionar Multics (Multics, 1965)
(ver sección anterior) y que presentaban una estructura en anillos equivalente a la siguiente figura:
HW
Gestión de
Memoria
Gestión de
Procesos
Gestión de E/S
Programas-
Comandos-Shell
Estas técnicas han evolucionado de forma continua, sobre todo a partir de la incorporación en
los procesadores (desde 2005/6) de extensiones específicas para facilitar la virtualización llamadas
(Intel VT y AMD-V). Esto ha favorecido una evolución de la virtualización completa con soporte
hardware permitiendo que sobre sistemas operativos normales (por ejemplo, VirtualBox sobre
Windows o MacOS) o con extensiones (KVM sobre Linux) se puedan ejecutar hipervisores (gestor
de la virtualización o monitor de máquina virtual) sobre los cuales se instalan otros sistemas
operativos independientes. En estos casos los hipervisores se llaman de Tipo 1 a diferencia de los
de Tipo 2 que no necesitan un SO host (ejemplos de estos son Xen, Hyper-V, Vmare ESX/i).
HW
Sistema Operativo
(Host)/Hipervisor
HW Virt. HW Virt. HW Virt. HW Virt.
Las primeras aportaciones en esta estructura fue VMOS -Virtual Machine Operating System-
(o también llamado VM/CMS) de IBM, que fue utilizado los mainframes System/370/390 o en las
zSeries y cuya evolución, después de 45 años, es la IBM z/VM Version 6.3 (2013) y se ejecuta sobre
los sistemas IBM System z13. Estas ideas han sido fundamentales (juntas a las de la Universidad de
Cambridge, MIT, Harvard, los trabajos de Popek & Goldberg y muchos otros) en la virtualización
de SO en la actualidad y, a pesar de diferentes ideas, tecnología y conceptos, la esencia de la
estructura subyace en los diseños más modernos.
Aplicaciones
Núcleo
HW
Figura 4. Estructura por funciones.
El núcleo en este caso tiene por objetivo establecer la comunicación entre los clientes y los
servidores. Los procesos pueden ser tanto servidores como clientes. Por ejemplo, un programa de
aplicación normal es un cliente que llama al servidor correspondiente para acceder a un archivo o
realizar una operación de entrada/salida sobre un dispositivo concreto. A su vez, un proceso cliente
puede actuar como servidor para otro. Esta estructura ofrece gran flexibilidad en cuanto a los
servicios posibles en el sistema final, ya que el núcleo provee solamente funciones muy básicas de
memoria, entrada/salida, archivos y procesos, dejando a los servidores la mayoría de los servicios
que el usuario final o programador puede utilizar. Estos servidores deben tener mecanismos de
seguridad y protección que, a su vez, serán filtrados por el núcleo que controla el hardware. Una
extensión a esta arquitectura es que los clientes y servidores ya no se encuentren en el mismo
hardware teniendo una visión de sistema operativo distribuido sobre una red como se mostraría en
la siguiente figura:
HW HW HW HW
Red
Comunicación
entre cliente y
servidor
En resumen se puede enumerar que las principales ventajas de un micronúcleo son la reducción
de la complejidad, la descentralización de los fallos y la facilitación para crear y depurar módulos y
controladores de dispositivos. Entre sus principales desventajas son la complejidad en la
sincronización de todos los módulos que componen el micronúcleo y su acceso a la memoria, y la
Integración con las aplicaciones. Entre los SO con micronúcleo más conocidos se puede citar: AIX,
Minix, Hurd, Mach, OpenSTEP/NeXTSTEP (algunos autores consideran este último es un núcleo
híbrido), Netkernel, RadiOS, QNX, Symbian, etc.
Fuente: Wikipedia.
Como ideas complementarias a los micronúcleos son las arquitecturas basadas en nanokernel
o picokernel y exokernel. Los nanokernels se caracterizan porque la cantidad de código que se ejecuta en
el modo privilegiado del hardware es muy pequeña (el término picokernel se utiliza por algunos autores
para resaltar esta mínima cantidad de código en espacio kernel). El término nanokernel proviene de J.
Shapiro, de su artículo “The KeyKOS NanoKernel Architecture” donde muestra, a diferencia de
Mach, la base de esta arquitectura y donde existe una capa de abstracción mínima del hardware que
gestiona las interrupciones y funcionalidades esenciales y sobre la cual se asientan los servicios y
funciones del sistema operativo.
Conclusiones
En este apartado se han descrito las estructuras más interesantes de SO y, si bien se han
mencionado algunos ejemplos, se tiene que considerar que la mayoría no son diseños o
implementaciones puras de estos modelos/arquitecturas. Generalmente, los diseñadores parten de
unas ideas generales pero que la van adaptando a las necesidades, a la propia evolución de los SO y
utilizando los recursos de la forma más adecuada para la tecnología disponible (tanto hardware como
software).
Se puede observar que como premisa general se parte de la idea que para los servicios que deben
controlar dispositivos de hardware es conveniente que las funciones estén divididas por capas u
objetos para lograr independencia del hardware y no bloquear todo el SO por un cambio de un
dispositivo. Por el contrario, cuando se habla de gestión de procesos, memoria, interrupciones, etc.,
lo más importante es que el código sea eficiente y óptimo, por lo cual las estructuras organizativas
utilizadas son equivalentes a la de “por funciones”. No obstante, la mayoría de los SO actuales se
dividen entre monolíticos/monolíticos híbridos con evoluciones en la estructura interna (ya sea por
capas parciales o por funciones) o micronúcleos híbridos y en estos (y algunos casos) con mayor o
menor incidencia del concepto puro de micronúcleo.
4. Caso de uso
30Todas las capturas de pantallas a continuación son obtenidas de Debian8 y Windows7/10® ejecutándose
virtualizadas en máquinas del autor.
seguro etc.). Las dos imágenes a continuación muestra el procedimiento de carga de ambos sistemas
operativos:
Una vez finalizado este procedimiento se llega a la pantalla de inicio donde el usuario deberá
introducir un usuario y una palabra clave (password) que le permitirá acceso al sistema. Todos los
sistemas *Nix (abreviatura de Unix, Linux o equivalentes) consideran dos tipos de usuarios
diferenciados: el superusuario (llamado root), que tiene todos los permisos sobre el sistema, y el
resto de los usuarios. Generalmente todos los usuarios tienen su directorio de trabajo (generalmente
con el mismo nombre del usuario y con todos los privilegios) dentro del directorio /home y el usuario
root su directorio habitual de trabajo (home) se encuentra en /root, Los usuarios tienen permisos
restringidos en el resto de directorios que no sean su home limitados generalmente a leer o ejecutar
si es posible. En la interfaz gráfica de Linux (en la mayoría de las distribuciones), por cuestiones de
seguridad, el usuario no puede entrar como root sino deberá hacer como un usuario normal y
después ‘escalar’ privilegios con el comando su o ejecutar comando privilegiado con el comando
sudo (aunque esto es configurable y se puede cambiar, aunque no es recomendable). En Windows
el usuario puede pertenecer al grupo administradores que tendrá todos los permisos y si accede
como usuario que forme parte del grupo administradores tendrá permisos para hacer todo dentro
del sistema operativo (es recomendable no trabajar con un usuario con permisos de administrador).
Los usuarios en Windows están definidos en la primera unidad física visible del SO (generalmente
C:) en un directorio c:\Users (o Usuarios dependiendo del idioma configurado) donde hay otras
carpetas predefinidas (como default, default user) que contienen archivos comunes o que sirven como
base para la definición de nuevos usuarios.
Como se puede observar, ambas pantallas de entrada (login) tienen opciones para cuestiones de
accesibilidad, mayor o menor cantidad de información y opciones para cambiar de usuario,
reiniciar/suspender o apagar la máquina. Se debe indicar que todo esto es configurable y el usuario
puede cambiarlo a su gusto.
Una vez que se ha ingresado se tendrá la pantalla principal de trabajo llamado escritorio,
que será el sitio principal de trabajo. Como se mencionó anteriormente, en los sistemas *Nix se
puede trabajar interactivamente en dos modos diferenciados: modo texto y modo gráfico (y en este
último se puede abrir una aplicación en una ventana especial llamada Terminal, que permite trabajar
en modo texto dentro del modo gráfico). Normalmente, los modos gráficos son los más utilizados
en sistemas de escritorio o de usuario doméstico, mientras que los de texto son adecuados para
servidores. No obstante, como no se impone ninguna restricción se puede cambiar fácilmente de
uno a otro con una secuencia de teclas (generalmente Crtl+Alt+F1 a F6 per a pasar a modo texto
-6 posibles terminales texto disponibles concurrentes- y Crtl+Alt+F7 para retornar a modo gráfico
–considerar que todas las sesiones son simultáneas por lo cual lo que esté haciendo en la terminal 1
se ejecuta simultáneamente con lo que haga en la terminal 2 o en modo gráfico-) o incluso estar en
modo gráfico y desarrollando código en modo texto sobre un terminal, o conectado con un terminal
a otra máquina o al disco de otra máquina. En Windows se trabaja siempre en modo gráfico, aunque
es posible también abrir una terminal (ventana de comandos) para ejecutar comandos o secuencia
de ellos.
Puede parecer que uno tenga más opciones/comandos que otro, pero no es así ya que los
modos de acceder a los programas opciones son equivalentes pero con filosofías de
mostrar/acceder diferentes.
Uno de los apartados que necesitamos acceder una vez que estamos dentro del escritorio
son las configuraciones de las diferentes partes del sistema operativo. Para acceder a ellas en Debian
solo debemos acceder al botón Activities y en la caja de búsqueda poner Settings (o Configuración
si lo tenemos en castellano), o simplemente hacer clic en el ícono de la izquierda (debajo del ícono
del navegador) que abrirá el panel de control con todas las aplicaciones y seleccionar, entre ellas, la
de Settings. En Windows podemos ir al botón izquierdo de la barra de tareas y hacer clic en el botón
de panel de control (en Windows 8 que incluye la interfaz Metro, que permite trabajar con
dispositivos de pantalla táctil, solo debemos hacer clic sobre el ícono de Windows en la barra de
tarea con el botón derecho, y sobre Windows 10 nuevamente hacer clic sobre el ícono de Windows
e ir a Setting –o Panel de Control-). En estos paneles de Control se encontrarán todas las opciones
para configurar todos los aspectos del Sistema Operativo (en Linux veremos que es posible trabajar
con opciones avanzadas pero se deberá hacer sobre un Terminal, no obstante el Panel de Control
tiene todo lo necesario para un usuario habitual). Las imágenes a continuación muestran ambos
paneles de control (primero el de Debian-Gnome luego el de Windows 7 y Windows 10).
Una de las opciones iniciales más utilizada es la configuración a la red. La conexión a la red
se puede realizar a través de una red cableada (llamada Ethernet) que presenta una conexión similar
a la de los teléfonos fijos, pero más anchos (de 6 pines) o inalámbrica (conocida como Wifi). En
todos los sistemas operativos (generalmente por defecto) la conexión a red viene seleccionada para
una configuración automática (conocida como servicio dhcp) y el usuario solo deberá conectar el
cable si es Ethernet o seleccionar la red e introducir la clave de acceso a esa red si es Wifi y el router
gestor de la red y que permitirá la conexión a Internet proveerá todos los parámetros necesarios de
conexión y el usuario no deberá realizar ninguna acción (excepto en Wifi seleccionar la red e
introducir la clave). Esto parámetros, necesarios para la conexión a cualquier red, son 4 y tienen el
formato de 4 números separados por puntos, cada uno de ellos entre 0 y 255, por ejemplo
192.168.1.10. Como se dijo anteriormente si el usuario lo tiene configurado de forma automática
no deberá introducir ninguno de ellos, o en caso contrario los deberá consultar con su administrador
de red. Ellos son: dirección IP que identifica la dirección de la máquina en la red (por ejemplo
192.168.0.25), máscara indica en qué red está y cómo debe hacer las consultas, generalmente
255.255.255.0, puerta de interconexión (gateway) que es la dirección del router por donde se conectará
la máquina a otras redes o Internet, y servidor de nombres (conocido como DNS), que es un servicio
que nos permite transformar un dirección como http://www.umb.edu.co/ en la dirección IP de
la máquina 190.242.126.11 necesaria para la interconexión de navegador y el servicio web que aloja
la página de la universidad.
A modo de ejemplo se muestra la secuencia de configuración de una red Ethernet en
Windows 7 (en este caso se encuentra en forma automática) y donde se pueden ver los parámetros
de configuración.
1. Configuración
Ethernet
La configuración de las opciones de red de los restantes sistemas operativos es similar a igual el
resto de las opciones de configuración.
5. Glosario
Bach, M. (1986). The Design of the UNIX Operating System. Estados Unidos: Pearson Prentice Hall.
Benvenutti, C. (2006). Understanding Linux Network Internals. Estados Unidos: O'Reilly Media.
Carretero, J. (2010). Sistemas Operativos - Una Visión Aplicada. México: MC Graw Hill.
Dijkstra, E. (s.f.). The structure of the 'THE'-multiprogramming system (EWD-196). Center for American
History, University of Texas at Austin. Disponible en:
http://www.cs.utexas.edu/users/EWD/ewd01xx/EWD196.PDF
Goldstine, H., & Goldstine, A. (1946). The Electronic Numerical Integrator and Computer (ENIAC).
Mathematical Tables and Other Aids to Computation 2 (15): 97–110. doi:10.2307/2002620.
Disponible en:
http://www.jstor.org/stable/2002620?origin=crossref&seq=1#page_scan_tab_contents
Friend, J. (s.f.). Emulador MacOS 7 [figura]. Disponible en: https://jamesfriend.com.au/pce-js/-
Jorba, J. & Suppi, R. (2014). Administración avanzada del sistema operativo GNU/Linux.
Disponible en:
https://www.exabyteinformatica.com/uoc/Informatica/Administracion_avanzada_del_sistem
a_operativo_GNU_Linux/Administracion_avanzada_del_sistema_operativo_GNU_Linux_(I
ntro).pdf.
KVM. (Kernel-based Virtual Machine). (s.f.). Ffull virtualization for Linux on x86 hardware
containing virtualization extensions (Intel VT or AMD-V). Disponible en: http://www.linux-
kvm.org/page/Main_Page
Make Linux (s.f.). Mapa interactivo del núcleo de Linux [imagen]. Disponible en:
http://www.makelinux.net/kernel_map/
Multics. (1965). Multics (Multiplexed Information and Computing Service). The mainframe
timesharing operating system 1965-2000. Disponible en: http://www.multicians.org/
Nutt, G. (2006). Sistemas Operativos. Pearson Educación.
Par, J. (s.f.). Windows 1.0 y Windows 3.0 [figura]. Disponible en:
http://jsmachines.net/demos/pc/cga-win101/xt-cga-win101.xml
Peterson, P., & Silberschatz, A. (1994). Conceptos de sistemas operativos: conceptos fundamentales. México:
Editorial Reverté.
Silberschatz, A. (2000). Sistemas Operativos. México: Addison Wesley Longman.
Sisk, J., VanArsdale, S., & Heights, H. (1985). Exploring The Pick Operating System. Estados Unidos:
Hayden Book Co.
Stalling, W. (2004). Sistemas Operativos. México: Pearson Prentice Hall.
______. (2011). Operating Systems: Internals and Design Principles. México: Pearson Prentice Hall.
Suppi, R., & Marzo, J. (2011). Diseño de sistemas operativos. Conceptos estructurales y funcionales del sistema
operativo. FUOC - Eureca Media SL.
Tanenbaum, A. (2009). Sistemas Operativos Modernos. México: Pearson.
Tanembaum, A. & Woodhull, A. (1996). Sistemas Operativos. México: Pearson Prentice Hall.
Vahalia, U. (1995). UNIX Internals: The New Frontiers. Estados Unidos: Pearson Prentice Hall.
Virtualbox. (s.f.). A powerful x86 and AMD64/Intel64 virtualization product for enterprise/home use.
Disponible en: https://www.virtualbox.org/
Von Neumann, John. (1945). First Draft of a Report on the EDVAC. United States Army
Ordnance Department. University of Pennsylvania. Moore School of Electrical Engineering.
University of Pennsylvania. En Godfrey, M. (1993). Annals of the History of Computing, 15 (4),
pp.27-75. Disponible en:
https://web.archive.org/web/20130314123032/http://qss.stanford.edu/~godfrey/vonNeum
ann/vnedvac.pdf.
Wikimedia (s.f.). Computadores Colossus Mark II y Eniac de programa integrado (1944 y 1946)
[imagen]. Disponible en: https://commons.wikimedia.org/wiki/File:Colossus.jpg
Wikipedia (s.f.). IBM360-20 –la más pequeña de la familia- e IBM2560 MFCM [imagen].
Disponible en: https://en.wikipedia.org/wiki/IBM_System/360)