domingo, 8 de febrero de 2015

Distribuciones de Sistemas Unix

http://neuronaonline.net/blog/wp-content/uploads/2012/05/sistemas.png


Una distribución Linux es una distribución de software basada en el núcleo Linux que incluye determinados paquetes de software para satisfacer las necesidades de un grupo específico de usuarios, dando así origen a ediciones domésticas, empresariales y para servidores.
Además del núcleo Linux, las distribuciones incluyen habitualmente las bibliotecas y herramientas del proyecto GNU y el sistema de ventanas X Window System. Dependiendo del tipo de usuarios a los que la distribución esté dirigida se incluye también otro tipo de software como procesadores de texto, hoja de cálculo, reproductores multimedia, herramientas administrativas, etcétera.  
Existen distribuciones que están soportadas comercialmente, como Fedora (Red Hat), openSUSE (Novell), Ubuntu (Canonical Ltd.), Mandriva, y distribuciones mantenidas por la comunidad como Debian y Gentoo. Aunque hay otras distribuciones que no están relacionadas con alguna empresa o comunidad, como es el caso de Slackware.  


Una distribución Linux típica contiene un núcleo, herramientas y librerías, software adicional, documentación, un sistema de ventanas, un administrador de ventanas y un entorno de escritorio, generalmente es GNOME o KDE. Gran parte del software incluido es de fuente abierta o software libre, permitiendo a sus usuarios modificar o compilar el código fuente original si lo desean.
Muchas distribuciones proveen un sistema de instalación gráfica como lo hacen otros sistemas modernos.  Distribuciones independientes proveen el código fuente de todo el software y solo incluyen los binarios del núcleo, herramientas de compilación y de un instalador.
El software incluido en las distribuciones viene en forma de paquetes. La mayoría de las distribuciones actuales contienen un manejador de paquetes que se encarga de manipular todo el software contenido en paquetes (lo instala, desinstala, actualiza, busca e instala dependencias) para que el usuario tenga una experiencia más placentera y use su computadora para lo que necesita. 


Kernel  
Es el principal encargado de gestionar recursos, a través de servicios de llamada al sistema. Como hay muchos programas y el acceso al hardware es limitado, también se encarga de decidir qué programa podrá hacer uso de un dispositivo de hardware y durante cuánto tiempo, lo que se conoce como multiplexado.

El kernel es el programa que se encarga de: 
  • La comunicación entre los programas que solicitan recursos y el hardware. 
  • Administración de los distintos programas informáticos (tareas) de una máquina. 
  •  Administración del hardware (memoria, procesador, periférico, forma de almacenamiento, etc.).  

Un núcleo Unix 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.
  • Repartir el procesador entre usuarios y múltiples tareas.
  • Intentar mantener en grado óptimo la atención individual.      
Reside siempre en la memoria principal 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.
Consta de dos partes principales: la sección de control de procesos y la de control de dispositivos.
La sección de control de procesos: asigna recursos, programas, procesos y atiende sus requerimientos de servicio
La de control de dispositivos: supervisa la transferencia de datos entre la memoria principal y los dispositivos de la computadora.
Cuando se inicia la operación de la computadora, debe cargarse en la memoria una copia del núcleo, que reside en el disco duro (operación denominada bootstrap). Para ello, se deben inicializar algunas interfaces básicas de hardware; entre ellas, el reloj que proporciona interrupciones periódicas.
Enseguida, el núcleo inicializa un proceso especial, llamado proceso 0.  El núcleo 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.  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. 
Init crea otro proceso, que espera 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 el nombre de usuario y la contraseña proporcionadas son correctos, 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  mediante una secuencia especial de teclas (usualmente. < CTL > - D). 



No necesariamente se necesita un núcleo para usar una computadora. Los programas pueden cargarse y ejecutarse directamente en una computadora «vacía», siempre que sus autores quieran desarrollarlos sin usar ninguna abstracción del hardware ni ninguna ayuda del sistema operativo, ésta era la forma normal de usar muchas de las primeras computadoras. Con el tiempo, se empezó a dejar en memoria (aún entre distintas ejecuciones) pequeños programas auxiliares, como el cargador y el depurador, o se cargaban desde memoria de sólo lectura. A medida que se fueron desarrollando, se convirtieron en los fundamentos de lo que llegarían a ser los primeros núcleos de sistema operativo.


Hay cuatro grandes tipos de núcleos: 
  • Los núcleos monolíticos facilitan abstracciones del hardware subyacente realmente potentes y variadas. 
  • Los micronúcleos (en inglés microkernel) proporcionan un pequeño conjunto de abstracciones simples del hardware, y usan las aplicaciones llamadas servidores para ofrecer mayor funcionalidad. 
  • Los núcleos híbridos (micronúcleos modificados) son muy parecidos a los micronúcleos puros, excepto porque incluyen código adicional en el espacio de núcleo para que se ejecute más rápidamente. 
  • Los exonúcleos no facilitan ninguna abstracción, pero permiten el uso de bibliotecas que proporcionan mayor funcionalidad gracias al acceso directo o casi directo al hardware.  



Referencias:
Desarrollo de Aplicaciones en Ambientes Emergentes, Ing. Juan Carlos Rodríguez Ulloa 

sábado, 7 de febrero de 2015

La historia de UNIX

 Los orígenes del sistema UNIX se remontan al desarrollo de un proyecto iniciado en 1968. Este proyecto fue realizado por General Electric, Laboratorios Bell de AT&T y el MIT, estas instituciones llevaron a cabo el desarrollo de un sistema operativo con nuevos conceptos como la multitarea, la gestión de archivos o la interacción con el usuario. El resultado de estas investigaciones se bautizó como MULTICS, pero a causa de su pobre rendimiento AT&T decidió desvincularse del proyecto. 
Pero a pesar de esto, Ken Thompson uno de los programadores de Laboratorios Bell de AT&T continuo escribiendo codigo relacionado al proyecto MULTICS, para que tiempo despues se uniera a él su amigo Dennis Ritchie con quien en 1969 cmienza la creación de un sistema operativo con las premisas originales de Multics, para finalmente tener como producto el sistema operativo UNICS (Unipixed Information and Computing System), para posteriormente, ser cambiado a UNIX, denominación que mantiene hasta la actualidad.


 
UNIX rápidamente llamó la atención de los niveles gerenciales de los laboratorios Bell, que de pronto tenían entre sus manos un sólido sistema operativoLa empresa no había gastado un solo dólar en el desarrollo de UNIX, pero cuando el Grupo de Investigación en Ciencias de la Computación decidió utilizarlo en una máquina más potente que el PDP-7, Thompson y Ritchie consiguieron el apoyo económico de AT&T. Comenzaron a reescribir el software para que funcionara en una computadora PDP-11/20 y, por primera vez, en 1970, UNIX corrió en esa plataforma.   

En 1973, Ritchie y Thompson reescriben el núcleo del sistema utilizando el lenguaje C lo que hacía mas fácil su mantenimiento y portabilidad a otras máquinas. La popularidad de UNIX creció debido a sus innovaciones y a que estaba escrito compactamente en un lenguaje de alto nivel con código que permitía ser modificado de acuerdo a las preferencias individuales. AT&T no ofreció comercialmente el sistema UNIX porque en ese tiempo no estaba en el negocio de la informática. Sin embargo, permitió la disponibilidad de UNIX a universidades, firmas comerciales y al gobierno por un coste simbólico. El número de máquinas que ejecutaban UNIX en 1977 ascendía a 600, fundamentalmente en los Laboratorios Bell y en las universidades. En 1979 aparece la séptima versión del sistema y es el ascendiente directo del sistema actual. El sitema III de UNIX, basado en la versión septima, se convirtió en 1982 en la primera versión comercial del sistema UNIX de AT&T.  

http://file.vintageadbrowser.com/gd3msqa3jhr3iu.jpg


De forma paralela al UNIX “oficial”, desde mediados de los ochenta, Richard Stallman, del Instituto Tecnológico de Massachussets, trabajaba en lo que más tarde se conocería como “software libre”. Stallman creo un sistema similar a UNIX con intenciones de cederlo gratuitamente, con el nombre de GNU (Gnu's Not Unix. GNU no es Unix). En esos meses, un joven estudiante de ciencias de la computación finlandés llamado Linus Torvalds comenzaba el desarrollo del núcleo de un sistema operativo para computadoras basadas en la arquitectura “Intel x86”, que reproducía muchas de las funciones existentes en UNIX. El embrionario sistema operativo fue lanzado en forma de código abierto en 1991, con el nombre de Linux. El año siguiente ese núcleo Linux fue combinado con los programas desarrollados por el Proyecto GNU, dando como resultado el Sistema Operativo GNU/Linux.   




El resto es historia: lo que comenzó casi como un pasatiempo de dos geniales programadores se convirtió en un potente, seguro y flexible sistema operativo, capaz de funcionar en un teléfono móvil, una computadora personal o un cluster de computadoras. A pesar de tener más de 40 años sobre sus espaldas, UNIX está más vigente que nunca. 



http://www.netneurotic.de/mac/unix/images/UNIX.png

             Árbol genealógico de Unix









Referencias: 
Desarrollo de Aplicaciones en Ambientes Emergentes, Ing. Juan Carlos Rodríguez Ulloa
http://www.unixsup.com/unixlinux/historiaunixus.html