¿Qué es un Sistema Operativo?
El sistema operativo es el programa o software más importante de un ordenador.
Para que funcionen los otros programas, cada ordenador de uso general debe
tener un sistema operativo. Los sistemas operativos realizan tareas básicas,
tales como reconocimiento de la conexión del teclado, enviar la información a
la pantalla, no perder de vista archivos y directorios en el disco, y controlar
los dispositivos periféricos tales como impresoras, escáner, entre otros. En
sistemas grandes, el sistema operativo tiene incluso mayor responsabilidad y
poder, es como un policía de tráfico, se asegura de que los programas y
usuarios que están funcionando al mismo tiempo no interfieran entre ellos. El
sistema operativo también es responsable de la seguridad, asegurándose de que
los usuarios no autorizados no tengan acceso al sistema.
Tipos de Sistemas Operativos
En esta sección se describirán las características que clasifican a los
sistemas operativos, básicamente se cubrirán tres clasificaciones: sistemas
operativos por su estructura (visión interna), sistemas operativos por los
servicios que ofrecen y, finalmente, sistemas operativos por la forma en que
ofrecen sus servicios (visión externa).
2.1 Sistemas Operativos por su
Estructura
Según [Alcal92], se deben observar dos tipos de requisitos cuando se
construye un sistema operativo, los cuales son:
a)
Requisitos de usuario: Sistema fácil de
usar y de aprender, seguro, rápido y adecuado al uso al que se le quiere
destinar.
b)
Requisitos del software: Donde se engloban
aspectos como el mantenimiento, forma de operación, restricciones de uso,
eficiencia, tolerancia frente a los errores y flexibilidad.
A continuación se describen las distintas estructuras que presentan los
actuales sistemas operativos para satisfacer las necesidades que de ellos se
quieren obtener.
2.1.1 Estructura monolítica.
Es la estructura de los primeros sistemas operativos constituidos
fundamentalmente por un solo programa compuesto de un conjunto de rutinas
entrelazadas de tal forma que cada una puede llamar a cualquier otra (Ver Fig.
2).
Las características fundamentales de este tipo de estructura son:
- Construcción del programa final a base de módulos compilados separadamente que se unen a través del ligador.
- Buena definición de parámetros de enlace entre las distintas rutinas existentes, que puede provocar mucho acoplamiento.
- Carecen de protecciones y privilegios al entrar a rutinas que manejan diferentes aspectos de los recursos de la computadora, como memoria, disco, etc.
- Generalmente están hechos a medida, por lo que son eficientes y rápidos en su ejecución y gestión, pero por lo mismo carecen de flexibilidad para soportar diferentes ambientes de trabajo o tipos de aplicaciones.
2.1.2 Estructura jerárquica.
A medida que fueron creciendo las necesidades de los usuarios y se
perfeccionaron los sistemas, se hizo necesaria una mayor organización del
software del sistema operativo, donde una parte del sistema contenía subpartes
y esto organizado en forma de niveles. Se dividió el sistema operativo en
pequeñas partes, de tal forma que cada una de ellas estuviera perfectamente
definida y con un claro interface con el resto de elementos.
Se constituyó una
estructura jerárquica o de niveles en los sistemas operativos, el primero de
los cuales fue denominado THE (Technische Hogeschool, Eindhoven), de Dijkstra,
que se utilizó con fines didácticos (Ver Fig. 3). Se puede pensar también en
estos sistemas como si fueran `multicapa'. Multics y Unix caen en esa
categoría. [Feld93].
En la estructura anterior se basan prácticamente la mayoría de los
sistemas operativos actuales. Otra forma de ver este tipo de sistema es la
denominada de anillos concéntricos o "rings" (Ver Fig. 4).
En el sistema de anillos, cada uno tiene una apertura, conocida como
puerta o trampa (trap), por donde pueden entrar las llamadas de las capas inferiores.
De esta forma, las zonas más internas del sistema operativo o núcleo del
sistema estarán más protegidas de accesos indeseados desde las capas más
externas. Las capas más internas serán, por tanto, más privilegiadas que las
externas.
2.1.3 Máquina Virtual.
Se trata de un tipo de sistemas operativos que presentan una interface a
cada proceso, mostrando una máquina que parece idéntica a la máquina real
subyacente. Estos sistemas operativos separan dos conceptos que suelen estar
unidos en el resto de sistemas: la multiprogramación y la máquina extendida. El
objetivo de los sistemas operativos de máquina virtual es el de integrar
distintos sistemas operativos dando la sensación de ser varias máquinas
diferentes.
El núcleo de estos sistemas operativos se denomina monitor virtual y
tiene como misión llevar a cabo la multiprogramación, presentando a los niveles
superiores tantas máquinas virtuales como se soliciten. Estas máquinas
virtuales no son máquinas extendidas, sino una réplica de la máquina real, de
manera que en cada una de ellas se pueda ejecutar un sistema operativo
diferente, que será el que ofrezca la máquina extendida al usuario (Ver Fig.
5).
2.1.4 Cliente-servidor (Microkernel)
El tipo más reciente de sistemas operativos es el denominado
Cliente-servidor, que puede ser ejecutado en la mayoría de las computadoras, ya
sean grandes o pequeñas. Este sistema sirve para toda clase de aplicaciones por
tanto, es de propósito general y cumple con las mismas actividades que los
sistemas operativos convencionales.
El núcleo tiene como misión 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." [Alcal92]. Este paradigma 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 proveer la
mayoría que el usuario final o programador puede usar. 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. Actualmente se está trabajando en una
versión de UNIX que contempla en su diseño este paradigma.
2.2 Sistemas Operativos por
Servicios
Esta clasificación es la más comúnmente usada y conocida desde el punto
de vista del usuario final. Esta clasificación se comprende fácilmente con el
cuadro sinóptico que a continuación se muestra en la Fig. 6.
2.2.1 Monousuarios
Los sistemas operativos monousuarios son aquéllos que soportan a un
usuario a la vez, sin importar el número de procesadores que tenga la
computadora o el número de procesos o tareas que el usuario pueda ejecutar en
un mismo instante de tiempo. Las computadoras personales típicamente se han
clasificado en este renglón.
2.2.2 Multiusuarios
2.2.2 Multiusuarios
Los sistemas operativos multiusuarios son capaces de dar servicio a más
de un usuario a la vez, ya sea por medio de varias terminales conectadas a la
computadora o por medio de sesiones remotas en una red de comunicaciones. No
importa el número de procesadores en la máquina ni el número de procesos que
cada usuario puede ejecutar simultáneamente.
2.2.3 Monotareas
Los sistemas monotarea son aquellos que sólo permiten una tarea a la vez
por usuario. Puede darse el caso de un sistema multiusuario y monotarea, en el
cual se admiten varios usuarios al mismo tiempo pero cada uno de ellos puede
estar haciendo solo una tarea a la vez.
2.2.4 Multitareas
Un sistema operativo multitarea es aquél que le permite al usuario estar
realizando varias labores al mismo tiempo. Por ejemplo, puede estar editando el
código fuente de un programa durante su depuración mientras compila otro
programa, a la vez que está recibiendo correo electrónico en un proceso en
background. Es común encontrar en ellos interfaces gráficas orientadas al uso
de menús y el ratón, lo cual permite un rápido intercambio entre las tareas
para el usuario, mejorando su productividad.
2.3. Sistemas Operativos por la Forma de Ofrecer sus Servicios
2.3.1 Sistemas Operativos de Red
2.3.2 Sistemas Operativos Distribuidos
2.3.2.1 Ventajas de los Sistemas Distribuídos
2.2.5 Uniproceso
Un sistema operativo uniproceso es aquél que es capaz de manejar
solamente un procesador de la computadora, de manera que si la computadora
tuviese más de uno le sería inútil. El ejemplo más típico de este tipo de
sistemas es el DOS y MacOS.
2.2.6 Multiproceso
Un sistema operativo multiproceso se refiere al número de procesadores
del sistema, que es más de uno y éste es capaz de usarlos todos para distribuir
su carga de trabajo. Generalmente estos sistemas trabajan de dos formas:
simétrica o asimétricamente. Cuando se trabaja de manera asimétrica, el sistema
operativo selecciona a uno de los procesadores el cual jugará el papel de
procesador maestro y servirá como pivote para distribuir la carga a los demás
procesadores, que reciben el nombre de esclavos. Cuando se trabaja de manera
simétrica, los procesos o partes de ellos (threads) son enviados
indistintamente a cualesquiera de los procesadores disponibles, teniendo,
teóricamente, una mejor distribución y equilibrio en la carga de trabajo bajo este
esquema.
Se dice que un thread es la parte activa en memoria y corriendo de un
proceso, lo cual puede consistir de un área de memoria, un conjunto de
registros con valores específicos, la pila y otros valores de contexto. Un
aspecto importante a considerar en estos sistemas es la forma de crear
aplicaciones para aprovechar los varios procesadores. Existen aplicaciones que
fueron hechas para correr en sistemas monoproceso que no toman ninguna ventaja
a menos que el sistema operativo o el compilador detecte secciones de código
paralelizable, los cuales son ejecutados al mismo tiempo en procesadores
diferentes. Por otro lado, el programador puede modificar sus algoritmos y
aprovechar por sí mismo esta facilidad, pero esta última opción las más de las
veces es costosa en horas hombre y muy tediosa, obligando al programador a
ocupar tanto o más tiempo a la paralelización que a de elaborar el algoritmo
inicial.
Esta clasificación también se refiere a una visión externa, que en este
caso se refiere a la del usuario, el cómo accesa los servicios. Bajo esta
clasificación se pueden detectar dos tipos principales: sistemas operativos de
red y sistemas operativos distribuidos.
Los sistemas operativos de red se definen como aquellos que tiene la
capacidad de interactuar con sistemas operativos en otras computadoras por
medio de un medio de transmisión con el objeto de intercambiar información,
transferir archivos, ejecutar comandos remotos y un sin fin de otras
actividades. El punto crucial de estos sistemas es que el usuario debe saber la
sintaxis de un conjunto de comandos o llamadas al sistema para ejecutar estas
operaciones, además de la ubicación de los recursos que desee accesar. Por
ejemplo, si un usuario en la computadora hidalgo necesita el archivo matriz.pas
que se localiza en el directorio /software/codigo en la computadora morelos
bajo el sistema operativo UNIX, dicho usuario podría copiarlo a través de la
red con los comandos siguientes: hidalgo% hidalgo% rcp
morelos:/software/codigo/matriz.pas . hidalgo% En este caso, el comando rcp que
significa "remote copy" trae el archivo indicado de la computadora
morelos y lo coloca en el directorio donde se ejecutó el mencionado comando. Lo
importante es hacer ver que el usuario puede accesar y compartir muchos
recursos.
Los sistemas operativos distribuidos abarcan los servicios de los de red,
logrando integrar recursos (impresoras, unidades de respaldo, memoria,
procesos, unidades centrales de proceso) en una sola máquina virtual que el
usuario accesa en forma transparente. Es decir, ahora el usuario ya no necesita
saber la ubicación de los recursos, sino que los conoce por nombre y simplemente
los usa como si todos ellos fuesen locales a su lugar de trabajo habitual. Todo
lo anterior es el marco teórico de lo que se desearía tener como sistema
operativo distribuido, pero en la realidad no se ha conseguido crear uno del
todo, por la complejidad que suponen: distribuir los procesos en las varias
unidades de procesamiento, reintegrar sub-resultados, resolver problemas de
concurrencia y paralelismo, recuperarse de fallas de algunos recursos distribuidos
y consolidar la protección y seguridad entre los diferentes componentes del
sistema y los usuarios. [Tan92].
En general, los
sistemas distribuídos (no solamente los sistemas operativos) exhiben algunas
ventajas sobre los sistemas centralizados que se describen enseguida.
- Economía: El cociente precio/desempeño de la suma del poder de los procesadores separados contra el poder de uno solo centralizado es mejor cuando están distribuídos.
- Velocidad: Relacionado con el punto anterior, la velocidad sumada es muy superior.
- Confiabilidad: Si una sola máquina falla, el sistema total sigue funcionando.
- Crecimiento: El poder total del sistema puede irse incrementando al añadir pequeños sistemas, lo cual es mucho más difícil en un sistema centralizado y caro.
- Distribución: Algunas aplicaciones requieren de por sí una distribución física.
Por otro lado, los
sistemas distribuídos también exhiben algunas ventajas sobre sistemas aislados.
Estas ventajas son:
- Compartir datos: Un sistema distribuído permite compartir datos más fácilmente que los sistemas aislados, que tendrian que duplicarlos en cada nodo para lograrlo.
- Compartir dispositivos: Un sistema distribuído permite accesar dispositivos desde cualquier nodo en forma transparente, lo cual es imposible con los sistemas aislados. El sistema distribuído logra un efecto sinergético.
- Comunicaciones: La comunicación persona a persona es factible en los sistemas distribuídos, en los sistemas aislados no. _ Flexibilidad: La distribución de las cargas de trabajo es factible en el sistema distribuídos, se puede incrementar el poder de cómputo.
Así como los sistemas
distribuídos exhiben grandes ventajas, también se pueden identificar algunas
desventajas, algunas de ellas serían que han frenado la producción
comercial de sistemas operativos en la actualidad. El problema más importante
en la creación de sistemas distribuídos es el software: los problemas de
compartición de datos y recursos es tan complejo que los mecanismos de solución
generan mucha sobrecarga al sistema haciéndolo ineficiente. El checar, por
ejemplo, quiénes tienen acceso a algunos recursos y quiénes no, el aplicar los
mecanismos de protección y registro de permisos consume demasiados recursos. En
general, las soluciones presentes para estos problemas están aún en pañales.
Otros problemas de
los sistemas operativos distribuídos surgen debido a la concurrencia y al
paralelismo. Tradicionalmente las aplicaciones son creadas para computadoras que
ejecutan secuencialmente, de manera que el identificar secciones de código
`paralelizable' es un trabajo ardúo, pero necesario para dividir un proceso
grande en sub-procesos y enviarlos a diferentes unidades de procesamiento para
lograr la distribución. Con la concurrencia se deben implantar mecanismos para
evitar las condiciones de competencia, las postergaciones indefinidas, el
ocupar un recurso y estar esperando otro, las condiciones de espera circulares
y , finalmente, los "abrazos mortales" (deadlocks). Estos problemas
de por sí se presentan en los sistemas operativos multiusuarios o multitareas,
y su tratamiento en los sistemas distribuídos es aún más complejo, y por lo
tanto, necesitará de algoritmos más complejos con la inherente sobrecarga
esperada.
Los sistemas operativos más utilizados en los PC son DOS, OS/2, y
Windows, pero hay otros que también se utilizan, como por ejemplo Linux.
¿Cómo se utiliza un Sistema Operativo?
Un usuario normalmente interactúa con el sistema operativo a través de
un sistema de comandos, por ejemplo, el sistema operativo DOS contiene comandos
como copiar y pegar; para copiar y pegar archivos
respectivamente. Los comandos son aceptados y ejecutados por una parte del
sistema operativo llamada procesador de comandos o intérprete de la línea de
comandos. Las interfaces gráficas permiten que utilices los comandos señalando
y pinchando en objetos que aparecen en la pantalla.
A continuación detallamos algunos
ejemplos de sistemas operativos:
Familia Windows
- Windows 95
- Windows 98
- Windows ME
- Windows NT
- Windows 2000
- Windows 2000 server
- Windows XP
- Windows Server 2003
- Windows CEWindows Mobile
- Windows XP 64 bits
- Windows Vista (Longhorn)
Familia Macintosh
- Mac OS 7
- Mac OS 8
- Mac OS 9
- Mac OS X
Familia UNIX