El objetivo de un Sistema Operativo (en adelante S.O.) serio es el de crear una máquina virtual para la que sea sencillo trabajar. Es decir, ocultar el hardware (en adelante será referido como "hardware" o "HW" indistintamente). De esta forma, dos arquitecturas distintas con el mismo S.O. parecerán la misma máquina. Por ejemplo, una SUN-10 con SunOS 4.2 (UNIX BSD 4.2 para SUN) y un PC-386 con FreeBSD (UNIX BSD 4.2 para PC) se antojarán iguales al usuario (no en prestaciones, por supuesto). Por el contrario, una misma arquitectura con dos S.O. distintos se presentará como dos máquinas distintas. Por ejemplo, un PC será completamente distinto con MS-DOS 6.2 o con Slackware LINUX 1.2 (UNIX SYSTEM V para PC) como el que se regaló en el número 2 de Sólo Programadores.
Esta ocultación de hardware debe realizarse de un modo cómodo y seguro. Debe ser cómodo para poder utilizar los servicios del mismo sin problemas, aunque no directamente sino a través del S.O., en este caso, el UNIX. Y debe ser seguro para liberar al programador de la preocupación de evitar catástrofes, función de la que se debe encargar el propio sistema. A los programadores de DOS esto de la ocultación puede parecerles una desventaja, sin embargo esto es porque el DOS no realiza esta función, al menos, de forma "comoda y segura".
Desde una visión amplia, el S.O. debe suponer:
Un entorno de mantenimiento y creación de programas
Un interfaz sofisticado de operaciones para el programador, un intérprete de comandos
La correcta gestión de recursos del sistema.
Desde una visión más restringida, se considera el S.O. como el núcleo o kernel del sistema con las funciones y estructuras de datos necesarias para GESTIONAR recursos. Así pues, el S.O. debe:
ejecutar programas
asignar recursos (CPU)
encargarse de la protección del sistema
las operaciones de entrada y salida
la gestión de usuarios y procesos
la detección de errores y
la manipulación del sistema de ficheros.
Llegados a este punto, los programadores con experiencia en DOS advertirán que en la mayoría de los casos son ellos los que se encargan de estas funciones en lugar del propio sistema.
UNIX, como la mayoría de los S.O. actuales es un sistema multiusuario y multitarea. Esto influye en la gestión de la protección del sistema que soluciona de la siguiente forma:
Todas las operaciones de ENTRADA/SALIDA son realizadas por UNIX en el llamado modo supervisor, modo de ejecución en el que el S.O. toma control total del ordenador arrebatándoselo al programa de usuario. El usuario, sin embargo, tiene la impresión de ser él quien realiza la operación invocando una system call o llamada al sistema desde programa. La forma de una system call es la de una función C cualquiera y es la forma que tiene el usuario de interactuar con el sistema.
UNIX tiene un absoluto control de la memoria, gestionando límites de zona para usuarios y para sí mismo y proporcionando llamadas para petición y liberación. Podría compararse con el modo protegido de un extender de DOS.
Al ser un S.O. multiusuario y multitarea pero monoprocesador, debe realizar la gestión de la CPU asignándosela o arrebatándosela a los programas de usuario (sistema de tiempo compartido).
Es importante entender que un S.O. como UNIX "está en
todas partes" y "nada escapa a su control". De este
modo, existe un modo dual de ejecución de programas: modo
usuario en el que el programa de usuario tiene el control y modo
supervisor o monitor en el que es una rutina del propio S.O. la
que controla el ordenador.
La entrada en modo supervisor o
activación del S.O. se producirá por uno entre tres
motivos:
Una llamada al sistema
Una interrupción (hardware o software)
Un trap o interrupción especial hardware que generalmete aniquila el proceso que la provocó