Estructura

De Wikiunix

Estructura de Unix
Descripción de los componentes básicos de la un sistema operativo de la familia Unix: kernel, shell e interfaz
Tiempo 1 hora
Nivel Principiante
Bibliografía The Linux Kernel - David A Rusling (GFDL)
Prerrequisitos Ninguno

La estructura de Unix se asemeja a un típico modelo de capas, donde cada capa puede comunicarse únicamente con las capas que se hallan en los niveles inmediatamente inferior y superior.

Estructura en capas del sistema operativo

Contenido

Núcleo o Kernel

El núcleo o kernel es la parte del sistema operativo que sirve para interactuar con el hardware. Proporciona una serie de servicios que pueden ser utilizados por los programas, sin que éstos tengan que preocuparse de cómo se gestiona el hardware.

Utilidad

En general, el núcleo es el encargado de gestionar la memoria, mantener el sistema de archivos, del manejo de las interrupciones, manejo de errores, realización de los servicios de entrada/salida, asignación de los recursos de la CPU, gestión de periféricos de entrada/salida, entre otras funciones.

Cada programa se relaciona con la máquina a través del núcleo. Un programa realizará al núcleo las denominadas llamadas al sistema. Con estas el programa indicará, por ejemplo, que le abra un archivo, que escriba en otro, que utilice la impresora, que cambie la prioridad de ejecución de otro proceso, etcétera.

El núcleo Linux

En Linux, existen dos versiones del kernel:

Versión de producción
La versión de producción, es la versión estable hasta el momento. Esta versión es el resultado final de las versiones de desarrollo o experimentales. Cuando el equipo de desarrollo del núcleo experimental, decide que ha conseguido un núcleo estable y con la suficiente calidad, se lanza una nueva versión de produción o estable. Esta versión es la que se debería utilizar para un uso normal del sistema, ya que son las versiones consideradas más estables y libres de fallos en el momento de su lanzamiento.
Versión de desarrollo
Esta versión es experimental y es la que utilizan los desarrolladores para programar, comprobar y verificar nuevas características, correcciones, etc. Estos núcleos suelen ser inestables y no se deberían usar, a no ser que sepas lo que haces.

Las versiones del núcleo se numeran con 3 números, de la siguiente forma: XX.YY.ZZ

  • XX: Indica la serie principal del núcleo. Hasta el momento solo existen la 1 y 2. Este número cambia cuando la manera de funcionamiento del núcleo ha sufrido un cambio muy importante.
  • YY: Indica si la versión es de desarrollo o de producción. Un número impar, significa que es de desarrollo, uno par, que es de producción.
  • ZZ: Indica nuevas versiones dentro de una versión, en las que lo único que se ha modificado son fallos de programación o bugs.

Referencias



Shell

El shell es un programa que nos ayuda a interactuar con el sistema operativo. Se suele denominar en español "intérprete de mandatos" o "interfaz de órdenes".

Actúa como interfaz de comunicación entre el usuario y el ordenador, y cuando un usuario accede a un sistema Unix, automáticamente se arranca un Shell para que pueda trabajar. Cada usuario conectado al servidor tendrá un shell para su uso (no tiene porqué ser el mismo para todos).

Ejemplos de utilidad de la shell

Por ejemplo, algunas funcionalidades que suelen implementar son:

  • Recordar el "directorio de trabajo" establecido con cd. Así, por ejemplo, no es necesario escribir en todas las órdenes los nombres absolutos de los ficheros.
  • Caracteres comodines. Por ejemplo, si queremos copiar 100 ficheros con fotos en un disco USB, no es necesario escribir "cp 00.jpg 01.jpg ... /media/disk", bastaría con "cp *.jpg /media/disk"
  • Definición de alias. De este modo, se puede poner un nombre más fácil de recordar a una orden. Por ejemplo: si quiero que los listados con "ls" aparezcan coloreados siempre puedo hacer: alias ls='ls --color'
  • Algunos shells, como Bash, tiene programas para el control "fino" de procesos (como fg, bg, etc)


Shells en Unix

La independencia del shell respecto al kernel del operativo (el shell es sólo una capa de interfaz), nos permite disponer de varios de ellos en el sistema, entre ellos los siguientes:

  • Shell Bourne (sh):

Creado por Stephen Bourne, es el más utilizado en la actualidad. El prompt del sistema queda representado por el símbolo "$" ("#" en caso de ser administrador). Este shell es el estándar de AT&T y el que se monta en casi todos los sistemas Unix/Linux.

  • C-Shell (csh):

Procedente del sistema BSD, proporciona características tales como control de trabajos, historial de órdenes, capacidades de edición, etc. Ofrece importantes características para los programadores que trabajan en lenguaje C. Su prompt de sistema queda representado con el símbolo "%". Fue desarrollado en la Universidad de Berkeley por Bill Joy a finales de los setenta y tiene unos cuantos añadidos interesantes al Bourne, como un histórico de comandos, alias, aritmética desde la línea de comandos, completa nombres de ficheros y hace control de trabajos en segundo plano. El prompt por defecto para los usuarios es ‘%’. Los usuarios UNIX suelen preferir este shell como interactivo, pero los administradores UNIX prefieren utilizar el Bourne, ya que los scripts suelen quedar más compactos, y la ejecución suele ser más rápida. Por otro lado, una ventaja de los scripts en C shell es que, como su nombre indica, su sintaxis está basada en el lenguaje C (aunque no igual).

  • Shell job (jsh):

Incorpora algunas características de control al shell estándar del sistema.

  • Shell Korn (ksh):

Escrito por David Korn, amplia el shell del sistema añadiendo historial de órdenes, edición de la línea de ordenes y características ampliadas de programación.

  • Bourne Again shell (Bash):

Fue creado para usarlo en el proyecto GNU. BASH, por lo tanto, es un shell o intérprete de comandos GNU; éste es compatible con el shell sh. Además, incorpora algunas características útiles de ksh y csh, y otras propias, como la edición de línea de comandos, tamaño ilimitado del histórico de comandos, control de trabajos y procesos, funciones y alias, cálculos aritméticos con números enteros, etcétera. Es el shell GNU/Linux por defecto. El shell Bash (Bourne again shell) [Bas] [Coo] ha adquirido importancia desde su inclusión en los sistemas GNU/Linux como shell por defecto. Este shell forma parte del software del proyecto GNU. Es un intento de combinar los tres shell anteriores (Bourne, C y Korn), manteniendo la sintaxis del shell Bourne original. Es en el que nos vamos a fijar para desarrollar ejemplos posteriores.

¿Qué shell estamos ejecutando?

Una forma rápida de conocer bajo qué shell nos encontramos como usuarios es mediante la variable $SHELL, desde una línea de comandos con la instrucción:
echo $SHELL
o también utilizando la órden:
ps PID TTY TIME CMD
1244 pts/5 00:00:00 bash
4657 pts/5 00:00:00 ps


Interfaces de usuario

Éstas se definen como la parte del Sistema Unix que determina cómo interactúa el usuario con él, es decir, de qué forma el usuario introduce comandos o cualquier otra información y cómo el sistema visualiza los mensajes después de procesar tal información.

La interfaz primaria o básica del Unix es de tipo texto y hasta no hace mucho ha sido la única para el sistema. Actualmente hay interfaces gráficas como el X Windows, Open Look, GNOME o KDE. La interfaz de tipo texto es la que se muestra al cargar el shell por defecto o el deseado. Las básicas son las mismas que las explicadas en el punto 13.4.A de esta unidad, aunque hay más.

En cuanto a la interfaz gráfica X-Windows, la característica fundamental es que incorpora un modelo cliente-servidor para el modo en que las aplicaciones interactúan con los dispositivos terminales. Incorpora también un protocolo de red y varias herramientas software que pueden ser utilizadas para crear aplicaciones basadas en X Windows.

Un concepto fundamental es la separación de las aplicaciones con respecto al software que maneja la entrada y salida por Terminal. Todas las operaciones realizadas mediante la entrada o salida estándar (teclado y monitor) son manejadas por un programa que se dedica exclusivamente a ello (servidor). Las aplicaciones (clientes) envían al servidor información a visualizar, y el servidor envía a las aplicaciones información referente a la entrada de usuario. Para gestionar este modelo, se utiliza el protocolo de red X. Este protocolo es un lenguaje estándar utilizado por las aplicaciones clientes para enviar instrucciones a los servidores X, y por los servidores para enviar la información transformada a los clientes (por ejemplo, el movimiento del ratón).

La interfaz OPEN LOOK ha sido diseñada por AT&T y Sun Microsystems como interfaz gráfica estándar para el sistema Unix/Linux. Esta interfaz permite ejecutar y visualizar varias aplicaciones simultáneamente en ventanas separadas sobre una misma pantalla. En general, todas las operaciones de gestión de archivos se realizan de forma gráfica gracias a la interfaz OPEN LOOK.

La interfaz KDE 3.2 para Linux SUSE, ahora con un potente gestor de información personal (PIM), incorpora, además de la función de inicio rápido y la reproducción automática de los medios introducidos (CD, DVD), KDE 3.2, un gran número de nuevas prestaciones y programas.

La interfaz GNOME 2.4 ha mejorado la usabilidad y se han incluido ayudas de accesibilidad para discapacitados, como, por ejemplo, un lector de pantalla con salida de voz o a una línea braille.

Ejercicios (ver soluciones)

  1. Averigua la versión del kernel de tu equipo.

Enlaces externos

Herramientas personales