lunes, 28 de febrero de 2011

LINUX
Historia
En abril de 1991, Linux Torvalds, de 21 años, empezó a trabajar en unas simples ideas para un núcleo de sistema operativo. Comenzó con un intento por obtener un núcleo de sistema operativo gratuito similar a Unix que funcionara con microprocesadores Intel 80386. Luego, el 25 de agosto de 1991, Torvalds escribió en el grupo de noticias comp.os.minix:4
"Estoy haciendo un sistema operativo (gratuito, sólo un hobby, no será nada grande ni profesional como GNU) para clones AT 386(486). Llevo en ello desde abril y está empezando a estar listo. Me gustaría saber su opinión sobre las cosas que les gustan o disgustan en minix, ya que mi SO tiene algún parecido con él.[...] Actualmente he portado bash(1.08) y gcc(1.40), y parece que las cosas funcionan. Esto implica que tendré algo práctico dentro de unos meses..."
Después de esto, muchas personas ayudaron con el código. En septiembre de 1991 se lanzó la versión 0.01 de Linux. Tenía 10.239 líneas de código. En octubre de ese año, se lanzó la versión 0.02 de Linux; luego, en diciembre se lanzó la versión 0.11. Esta versión fue la primera en ser self-hosted (autoalbergada). Es decir, Linux 0.11 podía ser compilado por una computadora que ejecutase Linux 0.11, mientras que las versiones anteriores de Linux se compilaban usando otros sistemas operativos. Cuando lanzó la siguiente versión, Torvalds adoptó la GPL como su propio boceto de licencia, la cual no permitía su redistribución con otra licencia que no sea GPL.
Se inició un grupo de noticias llamado alt.os.linux y el 19 de enero de 1992 se publicó en ese grupo el primer post. El 31 de marzo,alt.os.linux se convirtió en comp.os.linux. XFree86, una implementación del X Window System, fue portada a Linux, la versión del núcleo 0.95 fue la primera en ser capaz de ejecutarla. Este gran salto de versiones (de 0.1x a 0.9x) fue por la sensación de que una versión 1.0 acabada no parecía estar lejos. Sin embargo, estas previsiones resultaron ser un poco optimistas: desde 1993 a principios de 1994, se desarrollaron 15 versiones diferentes de 0.99 (llegando a la versión 0.99r15).
El 14 de marzo de 1994, se lanzó Linux 1.0.0, que constaba de 176.250 líneas de código. En marzo de 1995 se lanzó Linux 1.2.0, que ya estaba compuesto de 310.950 líneas de código.
En mayo de 1996 Torvalds decidió adoptar al pingüino Tux como mascota para Linux.
La versión 2 de Linux se lanzó el 9 de junio de 1996 y fue un gran éxito. A éste le siguieron grandes desarrollos:
 25 de enero de 1999: se lanzó Linux 2.2.0 con 1.800.847 líneas de código.
 18 de diciembre de 1999: se publicaron parches de IBM Mainframe para 2.2.13, permitiendo de esta forma que Linux fuera usado en ordenadores corporativos.
 4 de enero de 2001: se lanzó Linux 2.4.0 con 3.377.902 líneas de código.
 17 de diciembre de 2003: se lanzó Linux 2.6.0 con 5.929.913 líneas de código.
 24 de diciembre de 2008: se lanzó Linux 2.6.28 con 10.195.402 líneas de código.5
 20 de octubre de 2010: se lanzó Linux 2.6.36 con 13.499.457 líneas de código.6
Actualmente se puede bajar el código fuente desde su sitio web oficial.

Arquitectura

Actualmente Linux es un núcleo monolítico híbrido. Los controladores de dispositivos y las extensiones del núcleo normalmente se ejecutan en un espacio privilegiado conocido como anillo 0(ring 0), con acceso irrestricto al hardware, aunque algunos se ejecutan en espacio de usuario. A diferencia de los núcleos monolíticos tradicionales, los controladores de dispositivos y las extensiones al núcleo se pueden cargar y descargar fácilmente como módulos, mientras el sistema continúa funcionando sin interrupciones. También, a diferencia de los núcleos monolíticos tradicionales, los controladores pueden ser prevolcados (detenidos momentáneamente por actividades más importantes) bajo ciertas condiciones. Esta habilidad fue agregada para gestionar correctamente interrupciones de hardware, y para mejorar el soporte de multiprocesamiento simétrico.
El hecho de que Linux no fuera desarrollado siguiendo el diseño de un micronúcleo (diseño que, en aquella época, era considerado el más apropiado para un núcleo por muchos teóricos informáticos) fue asunto de una famosa y acalorada discusión entre Linus Torvalds y Andrew S. Tanenbaum

Jerarquía de directorios

En Linux existe un sistema de archivos que carga y contiene todos los directorios, redes, programas, particiones, dispositivos, etc. que el sistema sabe reconocer, o por lo menos, identificar. Este sistema de ficheros y directorios, tiene como base al carácter (/); ese mismo carácter sirve también para demarcar los directorios, como por ejemplo: "/home/usuario/imagen.jpg". El directorio especificado por una ruta consistente sólo por este carácter contiene toda la jerarquía de los directorios que constituyen todo el sistema. A este directorio suele llamárselo directorio raíz. En Linux, a los discos no se les asigna una letra como en Windows (p.e. "C:"), sino que se les asigna un directorio de la jerarquía del directorio raíz (/), como por ejemplo: "/media/floppy". Es práctica común en el sistema de ficheros de Linux, utilizar varias sub-jerarquías de directorios, según las diferentes funciones y estilos de utilización de los archivos.8 Estos directorios pueden clasificarse en:
 Estáticos: Contiene archivos que no cambian sin la intervención del administrador (root), sin embargo, pueden ser leídos por cualquier otro usuario. (/bin, /sbin, /opt, /boot, /usr/bin...)
 Dinámicos: Contiene archivos que son cambiantes, y pueden leerse y escribirse (algunos solo por su respectivo usuario y el root). Contienen configuraciones, documentos, etc. Para estos directorios, es recomendable una copia de seguridad con frecuencia, o mejor aún, deberían ser montados en una partición aparte en el mismo disco, como por ejemplo, montar el directorio /home en otra partición del mismo disco, independiente de la partición principal del sistema; de esta forma, puede repararse el sistema sin afectar o borrar los documentos de los usuarios. (/var/mail, /var/spool, /var/run, /var/lock, /home...)
 Compartidos: Contiene archivos que se pueden encontrar en un ordenador y utilizarse en otro, o incluso compartirse entre usuarios.
 Restringidos: Contiene ficheros que no se pueden compartir, solo son modificables por el administrador. (/etc, /boot, /var/run, /var/lock...)

Kernel panic


En Linux, un “panic” es un error insalvable del sistema detectado por el núcleo en oposición a los errores similares detectados en el código del espacio de usuario. Es posible para el código del núcleo indicar estas condiciones mediante una llamada a la función de pánico situada en el archivo header sys/system.h. Sin embargo, la mayoría de las alertas son el resultado de excepciones en el código del núcleo que el procesador no puede manejar, como referencias a direcciones de memorias inválidas. Generalmente esto es indicador de la existencia de un bug en algún lugar de la cadena de alerta. También pueden indicar un fallo en el hardware como un fallo de la RAM o errores en las funciones aritméticas en el procesador, o por un error en el software. En muchas ocasiones es posible reiniciar o apagar adecuadamente el núcleo mediante una combinación de teclas comoALT+SysRq+RSEIUB.

Lenguajes de programación
Linux está escrito en el lenguaje de programación C, en la variante utilizada por el compilador GCC (que ha introducido un número de extensiones y cambios al C estándar), junto a unas pequeñas secciones de código escritas con el lenguaje ensamblador. Por el uso de sus extensiones al lenguaje, GCC fue durante mucho tiempo el único compilador capaz de construir correctamente Linux. Sin embargo, Intelafirmó haber modificado su compilador C de forma que permitiera compilarlo correctamente.
Asimismo se usan muchos otros lenguajes en alguna forma, básicamente en la conexión con el proceso de construcción del núcleo (el método a través del cual las imágenes arrancables son creadas desde el código fuente). Estos incluyen a Perl, Python y varios lenguajes shell scripting. Algunos drivers también pueden ser escritos en C++, Fortran, u otros lenguajes, pero esto no es aconsejable. El sistema de construcción de Linux oficialmente solo soporta GCC como núcleo y compilador de controlador.
[

Portabilidad

Aun cuando Linus Torvalds no ideó originalmente Linux como un núcleo portable, ha evolucionado en esa dirección. Linux es ahora de hecho, uno de los núcleos más ampliamente portados, y funciona en sistemas muy diversos que van desde iPAQ (una handheld) hasta un zSeries (un mainframemasivo). Está planeado que Linux sea el sistema operativo principal de las nuevassupercomputadoras de IBM, Blue Gene cuando su desarrollo se complete.
De todos modos, es importante notar que los esfuerzos de Torvalds también estaban dirigidos a un tipo diferente de portabilidad. Según su punto de vista, la portabilidad es la habilidad de compilar fácilmente en un sistema aplicaciones de los orígenes más diversos; así, la popularidad original de Linux se debió en parte al poco esfuerzo necesario para tener funcionando las aplicaciones favoritas de todos, ya sean GPL o de Código abierto.
Las arquitecturas principales soportadas por Linux son DEC Alpha, ARM, AVR32, Blackfin, ETRAX CRIS, FR-V, H8, IA64, M32R, m68k, MicroBlaze, MIPS, MN10300, PA-RISC, PowerPC, System/390,SuperH, SPARC, x86, x86 64 y Xtensa9


Arquitectura de máquina virtual
El núcleo Linux puede correr sobre muchas arquitecturas de máquina virtual, tanto como host del sistema operativo o como cliente. La máquina virtual usualmente emula la familia de procesadores Intel x86, aunque en algunos casos también son emulados procesadores de PowerPC o AMD.

Formatos binarios soportados
Linux 1.0 admitía sólo el formato binario a.out. La siguiente serie estable (Linux 1.2) agregó la utilización del formato ELF, el cual simplifica la creación de bibliotecas compartidas (usadas de forma extensa por los actuales ambientes de escritorio como GNOME y KDE). ELF es el formato usado de forma predeterminada por el GCC desde alrededor de la versión 2.6.0. El formato a.out actualmente no es usado, convirtiendo a ELF en el formato binario utilizado por Linux en la actualidad.
Linux tiene la capacidad de permitir al usuario añadir el manejo de otros formatos binarios. También binfmt_misc permite correr el programa asociado a un archivo de datos.
[

Versiones
Más allá de haber desarrollado su propio código y de integrar los cambios realizados por otros programas, Linus Torvalds continua lanzando nuevas versiones del núcleo Linux. Estos son llamados núcleos “vanilla”, lo que significa que no han sido modificados por nadie. Muchos desarrolladores de distribuciones Linux modifican dicho núcleo en sus productos, principalmente para agregarle soporte a dispositivos o herramientas que no fueron oficialmente lanzadas como estables, mientras que algunas distribuciones, como Slackware, mantienen el núcleo vanilla.

martes, 22 de febrero de 2011

UNIX

Entre 1965 y 1969, los Laboratorios Bell participaron con General Electric (Más tarde Honeywell) y Project MAC (Del Massachusetts Institute of Technology) en el desarrollo del sistema Multics. Este sistema diseñado para la macrocomputadora GE-645, era demasiado grande y complejo. Los diseñadores de Multics tenían en mente un programa de utilidad general que pudiera ser en esencia "todo para el mundo".

Al avanzar los trabajos se hizo evidente que aunque Multics proporcionaría con toda probabilidad la diversidad de servicios requerida, sería un sistema enorme, costoso y torpe. Por estas y muchas otras razones, los Laboratorios Bell se retiraron del proyecto en 1969. Algunos de los miembros de investigación de Bell comenzaron a trabajar en un sistema mucho menos ambicioso. El grupo, dirigido por Ken Thompson, buscaba crear un ambiente de computación sencillo para investigación y desarrollo de programas potentes. La primera versión de un sistema UNIX se creó para un DEC PDP-7 y se escribió en lenguaje ensamblador.

Thompson llevó a la práctica un sistema de archivos, un mecanismo de control de procesos, programas para el manejo general de archivos y un intérprete de mandatos (Comandos). En 1970 Brian Kernighan acuñó el nombre "UNIX" haciendo un juego de palabras con Multics; de hecho, en el sentido en que Multics era "multi", los sistemas UNIX eran sin duda servicios de computación "uni", limitados.

Cuando apareció la PDP-11, su atractivo precio permitió al grupo adquirir la máquina. No contaba con apoyo para la multiprogramación; la computadora tenía sólo 24K y el sistema ocupaba 16K ; por tanto quedaban 8K reservados para el usuario. El tamaño máximo de archivo era de 64Kbytes. La aplicación principal era el procesamiento de textos. No había protección del almacenamiento, de modo que el sistema podía al ejecutarse caerse con facilidad durante la prueba de un programa nuevo. El disco era pequeño, apenas 500 Kilobytes.

Dennis Ritchie se unió a la labor de desarrollo y ayudó a rescribir los sistemas UNIX en C en 1973. Esto ayudó a que los programas de los sistemas UNIX se volvieran más portátiles y comprensibles.

Las contribuciones de Thompson y Ritchie recibieron como reconocimiento el premio Turing, el de más prestigio en la comunidad de computación.

Antes de la liberalización, AT&T no tenía permiso para competir en la industria de la informática, por lo que ofreció los sistemas UNIX a las universidades por una cuota nominal. Además de distribuir el código fuente, fomentando así el desarrollo adicional y las innovaciones.

Una de las universidades que adquirió una licencia de Unix fue la Universidad de California en Berkeley. La motivación principal era poder experimentar con el primer sistema operativo que incluía código fuente. Al poco tiempo, la gente de Berkeley había escrito varios programas utilitarios para Unix que otros investigadores podrían encontrar útiles. La Universidad decidió entonces distribuir este código a la comunidad y le llamó a sus distribuciones BSD (Berkeley Software Distribution). A pesar que al principio las distribuciones de Berkeley consistían principalmente en herramientas para los usuarios, muy pronto comenzaron a cambiar la forma en que el propio sistema operativo funcionaba. Implementaron el manejo de memoria virtual y programaron el soporte para los protocolos del Arpanet que luego se convertiría en el conocido Internet. Todos estos cambios eran distribuidos como BSD a quienes tenían una licencia de Unix de la división de BTL encargada de administrar este sistema (AT&T).

A mediados de los años ochentas, Richard Stallman, entonces en el Instituto Tecnológico de Massachussets (MIT) decidió dedicarse a la construcción de lo que denominó software libre. El razonamiento de Stallman era que los mayores progresos en la industria del software surgen cuando se coopera entre programadores. Según Stallman, las industrias de la época estaban atentando contra la libertad de los usuarios y programadores de compartir el software, así que decidió programar un sistema parecido a Unix y regalarlo. A este sistema le llamó GNU, un acrónimo recursivo que significa Gnu's Not Unix (GNU no es Unix).

Para las personas deseosas de correr Unix en las ahora populares PCs, quedaba únicamente una alternativa, Minix. Minix era un sistema operativo parecido a Unix desarrollado por el Profesor Andrew Tanenbaum para enseñarle a sus alumnos acerca del diseño de sistemas operativos. Sin embargo, debido al enfoque puramente educacional de Minix, Tanenbaum no permitía que este fuera modificado demasiado ya que esto complicaba el sistema y no permitía que sus estudiantes lo entendieran en un semestre.

Un estudiante de Finlandia, Linus Torvalds, al ver que no era posible extender Minix, decidió escribir su propio sistema operativo compatible con Unix. Miles de personas que querían correr Unix en sus PCs vieron aquí su única alternativa debido a que a Minix le faltaban demasiadas cosas y BSD, a pesar de tener toda la funcionalidad esperada, tenía problemas legales. El proyecto GNU que Stallman había iniciado hacía ya casi diez años había producido para este entonces un sistema casi completo a excepción del kernel, que es el programa que controla el hardware de la máquina. Torvalds decidió utilizar el casi completo sistema GNU y completarlo él mismo con su propio kernel, al resultado le llamó Linux. Richard Stallman insiste aún que el sistema debiera ser llamado GNU/Linux, ya que incluye más código del proyecto GNU que del proyecto Linux.

En 1975 los sistemas UNIX se habían popularizado muchísimo en las universidades y así apareció una organización de usuarios que evolucionó hasta convertirse en el grupo llamado USENIX.

Los sistemas UNIX satisfacen necesidades de los programadores que crean software y de los administradores que deben controlar las labores de desarrollo de programas. Sin embargo, no estaban diseñados para sustituir los sistemas operativos comerciales "de trabajo pesado" que dan apoyo a un procesamiento masivo de datos.

El sistema de tiempo compartido UNIX, séptima edición, editado en 1979, hizo que los sistemas UNIX estuvieran más cerca de convertirse en productos comerciales válidos. Los archivos podían llegar a un tamaño de mil millones de bytes. El sistema se hizo todavía más portátil y se amplió el lenguaje C. Se llevó a la práctica un shell (Intérprete de los mandatos del usuario) más potente que incluía variables de cadena, programación estructurada, manejo de trampas y otras características. Se añadió la capacidad de añadir archivos entre una máquina y otra.

Reconociendo el valor de los sistemas UNIX, Microsoft anunció en 1980 que ofrecería XENIX, una versión comercial de sistema UNIX, en microprocesadores de 16 bits. Para mejorar la viabilidad, Microsoft agrego a cute; recuperación de errores por hardware, reparación automática de archivos después de caídas, detección de fallas en el suministro de energía y errores de paridad, segmentos compartidos de datos y una mejor comunicación entre procesos.

En 1980, la Universidad de California en Berkeley recibió fondos del Departamento de Defensa para evolucionar los sistemas UNIX de sistemas operativos pequeños de tiempo compartido a sistemas apropiados para estudiar ambientes de computación distribuida. Esto redundó en el desarrollo del sistema 4.1 BSD, después AT&T comercializó el sistema UNIX System III en 1982, este evolucionó hasta convertirse en System V.

A mediados de los años noventa, AT&T vendió Unix a Novell, quién tomó como prioridad número uno resolver las demandas. El acuerdo fue que la Universidad de California eliminaría todo el código residual de AT&T y lanzaría una última distribución de BSD totalmente libre de problemas de licenciamiento. Esta distribución fue el 4.4-BSD Lite2. Quien quisiera distribuir BSD debería basar su distribución en 4.4-BSD Lite2 para no tener problemas legales. Inmediatamente los distribuidores de BSD reiniciaron sus labores de distribución migrando lentamente sus sistemas al 4.4-BSD Lite2.
Para este entonces, Linux se había convertido ya en el Unix más popular entre la gente que buscaba alternativas al Windows de Microsoft.


http://www.angelfire.com/linux/unix_sis/figura1.jpg

A comienzos de 1984, había sobre 100.000 instalaciones del sistema UNIX en el mundo, funcionando en máquinas con un amplio rango de computadoras, desde microprocesadores hasta mainframes. Ningún otro sistema operativo puede hacer esta declaración. Muchas han sido las razones que han hecho posible la popularidad y el éxito del sistema UNIX:


El sistema está escrito en un lenguaje de alto nivel, haciéndolo fácil de leer, comprender, cambiar, y mover a otras máquinas. Ritchie estimó que el primer sistema en C era de un 20 a un 40 por ciento más grande y lento porque no estaba escrito en lenguaje ensamblador, pero las ventajas de usar un lenguaje de alto nivel superaban largamente a las desventajas.

  • Posee una simple interface de usuario con el poder de dar los servicios que los usuarios quieren.
  • Provee de primitivas que permiten construir programas complejos a través de programas simples.
  • Usa un sistema de archivos jerárquico que permite un mantenimiento fácil y una implementación eficiente.
  • Usa un formato consistente para los archivos, el flujo de bytes, haciendo a los programas de aplicación más fáciles de escribir.
  • Provee una simple y consistente interface a los dispositivos periféricos.
  • Es un sistema multiusuario y multitarea; cada usuario puede ejecutar varios procesos simultáneamente.
  • Oculta la arquitectura de la máquina al usuario, haciendo fácil de escribir programas que se ejecutan en diferentes implementaciones hardware.

Sin embargo tiene algunos inconvenientes:

  • Comandos poco claros y con demasiadas opciones.
  • Escasa protección entre usuarios.
  • Sistema de archivo lento.

A pesar de que el sistema operativo y muchos de los comandos están escritos en C, UNIX soporta otros lenguajes, incluyendo Fortran, Basic, Pascal, Ada, Cobol, Lisp y Prolog. El sistema UNIX puede soportar cualquier lenguaje que tenga un compilador o intérprete y una interface de sistema que defina las peticiones del usuario de los servicios del sistema operativo de la forma estándar de las peticiones usadas en los sistemas UNIX.

Principales caracteristicas de UNIX

  • Es un sistema operativo multiusuario, con capacidad de simular multiprocesamiento y procesamiento no interactivo.
  • Está escrito en un lenguaje de alto nivel: C.
  • Dispone de un lenguaje de control programable llamado SHELL.
  • Ofrece facilidades para la creación de programas y sistemas y el ambiente adecuado para las tareas de diseños de software.
  • Emplea manejo dinámico de memoria por intercambio o paginación.
  • Tiene capacidad de interconexión de procesos.
  • Permite comunicación entre procesos.
  • Emplea un sistema jerárquico de archivos, con facilidades de protección de archivos, cuentas y procesos.
  • Tiene facilidad para redireccionamiento de Entradas / Salidas.
  • Garantiza un alto grado de portabilidad.

El sistema UNÍX se basa en un Núcleo llamado Kernel, que reside permanentemente en la memoria, y que atiende a todas las llamadas del sistema, administra el acceso a los archivos y el inicio o la suspensión de las tareas de los usuarios.

La comunicación con el sistema UNIX se da mediante un programa de control llamado SHELL. Este es un lenguaje de control, un intérprete, y un lenguaje de programación, cuyas características lo hacen sumamente flexible para las tareas de un centro de cómputo. Como lenguaje de programación abarca los siguientes aspectos:

  • Ofrece las estructuras de control normales: secuenciación, iteración condicional, selección y otras.
  • Paso de parámetros.
  • Sustitución textual de variables y Cadenas.
  • Comunicación bidireccional entre órdenes de shell.
  • Es posible interconectar procesos entre sí.
  • Diferentes usuarios pueden "ver" versiones distintas del sistema operativo debido a la capacidad del shell para configurar diversos ambientes de ejecución

KERNEL


El núcleo del sistema operativo Unix (llamado Kernel) es un programa escrito casi en su totalidad en lenguaje C, con excepción de una parte del manejo de interrupciones, expresada en el lenguaje ensamblador del procesador en el que opera.

Las funciones del núcleo son permitir la existencia de un ambiente en el que sea posible atender a varios usuarios y múltiples tareas en forma concurrente, repartiendo al procesador entre todos ellos, e intentando mantener en grado óptimo la atención individual.

El Kernel opera como asignador de recursos para cualquier proceso que necesite hacer uso de las facilidades de cómputo. Es el componente central de Unix y tiene las siguientes funciones:

  • Creación de procesos, asignación de tiempos de atención y sincronización.
  • Asignación de la atención del procesador a los procesos que lo requieren.
  • Administración de espacio en el sistema de archivos, que incluye: acceso, protección y administración de usuarios; comunicación entre usuarios v entre procesos, y manipulación de E/S y administración de periféricos.
  • Supervisión de la transmisión de datos entre la memoria principal y los dispositivos periféricos.


El Kernel reside siempre en la memoria central y tiene el control sobre la computadora, por lo que ningún otro proceso puede interrumpirlo; sólo pueden llamarlo para que proporcione algún servicio de los ya mencionados. Un proceso llama al Kernel mediante módulos especiales conocidos como llamadas al sistema.

El Kernel consta de dos artes principales: la sección de control de procesos y la de control de dispositivos. La primera asigna recursos, programas, procesos y atiende sus requerimientos de servicio; la segunda, supervisa la transferencia de datos entre la memoria principal y los dispositivos periféricos. En términos generales, cada vez que algún usuario oprime una tecla de una terminal, o que se debe leer o escribir información del disco magnético, se interrumpe al procesador central y el núcleo se encarga de efectuar la operación de transferencia.

http://www.angelfire.com/linux/unix_sis/figura2.jpg

Cuando se inicia la operación de la computadora, debe cargarse en la memoria una copia del núcleo, que reside en e] disco magnético (operación denominada bootstrap). Para ello, se deben inicializar algunas interfaces básicas de hardware; entre ellas, el reloj que proporciona interrupciones periódicas. El Kernel también prepara algunas estructuras de datos que abarcan una sección de almacenamiento temporal para transferencia de información entre terminales y procesos, una sección para almacenamiento de descriptores de archivos y una variable que indica la cantidad de memoria principal.

A continuación, el Kernel inicializa un proceso especial, llamado proceso 0. En general, los procesos se crean mediante una llamada a una rutina del sistema (fork), que funciona por un mecanismo de duplicación de procesos. Sin embargo, esto no es suficiente para crear el primero de ellos, por lo que el Kernel asigna una estructura de datos y establece apuntadores a una sección especial de la memoria, llamada tabla de procesos, que contendrá los descriptores de cada uno de los procesos existentes en el sistema.

Después de haber creado el proceso 0, se hace una copia del mismo, con lo que se crea el proceso 1; éste muy pronto se encargará de "dar vida" al sistema completo, mediante la activación de otros procesos que también forman parte del núcleo. Es decir, se inicia una cadena de activaciones de procesos, entre los cuales destaca el conocido como despachador, o scheduler, que es el responsable de decidir cuál proceso se ejecutará y cuáles van a entrar o salir de la memoria central. A partir de ese momento se conoce el número 1 como proceso de inicialización del sistema, init.

El proceso init es el responsable de establecer la estructura de procesos en Unix. Normalmente, es capaz de crear al menos dos estructuras distintas de procesos: el modo monousuario y el multiusuario. Comienza activando el intérprete del lenguaje de control (Shell) en la terminal principal, o consola, del sistema y proporcionándole privilegios de "superusuario". En la modalidad de un solo usuario la consola permite iniciar una primera sesión, con privilegios especiales, e impide que las otras líneas de comunicación acepten iniciar sesiones nuevas. Esta modalidad se usa con frecuencia para revisar y reparar sistemas de archivos, realizar pruebas de funciones básicas del sistema y para otras actividades que requieren uso exclusivo de la computadora.

Init crea otro proceso, que espera pacientemente a que alguien entre en sesión en alguna línea de comunicación. Cuando esto sucede, realiza ajustes en el protocolo de la línea y ejecuta el programa login, que se encarga de atender inicialmente a los nuevos usuarios. Si la clave del usuario, y la contraseña proporcionadas son las correctas, entonces entra en operación el programa Shell, que en lo sucesivo se encargará de la atención normal del usuario que se dio de alta en esa terminal.

A partir de ese momento el responsable de atender al usuario en esa terminal es el intérprete Shell. Cuando se desea terminar la sesión hay que desconectarse de Shell (y, por lo tanto, de Unix), mediante una secuencia especial de teclas (usualmente. <> - D). A partir de ese momento la terminal queda disponible para atender a un nuevo usuario.

Administración de archivos

El sistema de archivos de Unix; esta basado en un modelo arborescente y recursivo, en el cual los nodos pueden ser tanto archivos como directorios, y estos últimos pueden contener a su vez directorios o subdirectorios. Debido a esta filosofía, se maneja al sistema con muy pocas órdenes, que permiten una gran gama de posibilidades. Todo archivo de Unix está controlado por múltiples niveles de protección, que especifican los permisos de acceso al mismo. La diferencia que existe entre un archivo de datos, un programa, un manejador de entrada/salida o una instrucción ejecutable se refleja en estos parámetros, de modo que el sistema operativo adquiere características de coherencia y elegancia que lo distinguen.

La raíz del sistema de archivos (conocida como root ) se denota con el símbolo "/", y de ahí se desprende un conjunto de directorios que contienen todos los archivos del sistema de cómputo. Cada directorio, a su vez, funciona como la subraíz de un nuevo árbol que depende de él y que también puede estar formado por directorios o subdirectorios y archivos. Un archivo siempre ocupará el nivel más bajo dentro del árbol, porque de un archivo no pueden depender otros; si así fuera, sería un directorio. Es decir, los archivos son como las hojas del árbol.

Se define en forma unívoca el nombre de todo archivo (o directorio) mediante lo que se conoce como su trayectoria (path name): es decir, el conjunto completo de directorios, a partir de root (/), por los que hay que pasar para poder llegar al directorio o archivo deseado. Cada nombre se separa de los otros con el símbolo /, aunque tan sólo el primero de ellos se refiere a la raíz.