Introducción y evolución histórica
El Sistema Operativo es el software que permite controlar el
hardware de una manera eficiente para que se puedan realizar las tareas
de forma cómoda. El sistema operativo presenta al usuario un entorno en
el que se pueden ejecutar aplicaciones para llevar a cabo diversas
tareas, gestionando los recursos disponibles (cpu, memoria, disco,
comunicaciones en red, dispositivos periféricos...). De este modo un
usuario puede realizar tareas como abrir un fichero y acceder a la
información que contiene sin preocuparse de aspectos de bajo nivel
como: mover los cabezales del disco, la velocidad de giro del motor del
disco, la posición que ocupan los bits en la superficie del disco,
etc...
Mientras
el usuario final trabaja con aplicaciones, el administrador de sistemas
habitualmente trabajará con el sistema operativo para conseguir que el
sistema informático (hardware + software) realice su función con la
máxima eficiencia.
Evolución de los sistemas operativos
La
evolución de la informática nos proporciona sistemas operativos que
cada vez realizan más funciones, facilitando el trabajo a los usuarios.
Pasos evolutivos:
- Proceso en serie
- Inicialmente, finales de los 40, el programador interactúa directamente con la máquina mediante conmutadores, indicadores luminosos y tal vez una impresora. No existe el sistema operativo y los usuarios de un ordenador se turnan para acceder secuencialmente, en serie.
- Proceso por lotes
- Se desarrolla un elemento de software denominado monitor que es capaz de ejecutar tareas, lotes, de manera secuencial. En estos sistemas informáticos los programadores pasaban a los administradores de sistemas los programas a ejecutar en cinta (o tarjetas perforadas) y el sistema los ejecutaba secuencialmente y de manera no interactiva.
- Multiprogramación o multitarea
- Con el ánimo de maximizar el uso de la CPU se cargan varios programas de manera simultánea. Así mientras un proceso está bloqueado por una operación de entrada/salida, la CPU puede continuar la ejecución de otro proceso.
- Sistemas de tiempo compartido
- El sistema reparte la atención de la CPU (o CPUs) entre diferentes procesos, simulando la ejecución en paralelo de los mismos. Los sistemas de tiempo compartido permiten que varios usuarios trabajen de manera simultánea y en modo interactivo. Uno de los primeros sistemas de tiempo compartido fue el CTSS (Compatible Time-Sharing System) desarrollado en el MIT.
Tipos de sistemas operativos
Según las necesidades que plantean diferentes usos y entornos, encontramos sistemas operativos:
- Monousuario:
- Desde el punto de vista de la máquina (o el sistema informático) no se hace distinción entre los usuarios que utilizan la máquina. Sólo un usuario puede estar trabajando en un momento determinado. Ejemplos: MS-DOS, Windows 3.x, 95, 98, Me.
- Multiusuario:
- Varios usuarios pueden trabajar simultáneamente en el mismo sistema informático. Además, el sistema realiza distinciones entre usuarios. La gestión de los recursos (memoria, CPU, disco, etc...) es mucho más complicada, pero al tener a varias personas trabajando a la vez, se rentabiliza con mayor facilidad la inversión.
- Monoproceso:
- El sistema informático sólo puede mantener un proceso en ejecución, las tareas se realizan secuencialmente.
- Multiproceso/Multitarea:
- El
sistema informático es capaz de ejecutar varios procesos
simultáneamente. Si hubiese suficientes CPUs, se ejecutaría cada
proceso en una CPU distinta, si el número de CPUs es menor (como
habitualmente ocurre) que el de procesos preparados para ejecutar. El
sistema operativo asigna franjas de uso de CPU a cada proceso, para
simular una ejecución en paralelo. De cualquier modo, realmente o de
forma simulada, los procesos en ejecución avanzan en paralelo.
- Tiempo compartido:
- Se realiza una planificación del uso de las CPUs disponibles entre los procesos preparados para ser ejecutados. De este modo, aparentemente, se ejecutan todos los procesos a la vez.
- Tiempo real:
- Los
sistemas operativos en tiempo real son predecibles, de tal manera que
se compromenten a realizar determinadas tareas dentro de unos límites
de tiempo. Su aplicación típica es el control de maquinaria y procesos
industriales. Ejemplos: Marte, QNX,
Un poco de historia:
- 1965: Multics
- Multics (Multiplexed Information and Computing Service) aportó muchas de las ideas presentes en Unix.
- 1970: Unix
- Sistema operativo multiusuario, multitarea que ha contado con gran aceptación en la industria. Unix es a la vez: un sistema operativo, un tipo de sistemas operativos y una marca comercial.
- 1973: Se decide reescribir Unix en C
- Anteriormente se utilizaba el lenguaje ensamblador para programar los sistemas operativos. Las ventajas de utilizar C son: portabilidad y facilidad de desarrollo.
- 1981: MS-DOS v1.0
- Capaz de soportar 16KB de memoria RAM y discos flexibles de 5.25 pulgadas de 160KB.
- 1984: Apple Macintosh utiliza interfaz gráfica
- Steve Jobs copia de Xerox la idea de utilizar una interfaz gráfica de usuario (GUI) en los ordenadores.
- 1991: Aparece el núcleo Linux y se completa GNU/Linux
- El proyecto GNU necesitaba un kernel para completar su sistema operativo. Gracias al desarrollo de Linux a cargo de Linus Torvalds se pudo contar con un núcleo libre.
- 1992: Beta de Windows NT 3.1 (primera versión comercial)
- Microsoft
desarrolla un nuevo sistema operativo multiusuario, multitarea y
estable dedicado a competir con los servidores Unix, se trata de
Windows NT.
- 1995: Se lanza al mercado Windows 95
- Evolución del sistema operativo MS-DOS que reemplaza la cónsola y el entorno gráfico de las versiones anteriores (Windows 3.x)
- 2001: Aparece Mac OS X
- Apple abandona su obsoleto sistema operativo para presentar un nuevo sistema operativo que forma parte de la família Unix.
Componentes de un Sistema Operativo
En un Sistema Operativo moderno se aprecian diferentes capas, del más alto nivel al más bajo encontramos:
- Aplicaciones de usuario:
- Colección de herramientas que utilizan los usuarios en sus quehaceres. (The Gimp, Firefox, Inkscape, Apache, GCC...)
- Intérprete de comandos/Interfáz gráfica de usuario:
- Permite la comunicación entre el sistema y el usuario. Existen distintas posibilidades, tanto de intérprete de comandos (Bash, csh, ksh, ...) como de interfáz gráfica (X Window, Gnome, KDE, ...)
- Llamadas al sistema:
- Se escriben bibliotecas con funciones de uso frecuente, de tal manera que otros componentes software las puedan utilizar sin tener que volverlas a implementar (funciones matemáticas, de acceso a ficheros, comunicaciones, procesado gráfico...).
- Núcleo o kernel:
- Controla el hardware y las operaciones básicas que realiza el sistema operativo. Típicamente se encarga de la gestión de procesos, la gestión de memoria y el control de todos los elementos hardware. Se dice que el software del núcleo se ejecuta en modo núcleo. Un fallo en este software arruina todo el sistema informático, por esto, cuanto menor sea la cantidad de código que se ejecuta en modo núcleo, menores serán las posibilidades de introducir bugs fatales. Se distingue entre núcleos monolíticos (los tradicionales) y los micro núcleos (más modernos, pretenden incluir en el núcleo sólo lo esencial).
- HAL Hardware Abstraction Layer:
- Se encarga de independizar los detalles de la arquitectura hardware para el resto de los componentes. Forma parte del núcleo, de manera que la migración a una nueva arquitectura no suponga reescribir todo el núcleo.
Para saber más:
- Wikipedia: Sistema operativo
- Wikipedia: Comparación de sistemas operativos
- Wikipedia: Historia de los sistemas operativos
- Wikipedia: Sistema operativo en tiempo real
- Wikipedia: Unix
- Wikipedia: Microsoft Windows
- Wikipedia: Mac OS X
- Wikipedia: CTSS
- Wikipedia: Multics
- Wikipedia: Incompatible Timesharing System