3.0 Vista general de un sistema GNU/Linux

"Dios observ todo lo que haba hecho, y vi que esto era muy bueno" -- 
Versin de la Biblia del Rey James. Gnesis 1:31

En este captulo se proporciona una vista general de un sistema GNU/Linux. 
Primeramente sern descriptos los servicios principales del sistema operativo. 
Luego, se explica, con una falta considerable de detalle, los programas que 
implementan dichos servicios. El propsito de este captulo es dar una 
explicacin del sistema como un todo, de manera tal que cada parte se 
encuentre especificada en detalle en captulos posteriores.



3.1 Varias partes de un sistema operativo

Un sistema operativo UNIX consiste de un kernel y de algunos programas del 
sistema. Existen tambin algunos programas de aplicacin para trabajar. El 
kernel es le corazn del sistema operativo. Sigue con atencin a 
los archivos sobre el disco, inicia programas y los ejecuta concurrentemente, 
asigna memoria y otros recursos a los procesos, recibe y enva paquetes desde 
y hacia la red, etc. El kernel hace muy poco por si solo, en realidad otorga 
herramientas con las cuales todos los servicios pueden ser construdos. Adems 
evita que se acceda al hardware directamente, forzando a todos a utilizar las 
herramientas provistas. Esta manera de trabajar del kernel otorga cierta 
proteccin a los usuarios entre s. Las herramientas provistas por el kernel 
son utilizadas a travs de llamadas al sistema (system calls). Vea las pginas 
de manual de la seccin 2 para ms informacin sobre este tema.

Los programas del sistema utilizan las herramientas provistas por el kernel 
para implementar varios servicios requeridos en un sistema operativo. Los 
programas del sistema y todos los dems programas, se ejecutan 'por encima del 
kernel', en lo que se denomina modo usuario. La diferencia entre los programas 
de aplicacin y los del sistema es su finalidad: las aplicaciones tienen el 
propsito de realizar tareas tiles a los usuarios (o para jugar, si se 
tratata de un juego), mientras que los programas del sistema son necesarios 
para que el sistema funcione. Un procesador de textos es una aplicacin; mount 
es un porgrama del sistema. La diferencia a menudo es confusa, y de cualquier 
manera, es solo importante en categorizaciones compulsivas.

Un sistema operativo tambin puede contener compiladores y sus 
correspondientes libreras (GCC y la librera de C en particular para 
GNU/Linux), aunque no todos los compiladores de todos los lenguajes de 
programacin necesitan ser parte del sistema operativo. Tambin puede haber 
documentacin, y en algunas ocaciones juegos. Tradicionalmente, el sistema 
operativo est definido por el contenido de los discos o cintas de 
instalacin; con GNU/Linux esta definicin no puede aplicarse, debido a que se 
encuentra extendido sobre distintos sitios FTP del mundo.


3.2 Partes importantes del kernel

El kernel de un sistema GNU/Linux consiste de varias partes importantes: un 
administrador de procesos, un administrador de memoria, varios controladores 
para dispositivos de hardware, controladores de sistemas de archivos, un 
administrador de red, y varias otras piezas y bits.

Probablemente las partes ms importantes del kernel (nada trabajara sin 
ellas) son el administrador de memoria y el administrador de procesos. El 
administrador de memoria se encarga de asignar reas de memoria y reas de 
espacio de swap a procesos, partes del kernel, y al buffer cach. El 
administrador de procesos se encarga de crear procesos, e implementar 
multitarea intercambiando los procesos activos en el procesador.

A ms bajo nivel, el kernel contiene un controlador de dispositivo de 
hardaware para cada tipo de hardware que este soporte. Debido a que el mundo 
se encuentra lleno de diferentes tipos de hardware, el nmero de controladores 
de dispositivos de hardware es grande. Existen frecuentemente, muchas piezas 
similares de hardware que difierren en como ellas son controladas por 
software. La similaridad hace posible tener clases generales de controladores 
que soportan operaciones similares; cada miembro de la clase tiene la misma 
interfase para el resto del kernel pero difieren en como estas necesitan ser 
implementadas. Por ejemplo, todas las unidades de disco se parecen para el 
resto del kernel, i.e., todas tienen operaciones como "iniciar la unidad", 
"leer el sector n", y "escribir en el sector n".

Algunos servicios de software provistos por el kernel tienen propiedades 
similares, y pueden de esta manera ser abstradas dentro de clases. Por 
ejemplo, varios protocolos de red fueron abstrados dentro de una interfase de 
programacin, la librera de socket BSD. Otro ejemplo es la capa del sistema 
de archivos virtual (VFS) que abstrae las operaciones de los sistemas de 
archivos de sus implementaciones. Cada tipo de sistema de archivos provee una 
implementacin de cada operacin. Cuando alguna entidad intenta utilizar un 
sistema de archivos, el requisito se realiza va el VFS, el cual rutea el 
requisito al controlador del sistema de archivos correcto.


3.3 Servicios principales en un sistema UNIX

En esta seccin se describe algunos de los ms importantes servicios en UNIX, 
pero sin mucho detalle. Ellos sern descriptos ms profundamente en captulos 
posteriores.


3.3.1 Init

El servicio individual ms importante en un sistema UNIX es provisto por 
init. Init es el primer proceso de todo sistema UNIX, es iniciado por el 
kernel, como la ltima accin que este realiza cuando el sistema inicia. 
Cuando init comienza su ejecucin, contina con el proceso de arranque del 
sistema, realizando varias tareas de inicio (chequear y montar sistemas de 
archivos, iniciar demonios, etc).

La lista exacta de cosas que init realiza depende en cual gusto tenga; existen 
varias para seleccionar. init usualmente provee el concepto de modo de usuario 
individual, en el cual nadie puede iniciar una sesin y root utiliza un 
intrprete de comandos en la consola; el modo usual es llamado modo 
multiusuario. Algunos gustos generalizan esto como niveles de ejecucin; los 
modos individual y multiusuario son considerados dos niveles de ejecucin, y 
pueden existir otros niveles adicionales, como por ejemplo, para ejecutar X en 
la consola.

GNU/Linux permite tener hasta 10 niveles de ejecucin distintos, 0-9, pero 
usualmente solo algunos de estos niveles son definidos por defecto. El nivel 
de ejecucin 0 es definido como "system halt" (sistema detenido). El nivel de 
ejecucin 1 est definido como "single user mode" (modo de usuario 
individual). El nivel de ejecucin 6 es definido como "system reboot" 
(re-inicio del sistema). Los niveles de ejecucin restantes dependen en como 
tu distribucin particular GNU/Linux los haya definido, y varan 
significativamente entre distribuciones. Observando el contenido del archivo 
/etc/inittab podemos darnos cuenta de los niveles de ejecucin predefinidos en 
nuestro sistema y de como se encuentran definidos.

En operacin normal, init se asegura de que getty se encuentre trabajando 
(para permitir que los usuarios puedan iniciar una sesin), y tambin se 
encarga de adoptar procesos hurfanos (procesos cuyos padres murieron; en UNIX 
todos los procesos deben estar en un rbol individual, por esta razn los 
procesos hurfanos deben ser adoptados).

Cuando el sistema se cierra, init se encarga de matar a todos los procesos 
restantes, desmontar todos los sistemas de archivos, y por ltimo, frenar el 
procesador, junto con cualquier otra cosa, que init haya sido configurado para 
hacer.



3.3.2 Inicio de sesiones desde terminales

El inicio de sesiones desde terminales (a travs de lineas seriales) y la 
consola (cuando no se est ejecutando X) son suministrados por el programa 
getty. Init inicia una instancia separada de getty por cada terminal en el que 
se est permitido iniciar sesiones. Getty lee el nombre de usuario y ejecuta 
el programa login, el cual se encarga de leer la password. Si el nombre de 
usuario y la password son correctas, login ejecuta un intrprete de comandos. 
Cuando el intrprete de comandos finaliza, en el caso en que, por ejemplo, el 
usuario finaliza su sesin; o cuando, login finaliza, debido a que no 
concuerdan el nombre de usuario y la password, entonces init se entera de este 
suceso e inicia una nueva instancia de getty. El kernel no tiene nocin sobre 
los inicio de sesiones, esto es totalmente manejado por los programas del 
sistema.


3.3.3 Syslog

El kernel y muchos programas del sistema, producen mensajes de errores, de 
advertencias y de otros tipos. La mayora de las veces, es importante que 
puedan ser visualizados mas tarde, o tal vez mucho despus, por lo que, tales 
mensajes deben ser guardados en un archivo. El programa que realiza esta tarea 
es syslog. Syslog puede ser configurado para ordenar los mensajes en 
diferentes archivos, de acuerdo a quien lo emite o al grado de importancia. 
Por ejemplo, los mensajes del kernel son frecuentemente dirigidos a un archivo 
separado de los dems, debido a que los mensajes del kernel son a menudo ms 
importantes, y necesitan ser ledos regularmente para detectar problemas.



3.3.4 Ejecucin de comandos peridicos: cron y at

Los administradores de sistemas y los usuarios, frecuentemente necesitan 
ejecutar comandos peridicamente. Como ejemplo, suponga que el administrador 
del sistema desea ejecutar un comando que elimine los archivos ms antiguos de 
los directorios con archivos temporales (/tmp y /var/tmp); para evitar as, 
que el disco se llene; debido a que, no todos los programas, eliminan 
correctamente los archivos temporales que ellos mismos generan.

El servicio cron se configura para que realice la tarea anterior. Cada usuario 
tiene un archivo crontab, en donde se listan los conmandos que desea ejecutar 
y la fecha y hora que estos deben ser iniciados. El demonio cron se encarga 
con precisin, de iniciar cada comando, a la fecha y hora adecuada de acuerdo 
a lo especificado en cada archivo crontab.

El servicio at es similar a cron, pero este es nicamente de una sola vez: el 
comando es ejecutado a la hora especificada, pero esta ejecucin no vuelve a 
repetirse.

Vea las pginas de manual de cron(1), crontab(5), at(1) y atd(8) para 
conocer ms informacin en profundidad.


3.3.5 Interfase de usuario grfico

UNIX y GNU/Linux no incorporan la interfase de usuario dentro del kernel; en 
su lugar, esta es implementada por programas a nivel de usuario. Esto se 
aplica tanto para ambientes grficos como al modo texto.

Esta disposicin hace que el sistema sea ms flexible, pero tiene la 
desventaja, de que al ser simple implementar una interfase de usuario 
diferente para cada programa, hace al sistema difcil de aprender.

El ambiente grfico principalmente utilizado con GNU/Linux se llama Sistema de 
Ventanas X (X para abreviar). X no implementa una interfase de usuario; solo 
implementa el sistema de ventanas, i.e., las herramientas con las cuales una 
interfase de usuario grfica puede ser implementada. Algunos administradores 
de ventanas populares son: fvwm, icewm, blackbox y windowmaker. Existen 
tambin dos populares administradores de escritorios: KDE y Gnome.


3.3.6 Redes

Una red es el hecho de conectar dos o mas computadoras para que cada una pueda 
comunicarse con cualquier otra. Los mtodos actuales de conexin y 
comunicacin son significantemente complicados, pero el resultado final es 
muy til.

Los sistemas operativos UNIX tienen muchas caractersticas de redes. Los 
principales servicios bsicos (sistemas de archivos, impresin, copias de 
seguridad, etc) pueden ser realizados a travs de la red. Utilizar estas 
caractersticas puede ayudar a que la administracin del sistema sea mas 
fcil, debido a que permiten tener una administracin centralizada, mientras 
aprovechamos los beneficios de la microcomputacin y la computacin 
distribuda, tales como costos bajos y mejor tolerancia a fallas.

De cualquier modo, este libro simplemente hecha un vistazo a la teora de 
redes; vea La Gua  De Administracin De Redes Con Linux para ms informacin, 
incluyendo una descripcin bsica de como operan las redes.



3.3.7 Inicio de sesiones a travs de la red

Los inicios de sesiones a travs de la red trabajan de un modo un poco 
diferente con respecto al inicio de sesiones normales. Existe una linea serial 
fsica separada para cada terminal, a travs de las cuales, es posible iniciar 
sesiones. Por cada persona iniciando una sesin a travs de la red, existe una 
conexin de red virtual, y estas pueden ser de cualquier nmero (en cantidad). 
Por lo tanto, no es posible ejecutar a getty por separado por cada conexin 
virtual posible. Existen tambin, varias maneras diferentes para iniciar una 
sesin a travs de la red, las principales en redes TCP/IP son telnet y rlogin 
[1] .

Los inicios de sesin a travs de la red, tienen, en vez de una cantidad 
enorme de gettys, un demonio individual por tipo de inicio de sesin (telnet y 
rlogin tienen demonios separados), que se encuentran atentos (Listen) a todos 
los intentos de inicio se sesin entrantes. Cuando el demonio se notifica de 
un intento de inicio de sesin, inicia una nueva instancia de si mismo para 
atender el pedido individual; la instancia original contina escuchando por 
otros intentos. La nueva instancia trabaja de manera similar a getty.

[1] N.d.T.: ssh es la manera segura, debido a la utilizacin de comunicacin 
encriptada, de iniciar sesiones remotas actualmente.
3.3.8 Sistemas de archivos de red (NFS)

Una de las tareas ms tiles que puede realizarse con los servicios de 
red, es compartir archivos a travs de un sistema de archivos de red. El 
modelo cliente-servidor ms utilizado para compartir archivos se llama Sistema 
de Archivos de Red (Network File System), o NFS, desarrollado por Sun 
Microsystems.

Con un sistema de archivos de red, cualquier operacin sobre un archivo 
realizado por un programa en una mquina, es enviada a travs de la red a otra 
computadora. Se "engaa" al programa, hacindole creer que todos los archivos 
en la otra computadora se encuentran actualmente en la computadora en donde el 
programa se est ejecutando. Con esta manera de trabajar, compartir 
informacin es extremadamente simple, ya que no se requiere modificaciones en 
el programa.

Otra manera popular de compartir archivos es a travs de Samba 
(http://www.samba.org). Este protocolo (el SMB) permite compartir archivos con 
mquinas MS Windows (a travs de redes Vecinas [Neighbourhood]). Tambin es 
posible compartir impresoras con estas mquinas.


3.3.9 Correo

El correo electrnico es usualmente el mtodo ms popular para comunicarse a 
travs de las computadoras. Una carta electrnica es almacenada en un archivo 
utilizando un formato especial, y programas de correos especiales son 
utilizados para enviar y leer las cartas.

Cada usuario tiene un buzn de correo entrante (un archivo con formato 
especial), en donde todos los correos nuevos son almacenados. Cuando alguien 
enva correos, el programa de correo localiza el buzn de correo receptor y 
agrega la carta al archivo de buzn de correo entrante. Si el buzn de correo 
receptor se encuentra en otra mquina, la carta es enviada a la otra mquina, 
la cual lleva la carta al buzn de correo como mejor crea conveniente.

El sistema de correo consiste de muchos programas. El transporte del correo a 
buzones de correo local o remoto es realizado por un programa (el agente de 
transporte de correo o MTA, sendmail y smail son dos ejemplos de estos), 
mientras que existen un sinnmero de programas muy variados que los usuarios 
utlizan para leer y escribir correos (agentes de usuario de correo o MUA, pine 
y elm son ejemplos de estos). Los archivos de buzones de correo estn 
usualmente ubicados en /var/spool/mail.


3.3.10 Imprimiendo

Solo una persona puede utilizar la impresora en un momento dado, pero no sera 
econmico no compartir impresoras entre los usuarios. La impresora es por lo 
tanto administrada por software que implementan una cola de impresin: todas 
los trabajos de impresin son colocados dentro de una cola, y una vez que la 
impresora termina de imprimir una tarea, el prximo trabajo es enviado a la 
impresora automticamente. Esto alivia al usuario de la organizacin de la 
cola de impresin y de luchar por el control de la impresora.

El software de cola de impresin tambin coloca (spools) los trabajos de 
impresin en disco, por ejemplo, el texto a imprimir es mantenido en un 
archivo, mientras que el trabajo se encuentre en la cola. Esto permite a los 
programas de aplicacin entregar las tarea a imprimir rpidamente al 
software que administra la cola de impresin; as, las aplicaciones no tienen 
que esperar a que la tarea (job) est actualmente impresa para poder continuar 
su ejecucin. Esta manera de proceder es realmente conveniente, ya que permite 
enviar a imprimir una versin de un trabajo, y no tener que esperar a que esta 
sea impresa, antes de que pueda hacerse una versin nueva completamente 
revisada.


3.3.11 La distribucin del sistema de archivos

El sistema de archivos est dividido en muchas partes; usualmente a travs de 
las lneas de un sistema de archivos raz con /bin, /lib, /etc, /dev, y 
algunos otros pocos directorios; un sistema de archivos /usr con programas y 
datos que no tendrn cambios; un sistema de archivos /var con datos que pueden 
cambiar (tales como los archivos de log); y un sistema de archivos /home para 
todos los archivos personales. Dependiendo de la configuracin del hardware y 
de las decisiones del administrador del sistema, la divisin puede llegar a 
ser diferente; a pesar de esto, y a que la divisin es aconsejable, es tambin 
posible distribuir todos los archivos en un solo sistema de archivos.

En el Captulo 4 se describe la distribucin del sistema de archivos con 
algunos detalles; el Linux Filesystem Standart cubre esta distribucin con ms 
detalle.


