Kernel

De doc.ubuntu-es
(Diferencias entre revisiones)
Saltar a: navegación, buscar
m (El kernel trasladada a Kernel: simplifico título)
(Configuración del kernel: enlace interno, erratas)
 
(No se muestran 17 ediciones intermedias realizadas por 8 usuarios)
Línea 1: Línea 1:
 
<!-- Este artículo habría que traducirlo un poco para seres humanos, hacerlo más entendible y aplicarlo a Ubuntu (actualmente está enfocado a Debian, aunque ubuntu se base en  ella, creo que deberíamos adaptarlo. Habría que incluir una definición y también cambiar las secciones -->
 
<!-- Este artículo habría que traducirlo un poco para seres humanos, hacerlo más entendible y aplicarlo a Ubuntu (actualmente está enfocado a Debian, aunque ubuntu se base en  ella, creo que deberíamos adaptarlo. Habría que incluir una definición y también cambiar las secciones -->
 +
{{wikificar}}
 +
{{software
 +
| nombre = Linux
 +
| logo = Tuxcrystal logo.png
 +
| versión_estable = [http://kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.26 2.6.26]
 +
| fecha_versión_estable = 13 de julio de 2008
 +
| género = [[:Categoría:Sistema Linux|Kernel]]
 +
| licencia = [[w:software libre|libre]] ([[w:licencia pública general de GNU|GPL]])
 +
| español = No
 +
| web = [http://www.kernel.org/ www.kernel.org]
 +
}}
 +
 +
<div style="clear: right; float: right; display: table;">__TOC__</div>
  
 
== Definición ==
 
== Definición ==
...
 
  
 +
En un sistema Linux la interacción final con dispositivos la realizan los '''controladores''' o el '''kernel''' (núcleo). Dicho de otra forma, un dispositivo sólo podrá ser usado si el kernel lo soporta o si existe un controlador capaz de controlarlo y si se configura apropiadamente para hacerlo. Por esto, los dispositivos que se produzcan hoy, no pueden ser operados con controladores ya existentes (a menos que los dispositivos hayan sido diseñados para ser operados con éstos, caso que para algunos dispositivos como tarjetas de sonido, tarjetas de vídeo o modems es poco común), por esto mismo, eventualmente, si actualiza el hardware de su computador o si desea usar un cierto servicio del kernel, también deberá actualizar algún módulo o eventualmente el kernel completo. Aunque algunos controladores autodetectan la configuración del dispositivo, esto no siempre ocurre y en algunos casos tendrá que probar (cacharrear), hasta hacer funcionar el módulo que maneja el dispositivo (en estas pruebas la documentación del dispositivo y la del módulo serán de utilidad. Si desea experimentar rápidamente emplee '''modconf''').
  
En un sistema Linux la interacción final con dispositivos la realizan los controladores o el kernel. Dicho de otra forma, un dispositivo sólo podrá ser usado si el kernel lo soporta o si existe un controlador capaz de controlarlo y si se configura apropiadamente para hacerlo. Por esto, los dispositivos que se produzcan hoy, no pueden ser operados con controladores ya existentes (a menos que los dispositivos hayan sido diseñados para ser operados con estos, caso que para algunos dispositivos como tarjetas de sonido, tarjetas de video o modems es poco común), por esto mismo, eventualmente, si actualiza el hardware de su computador o si desea usar un cierto servicio del kernel, también deberá actualizar algún módulo o eventualmente el kernel completo. Aunque algunos controladores autodetectan la configuración del dispositivo, esto no siempre ocurre y en algunos casos tendrá que probar (cacharrear), hasta hacer funcionar el módulo que maneja el dispositivo (en estas pruebas la documentación del dispositivo y la del módulo serán de utilidad. Si desea experimentar rapidamente emplee '''modconf''').
+
Las fuentes en [[w:lenguaje de programación C|C]] de cada versión del kernel cuentan con controladores para diversos dispositivos. Cuando se compila una versión, algunos de esos controladores pueden unirse con el kernel mismo (estáticamente), otros pueden dejarse como módulos para cargarse/descargarse cuando la parte estática del kernel esté operando, otros pueden ser excluidos del proceso de compilación (y por lo tanto no podrán ser usados ni cuando el kernel esté operando).  
  
Las fuentes en C de cada versión del kernel cuentan con controladores para diversos dispositivos. Cuando se compila una versión, algunos de esos controladores pueden unirse con el kernel mismo (estáticamente), otros pueden dejarse como módulos para cargarse/descargarse cuando la parte estática del kernel este operando, otros pueden ser excluidos del proceso de compilación (y por lo tanto no podrán ser usados ni cuando el kernel esté operando).
+
=== Módulos ===
  
===Módulos===
+
En este contexto, módulo se refiere a un controlador de un dispositivo o servicio que puede cargarse o descargarse cuando el usuario o algún dispositivo lo solicita (i.e dinámicamente). Los módulos que se distribuyen con en el kernel están ubicados en el directorio /lib/modules/versión, donde versión es la versión de su kernel (uname -r), con la extensión .o [[#Notas |(1)]] organizados en directorios que indican el tipo de dispositivo o el propósito, por ejemplo fs (sistema de archivos), net (protocolos y hardware para redes).
En este contexto, módulo se refiere a un controlador de un dispositivo o servicio que puede cargarse o descargarse cuando el usuario o algún dispositivo lo solicita (i.e dinámicamente). Los módulos que se distribuyen con en el kernel están ubicados en el directorio /lib/modules/version, donde versión es la versión de su kernel (uname -r), con la extensión .o (1) organizados en directorios que indican el tipo de dispositivo o el propósito, por ejemplo fs (sistema de archivos), net (protocolos y hardware para redes).
+
  
Para lograr configurar un dispositivo controlado por un módulo, puede emplear las herramientas del paquete modutils o modconf para:
+
Para lograr configurar un dispositivo controlado por un módulo, puedes emplear las herramientas del paquete modutils o modconf para:
  
 
# Asegurar que no haya conflictos entre el dispositivo con otros y eventualmente conocer la configuración que usa (algunos controladores autodetectan la configuración del dispositivo, pero no todos).
 
# Asegurar que no haya conflictos entre el dispositivo con otros y eventualmente conocer la configuración que usa (algunos controladores autodetectan la configuración del dispositivo, pero no todos).
 
# Encontrar un módulo que pueda manejar el dispositivo.
 
# Encontrar un módulo que pueda manejar el dispositivo.
# Eventualmente pasar opciones al módulo de acuerdo a la configuración del dispositivo (e.g IRQ o dirección base).  
+
# Eventualmente pasar opciones al módulo de acuerdo a la configuración del dispositivo (ej: IRQ o dirección base).
  
En Debian las herraminetas del paquete modutils se configuran en los achivos del directorio /etc/modutils (con la información de esos archivos y de /etc/modules se genera el archivo de configuración de módulos /etc/modules.conf (2)). Los programas que ese paquete incluye son:
+
En Debian las herramientas del paquete modutils se configuran en los achivos del directorio <code>/etc/modutils</code> (con la información de esos archivos y de <code>/etc/modules</code> se genera el archivo de configuración de módulos <code>/etc/modules.conf</code> [[#Notas |(2)]]). Los programas que ese paquete incluye son:
  
*'''lsmod'''
+
* '''<code>lsmod</code>'''
Lista los módulos cargados, de cada uno presenta nombre, tamaño, cuenta de usos y lista de módulos que lo usan (es equivalente a cat /proc/modules).  
+
Lista los módulos cargados, de cada uno presenta nombre, tamaño, cuenta de usos y lista de módulos que lo usan (es equivalente a cat <code>/proc/modules</code>).  
*'''rmmod módulos'''
+
* '''<code>rmmod módulos</code>'''
Descarga uno o más módulos cargados, mientras éstos no estén siendo usados. Con la opción -r intenta descargar recursivamente módulos de los cuales el módulo especificado dependa. El comando rmmod -a descarga todos los módulos que no estén siendo usados.  
+
Descarga uno o más módulos cargados, mientras éstos no estén siendo usados. Con la opción <code>-r</code> intenta descargar recursivamente módulos de los cuales el módulo especificado dependa. El comando <code>rmmod -a</code> descarga todos los módulos que no estén siendo usados.  
*insmod módulo [opciones]
+
* <code>insmod módulo [opciones]</code>
Trata de cargar el módulo especificado. Pueden pasarse opciones específicas para el módulo, a continuación del nombre con la sintaxis símbolo=valor (los símbolos posibles dependen del módulo, pueden verse algunos en /usr/share/modconf/descr.gz que es la ayuda presentada por modconf o en último caso en las fuentes del módulo en los macros MODULE_PARAM y MODULE_PARAM_DESCR). Puede indicarse una ruta no estándar para buscar módulos estableciéndola en la variable MODPATH o en /etc/modules.conf. Dado que los módulos se enlazan directamente con el kernel, deben ser compilados para una versión precisa, con la opción -f puede evitarse el chequeo de versiones.  
+
Trata de cargar el módulo especificado. Pueden pasarse opciones específicas para el módulo, a continuación del nombre con la sintaxis ''símbolo=valor'' (los símbolos posibles dependen del módulo, pueden verse algunos en <code>/usr/share/modconf/descr.gz</code> que es la ayuda presentada por modconf o en último caso en las fuentes del módulo en los macros <code>MODULE_PARAM</code> y <code>MODULE_PARAM_DESCR</code>). Puede indicarse una ruta no estándar para buscar módulos estableciéndola en la variable <code>MODPATH</code> o en <code>/etc/modules.conf</code>. Dado que los módulos se enlazan directamente con el kernel, deben ser compilados para una versión precisa, con la opción <code>-f</code> puede evitarse el chequeo de versiones.  
*'''depmod'''
+
* '''<code>depmod<code>'''
Como un módulo puede requerir otros, hay dependencias que deben respetarse al cargar y descargar módulos. depmod permite calcular tales dependencias entre varios módulos o entre todos los disponibles con la opción -a (3). Por defecto depmod -a escribe las dependencias en el archivo /lib/modules/version/modules.emp. Cada línea de ese archivo tiene el nombre de un módulo seguido del caracter ':' y los módulos de los cuales depende, separados por espacios.  
+
Como un módulo puede requerir otros, hay dependencias que deben respetarse al cargar y descargar módulos. depmod permite calcular tales dependencias entre varios módulos o entre todos los disponibles con la opción <code>-a</code> [[#Notas |(3)]]. Por defecto <code>depmod -a</code> escribe las dependencias en el archivo <code>/lib/modules/version/modules.emp</code>. Cada línea de ese archivo tiene el nombre de un módulo seguido del carácter ':' y los módulos de los cuales depende, separados por espacios.  
*'''modprobe módulo opciones'''
+
* '''<code>modprobe módulo opciones<code>'''
Emplea la información de dependencias generada por depmod e información de /etc/modules.conf para cargar el módulo especificado, cargando antes todos los módulos de los cuales dependa. Para especificar el módulo basta escribir el nombre (sin la ruta, ni la extensión .o) o uno de los alias definidos en /etc/modutils/alias (o en otro archivo del directorio /etc/modutils). Si hay líneas pre-install o post-install en /etc/modules.conf, modprobe puede ejecutar un comando antes y/o después de cargar el módulo. Como opciones para cargar el módulo usa prioritariamente las dadas en la línea de comandos y después las especificadas en líneas de la forma options módulo opciones en el archivo /etc/modules.conf (4)  
+
Emplea la información de dependencias generada por depmod e información de <code>/etc/modules.conf</code> para cargar el módulo especificado, cargando antes todos los módulos de los cuales dependa. Para especificar el módulo basta escribir el nombre (sin la ruta, ni la extensión .o) o uno de los alias definidos en /etc/modutils/alias (o en otro archivo del directorio /etc/modutils). Si hay líneas pre-install o post-install en <code>/etc/modules.conf</code>, modprobe puede ejecutar un comando antes y/o después de cargar el módulo. Como opciones para cargar el módulo usa prioritariamente las dadas en la línea de comandos y después las especificadas en líneas de la forma options módulo opciones en el archivo <code>/etc/modules.conf</code> [[#Notas |(4)]].
  
Puede emplear estos programas para configurar sus módulos y puede hacer permanentes los cambios, agregando el módulo y las opciones en el archivo /etc/modules (5).
+
Puedes emplear estos programas para configurar sus módulos y puedes hacer permanentes los cambios, agregando el módulo y las opciones en el archivo <code>/etc/modules</code> [[#Notas |(5)]].
  
 
Para hacer más fácil la configuración de módulos, Debian ofrece las siguientes herramientas:
 
Para hacer más fácil la configuración de módulos, Debian ofrece las siguientes herramientas:
  
*'''modconf'''
+
* '''<code>modconf</code>'''
Para listar, cargar y descargar módulos con menús. Este programa muestra los módulos disponbiles en categorías y con ayudas sobre su uso y permite cargarlos o descargarlos del kernel, actualizando automáticamente los archivos /etc/modules y /etc/modules.conf (cambiando los archivos apropiados de /etc/modutils) para que los módulos configurados sean cargados automáticamente en el siguiente arranque. La información sobre los módulos disponibles la obtiene del directorio /lib/modules, los módulos cargados y sus parámetros los lee de /etc/modutils y /etc/modules.conf y la ayuda y la información interna de los archivos en /usr/share/modules.conf ---modconf es un script para el intérprete de comandos.  
+
Para listar, cargar y descargar módulos con menús. Este programa muestra los módulos disponbiles en categorías y con ayudas sobre su uso y permite cargarlos o descargarlos del kernel, actualizando automáticamente los archivos <code>/etc/modules</code> y <code>/etc/modules.conf</code> (cambiando los archivos apropiados de <code>/etc/modutils</code>) para que los módulos configurados sean cargados automáticamente en el siguiente arranque. La información sobre los módulos disponibles la obtiene del directorio <code>/lib/modules/</code>, los módulos cargados y sus parámetros los lee de <code>/etc/modutils</code> y <code>/etc/modules.conf</code> y la ayuda y la información interna de los archivos en <code>/usr/share/modules.conf ---modconf</code> es un script para el intérprete de comandos.  
*'''update-modules'''
+
*'''<code>update-modules</code>'''
 
Actualiza el archivo /etc/modules.conf a partir de la información de los archivos del directorio /etc/modutils. En Debian no se edita directamente /etc/modules.conf.  
 
Actualiza el archivo /etc/modules.conf a partir de la información de los archivos del directorio /etc/modutils. En Debian no se edita directamente /etc/modules.conf.  
  
 
Es posible que el kernel del que disponga no cuente con módulos que soporten ciertos dispositivos, en tal caso se puede:
 
Es posible que el kernel del que disponga no cuente con módulos que soporten ciertos dispositivos, en tal caso se puede:
  
# buscar en Internet un módulo precompilado para la versión del kernel que tiene,
+
# Buscar en Internet un módulo precompilado para la versión del kernel que tiene.
# buscar fuentes de un módulo o
+
# Buscar fuentes de un módulo.
# buscar una versión del kernel que incluya soporte para el dispositivo.  
+
# Buscar una versión del kernel que incluya soporte para el dispositivo.
  
 +
=== Configuración del kernel ===
  
=== Configuración del kernel===
+
Además de cargar y descargar módulos, algunas características del kernel pueden ser modificadas mientras está en funcionamiento el sistema, bien escribiendo en algunos archivos del directorio <code>/proc/</code>, o con el programa <code>sysctl</code>. Este programa con la opción <code>-a</code> presenta todas las variables modificables y su valor, entre otras encuentra variables que mantienen datos autodetectados en dispositivos (en particular del CD-ROM), datos de la interacción entre el kernel y el sistema de archivos, datos sobre los protocolos y dispositivos de redes, y detalles del kernel.
 
+
Además de cargar y descargar módulos, algunas características del kernel pueden ser modificadas mientras está en funcionamiento el sistema, bien escribiendo en algunos archivos del directorio /proc, o con el programa sysctl. Este programa con la opción -a presenta todas las variables modificables y su valor, entre otras encuentra variables que mantienen datos autodetectados en dispositivos (en particular del CDROM), datos de la interacción entre el kernel y el sistema de archivos,datos sobre los protocolos y dispositivos de redes, y detalles del kernel.
+
  
 
Para cambiar un valor se emplea:
 
Para cambiar un valor se emplea:
 
  /sbin/sysctl -w kernel.hostname=comp
 
  /sbin/sysctl -w kernel.hostname=comp
  
con un nombre de variable en lugar de kernel.hostname y un valor adecuado en lugar de comp. Pueden hacerse cambios que se vuelven a tomar cada vez que el sistema inicia en el archivo /etc/sysctl.conf.
+
con un nombre de variable en lugar de ''kernel.hostname'' y un valor adecuado en lugar de ''comp''. Pueden hacerse cambios que se vuelven a tomar cada vez que el sistema inicia en el archivo <code>/etc/sysctl.conf</code>.
  
 
En cuanto a los módulos, las imágenes precompiladas del kernel producidas por Debian incluyen estáticamente varios controladores comunes y prácticamente los demás controladores los incluye como módulos. Por esto, si la versión del kernel que tiene soporta sus dispositivos y los servicios que desea, casi con seguridad usted NO necesita recompilar el kernel (puede confirmar si la imagen que tiene, soporta el controlador como módulo revisando en el directorio de módulos, o puede comprobar si éste se incluye estáticamente, efectuando el segundo paso para una instalación usando como archivo de configuración el de la imagen de su kernel).
 
En cuanto a los módulos, las imágenes precompiladas del kernel producidas por Debian incluyen estáticamente varios controladores comunes y prácticamente los demás controladores los incluye como módulos. Por esto, si la versión del kernel que tiene soporta sus dispositivos y los servicios que desea, casi con seguridad usted NO necesita recompilar el kernel (puede confirmar si la imagen que tiene, soporta el controlador como módulo revisando en el directorio de módulos, o puede comprobar si éste se incluye estáticamente, efectuando el segundo paso para una instalación usando como archivo de configuración el de la imagen de su kernel).
  
Eventualmente, si su dispositivo no es detectado automáticamente o el módulo apropiado no es cargado automáticamente (6), tendrá que pasar los paramétros apropiados de una de las dos siguientes formas:
+
Eventualmente, si su dispositivo no es detectado automáticamente o el módulo apropiado no es cargado automáticamente [[#Notas|(6)]], tendrá que pasar los parámetros apropiados de una de las dos siguientes formas:
  
*'''Controlado estático'''
+
* '''Controlado estático'''
Pase los parámetros apropiados desde el cargador de arranque o configúrelos de forma permanente con su cargador de arranque  
+
Pase los parámetros apropiados desde el cargador de arranque o configúrelos de forma permanente con su cargador de arranque.
*'''Módulo (dinámico)'''
+
* '''Módulo (dinámico)'''
Pase los paramétros de configuración a insmod/modprobe o configúrelos de forma permanente en /etc/modules, o en un archivo de /etc/modutils  
+
Pase los parámetros de configuración a <code>insmod</code>/<code>modprobe</code> o configúrelos de forma permanente en <code>/etc/modules</code>, o en un archivo de <code>/etc/modutils</code>.
  
 
Eventualmente puede encontrar y usar algún programa que le ayude a determinar los parámetros apropiados y/o a realizar las configuraciones, o tendrá que consultar los manuales del dispositivo o incluso probar varias opciones hasta determinarlos.
 
Eventualmente puede encontrar y usar algún programa que le ayude a determinar los parámetros apropiados y/o a realizar las configuraciones, o tendrá que consultar los manuales del dispositivo o incluso probar varias opciones hasta determinarlos.
  
Si tras consultar esta documentación o la del kernel o cualquier otra más actualizada, determina que una versión del kernel diferente a la que tiene, soporta cierto dispositivo o servicio que requiere, el método más sencillo que puede intentar es instalar una imagen precompilada disponible en algún depósito de paquetes de Debian (el nombre es de la forma kernel-image-version).  
+
Si tras consultar esta documentación o la del kernel o cualquier otra más actualizada, determina que una versión del kernel diferente a la que tiene, soporta cierto dispositivo o servicio que requiere, el método más sencillo que puede intentar es instalar una imagen precompilada disponible en algún depósito de paquetes de Debian (el nombre es de la forma ''kernel-image-version'').  
  
En caso de requerir un kernel con una configuración muy especial (por ejemplo, que incluya estáticamente ciertos módulos o que excluya de la compilación módulos para hacer un kernel pequeño) o si requiere una versión para la que que no haya imagenes precompiladas de Debian, recomendamos instalar primero una versión precompilada con una versión cercana a la que desea instalar, para tomar la configuración de esta y modificarla antes de compilar la nueva versión. Además recomendamos esto porque las imagenes precompiladas actualizan otros programas indispensables para las nuevas versiones del kernel.
+
En caso de requerir un kernel con una configuración muy especial (por ejemplo, que incluya estáticamente ciertos módulos o que excluya de la compilación módulos para hacer un kernel pequeño) o si requiere una versión para la que que no haya imágenes precompiladas de Debian, recomendamos instalar primero una versión precompilada con una versión cercana a la que desea instalar, para tomar la configuración de ésta y modificarla antes de compilar la nueva versión. Además recomendamos esto porque las imágenes precompiladas actualizan otros programas indispensables para las nuevas versiones del kernel.
  
Para obtener las fuentes, puede recurrir a paquetes Debian para algunas versiones de las fuentes en depósitos oficiales (paquetes con nombres de la forma kernel-sources-version) y las fuentes de cualquier versión en el sitio de desarrollo del kernel (http://www.kernel.org). Cuando obtenga fuentes del kernel de Linux, tenga en cuenta que el segundo número de la versión sea par, si es impar se trata de una versión para desarrolladores pero NO para usuarios finales.
+
Para obtener las fuentes, puede recurrir a paquetes Debian para algunas versiones de las fuentes en depósitos oficiales (paquetes con nombres de la forma ''kernel-sources-version'') y las fuentes de cualquier versión en el [http://www.kernel.org/ sitio de desarrollo del kernel]. Cuando obtenga fuentes del kernel de Linux, tenga en cuenta que el segundo número de la versión sea par, si es impar se trata de una versión para desarrolladores pero NO para usuarios finales.
  
 +
== Eliminar kernel antiguos ==
  
== Lecturas recomendadas ==
+
Los kernels van cambiando de versión y a medida que van apareciendo los vamos actualizando, pero tengamos en cuenta que cuando uno actualiza un kernel, no hace más que instalar la última versión del mismo, y las versiones anteriores siguen estando en nuestras máquinas, uno lo nota en el aumento del listado del [[GRUB]]. Una vez probada la última versión del kernel y viendo que no nos presentó ningún problema, estamos en condiciones de eliminar los kernels antiguos.
  
 +
1. Listar los kernels instalado con el siguiente comando:
  
Para manejar mejor las herramientas de módulos, puede consultar las páginas man de modules.conf, insmod, modprobe
+
dpkg --get-selections | grep linux-image
  
Algunos módulos que se distribuyen separados del kernel requieren ser compilados. Puede encontrar ayuda de como hacerlo en:  
+
2. Eliminar los kernels anteriores, excepto el ultimo con el siguiente comando:
 +
 
 +
sudo aptitude purge paquete
 +
 
 +
'''paquete''' es el nombre del kernel, ej: ''linux-image-2.6.20-12-generic''
 +
 
 +
3. Si el paquete no se encuentra actualizado te pedira hacerlo, esto no es necesario ya que procederemos a eliminar el kernel con el siguiente comando:
 +
 
 +
sudo aptitude remove paquete
 +
 
 +
== Minix ==
 +
 
 +
'''Minix''' es un proyecto totalmente independiente (y en algunos casos contrario) al proyecto de desarrollo deL Kernel de Linux (Actualmente en la versión "2.6.31.6", y con la versión en desarrollo "2.6.32-rc8"), sin embargo es otro buen punto para el conocimiento del software libre y un punto importante en su historia.
 +
 
 +
'''Minix''' es un clon del sistema operativo [[Unix]] distribuido junto con su [[código fuente]] y desarrollado por el profesor Andrew S. Tanenbaum en 1987. La última versión oficial de Minix es la 3.1.2, publicada el 8 de Mayo de 2006.
 +
 
 +
Fue creado para enseñar a sus alumnos el diseño de sistemas operativos en la Vrije Universiteit de Ámsterdam. La razón de su desarrollo fue porque [[Unix]] estaba bajo restricciones de licencia de AT&T, era demasiado complicado y corría sobre máquinas complejas; algo completamente antipedagógico.
 +
 
 +
Gracias a su reducido tamaño, diseño basado en el paradigma del micronúcleo, y su amplia documentación, resulta bastante apropiado para personas que desean instalar un sistema operativo compatible con Unix en su máquina personal así como aprender sobre su funcionamiento interno.
 +
 
 +
Minix fue desarrollado para correr sobre IBM PC con Unidad Central de Proceso|procesador Intel 8088 o superior, aunque se han creado conversiones para otros sistemas.
 +
 
 +
Debido al enfoque puramente educacional de Minix, Tanenbaum no permitía que este fuera modificado demasiado ya que esto complicaría el sistema y no permitiría que sus estudiantes lo entendieran en un semestre. Por estos motivos, Linus Torvalds decidió escribir su propio núcleo (informática)|núcleo de sistema operativo (Linux (núcleo)|Linux) compatible con Unix. En simbiosis con las herramientas de [[GNU]] surgió [[GNU/Linux]], que ha ganado protagonismo en el campo de los Unix para ordenadores compatibles con el IBM PC, principalmente debido a que su licencia ([[Licencia pública general de GNU|GPL]]) que permite la modificación del mismo. Actualmente Minix se distribuye con una licencia similar a la licencia BSD, lo que permite su modificación.
 +
 
 +
Para una persona poco familiarizada con los elementos internos de un sistema operativo, Minix es una buena opción que le permite entender casi todos los elementos del sistema con solo algunos meses de uso y estudio.
 +
 
 +
'''  Historia '''
 +
 
 +
Andrew S.Tanenbaum creó '''MINIX''' en la Universidad Libre de Ámsterdam para ejemplificar los principios recogidos en su libro de texto ''Operating Systems: Design and Implementation'' (1987). Una parte del código en Lenguaje de programación C del núcleo , el controlador de memoria y el sistema de ficheros de MINIX 1.0 se recogen en este libro.
 +
 
 +
Junto con el libro también había disponible un disquete con el código fuente de MINIX y los Archivo binario|binarios, junto con un manual de referencia del Sistema operativo.
 +
 
 +
Tanenbaum creó originalmente MINIX para que fuera compatible con las arquitecturas IBM Ordenador personal|PC e IBM Ordenador personal|PC/ AT (factor de forma)|AT, que eran las comunes en esa época.
 +
 
 +
'''MINIX 1.5''', lanzado en 1991, incluía soporte para MicroChannel IBM] PS/2 y también fue adaptado para las arquitecturas Motorola 68000 y SPARC, soportando Atari ST, Commodore Amiga, Apple Macintosh y plataformas Sun SPARCstation.
 +
 
 +
También existió una adaptación no oficial a las arquitecturas compatibles con Intel 386 (en modo de [[32 bits]] protegido), National Semiconductor NS32532, ARM y procesadores INMOS transputer. Meiko Scientific utilizó una primera versión de MINIX como base de su sistema operativo MeikOS. También existió una versión de MINIX que se ejecutaba como un proceso de usuario en el sistema operativo SunOS.
 +
 
 +
Al decrementarse la demanda de las computadoras de arquitectura de 68k, '''MINIX 2.0''', lanzada el 1997, sólo era compatible con las arquitecturas x86 y SPARC. Fue el tema para la segunda edición del libro de Tanenbaum, en esta ocasión co-escrito junto con Albert Woodhull, y fue distribuido en un CD-ROM incluido en el libro. MINIX 2.0 añadía compatibilidad con POSIX|POSIX1, soporte para arquitecturas 386 y superiores de 32 bits y reemplazó los protocolos de red Amoeba incluidos en MINIX 1.5 por TCP/IP. También aparecieron adaptaciones no oficiales de MINIX 2.0 para las arquitecturas basadas en el 68020 ISICAD Prisma 7000 y las basadas en Hitachi SH3.
 +
 
 +
'''Minix-vmd''' es una variante de MINIX 2.0 para procesadores compatibles con IntelIA-32, que fue creada por dos investigadores de la Vrije Universiteit, la cual añadía memoria virtual y soporte para el sistema gráfico X Window System.
 +
 
 +
'''MINIX 3'''
 +
 
 +
MINIX 3 fue públicamente anunciado el 24 de octubre de 2005 por Andrew Tanenbaum, durante su exposición en la conferencia de ACM en el Symposium on Operating System Principles. Aunque sigue manteniéndose como ejemplo para la nueva edición de su libro, está comprensiblemente rediseñado para ser “utilizado como un sistema serio en computadoras con recursos limitados y para aplicaciones que requieren de gran fiabilidad”.
 +
 
 +
Actualmente MINIX 3 soporta sólo arquitecturas derivadas de A-32, y está disponible en LiveCD, lo que permite ser utilizado sin necesidad de instalar el sistema operativo, y en versiones compatibles con sistemas de emulación o virtualización como BOCHS, Qemu, VMware y VirtualPC.
 +
 
 +
La versión 3.12 fue lanzada el 8 de mayo de 2006, y contiene X11, emacs, vi, cc, gcc, perl, python, ash, bash, zsh, ftp, ssh, telnet, pine y cerca de 650 aplicaciones más, comunes a los sistemas [[UNIX]]. Con la incorporación de X11, esta versión marca el punto de transición entre el modo texto y gráfico en este sistema operativo. Otra característica de esta versión, que será mejorada en un futuro, es la habilidad del sistema para mantenerse cuando el driver de algún componente deja de funcionar, y en algunos casos éstos son reemplazados automáticamente sin afectar a los procesos que se estén ejecutando. Siguiendo este camino, MINIX es self-healing, lo que lo hace ideal para sistemas que requieren alta fiabilidad.
 +
 
 +
Actualmente MINIX 3 está libremente disponible desde la página oficial [http://www.minix3.org www.minix3.org].
 +
 
 +
 
 +
''' Estructura de MINIX '''
 +
 
 +
 
 +
Para comprender un poco mejor la estructura Microkernel de MINIX voy a detallar a continuación las diferentes capas.
 +
 
 +
'''Capa 1:'''
 +
Esta es la capa que interactúa directamente con el hardware, es la encargada de atrapar todas las interrupciones y trampas, de planificar y ofrece a las capaz superiores un modelo de procesos independientes secuenciales para comunicarse mediante en uso de mensajes.
 +
En resumen cuenta con dos partes bien definidas en donde la primera trata todo lo referente a la programación de bajo nivel para brindar la abstracción de procesos a las capas superiores.
 +
El la segunda parte se gestionan los aspectos más mecánicos de los mensajes, como lo son los buffers de envío y recepción de mensajes que se alojan en la memoria física, las verificaciones de destinos y todo lo referente al manejo físico de memoria en lo que respecta a los mensajes.
 +
La primera capa es la que esta escrita en lenguaje ensamblador, el resto de las capaz ya esta escrita en lenguaje C.
 +
 
 +
'''Capa 2:'''
 +
Contiene todo lo concerniente a los procesos de E/S, uno por cada tipo de dispositivos (tareas), así como se muestra en el gráfico tenemos tareas para discos, impresoras, relojes, interfaces de red y tareas de sistema, que si bien no son dispositivos de sistema tienen sí por finalidad el servicio de copiado entre diferentes regiones de memoria para procesos que no cuentan con los privilegios para realizarlos ellos mismos.
 +
Todas las tareas de la capa 2 y el código de la capa 1 se combinan para formar un solo programa binario llamado kernel, aunque a pesar de que son compilados juntos cuando el kernel y los manejadores de interrupciones se están ejecutando estos tienen mayores privilegios que las tareas, de este modo se logra que el kernel pueda  ejecutar todo tipo de instrucción usando datos de cualquier parte del sistema, en fin acceder a la parte que guste de la memoria y cualquier registro de procesador. Sin embargo las tareas a pesar de no contar con la cualidades del kernel sí puede acceder a cualquier región de memoria que pertenezca a un proceso menos privilegiado con el objetivo de realizar E/S para ellos.
 +
 
 +
'''Capa 3:'''
 +
Consisten en los procesos servidores. Se ejecutan en un nivel menos privilegiado que e kernel o las tareas y no acceden directamente a los puertos de E/S. Tampoco pueden acceder a otra región de memoria que no sea la que le fue asignada, para ello se vale de las llamadas al sistema (FORK, EXEC y BRK) las cuales son proporcionadas por el administrador de memoria (MM). El sistema de archivos (FS) realiza las llamadas al sistema para los archivos (READ, MOUNT y CHDIR).
 +
Cabe destacar que el sistema de archivos de MINIX esta diseñado como “servidor de archivos” por lo que se podría mover a una máquina remota casi sin cambios.
 +
 
 +
 
 +
 
 +
== == Lecturas recomendadas == ==
 +
 
 +
== Texto de titular ==
 +
 
 +
 
 +
Para manejar mejor las herramientas de módulos, puedes consultar las páginas [[man]] de <code>modules.conf</code>, <code>insmod</code>, <code>modprobe</code>.
 +
 
 +
Algunos módulos que se distribuyen separados del kernel requieren ser compilados. Puedes encontrar ayuda de cómo hacerlo en:  
  
 
http://www.scyld.com/expert/modules.html
 
http://www.scyld.com/expert/modules.html
Línea 87: Línea 181:
 
http://structio.sourceforge.net/pablo/actualiz-kernel.html  
 
http://structio.sourceforge.net/pablo/actualiz-kernel.html  
  
----
+
== Notas ==
  
 +
[[#Módulos|(1)]] Esta extensión es típica de código objeto que es código generado por un compilador a partir de un archivo fuente (en el caso de Linux el compilador es [[gcc]]). Puede «unirse» estáticamente con más código objeto empleando un enlazador (en el caso de Linux el enlazador es [[ld]]) o dinámicamente usando <code>/lib/ld.so</code> (ver Administración de programas) o en el caso de módulos con <code>insmod</code>.
  
(1) Esta extensión es típica de código objeto que es código generado por un compilador a partir de un archivo fuente (en el caso de Linux el compilador es gcc). Puede "unirse" estáticamente con más código objeto empleando un encadenador (en el caso de Linux el encadenador es ld) o dinámicamente usando /lib/ld.so (ver Administración de programas) o en el caso de módulos con insmod.
+
[[#Módulos|(2)]] El archivo de configuración de <code>modutils</code> puede variarse especificando uno diferente en la variable <code>MODULECONF</code>.
  
(2) El archivo de configuración de modutils puede variarse especificando uno diferente en la variable MODULECONF
+
[[#Módulos|(3)]] La especificación de las rutas para buscar módulos puede hacerse con <code>MODPATH</code> o en <code>/etc/modules.conf</code> en las líneas de la forma ''path[tipo]''.
  
(3) La especificación de las rutas para buscar módulos puede hacerse con MODPATH o en /etc/modules.conf en las líneas de la forma path[tipo]
+
[[#Módulos|(4)]] El archivo <code>/etc/modules.conf</code> puede tener comentarios en líneas iniciadas con el carácter «#», puede tener líneas para: modificar las dependencias entre módulos (''below'', ''above'', ''probe'', ''probeall'', ''depfile''); para manejar las rutas donde buscar módulos (''path'', ''keep''); para ejecutar comandos antes, en vez o después de instalar o descargar los módulos (''pre-install'', ''install'', ''post-install'', ''pre-remove'', ''remove'', ''post-remove''); para especificar opciones por defecto para algunos módulos o insmod (''options'', ''insmod_opt''); para crear alias o para definir variables o tener en cuenta sólo ciertas partes del archivo (''alias'', ''define'', ''if'', ''else'', ''elseif'', ''endif'').
  
(4) El archivo /etc/modules.conf puede tener comentarios en líneas iniciadas con el caracter '#', puede tener líneas para: modificar las dependencias entre módulos (below, above, probe, probeall, depfile); para manejar las rutas donde buscar módulos (path, keep); para ejecutar comandos antes, en vez o después de instalar o descargar los módulos (pre-install, install, post-install, pre-remove, remove, post-remove); para especificar opciones por defecto para algunos módulos o insmod (options, insmod_opt); para crear alias o para definir variables o tener en cuenta sólo ciertas partes del archivo (alias, define, if, else, elseif, endif).
+
[[#Módulos|(5)]] Durante el arranque las dependencias entre módulos son generadas automáticamente y los módulos especificados (junto con sus opciones) en el archivo <code>/etc/modules</code> son cargados.
  
(5) Durante el arranque las dependencias entre módulos son generadas automáticamente y los módulos especificados (junto con sus opciones) en el archivo /etc/modules son cargados.
+
[[#Configuración del kernel|(6)]] kmod es el programa que se encarga de cargar módulos automáticamente por demanda i.e. sin intervención del usuario
 
+
(6) kmod es el programa que se encarga de cargar módulos automáticamente por demanda i.e. sin intervención del usuario
+
  
 
== Fuentes ==
 
== Fuentes ==
Línea 112: Línea 205:
 
Confirmamos que el trabajo es nuestro y no copia del trabajo de alguien más. Apreciamos que al usarlo cite la fuente http://structio.sourceforge.net/guias/AA_Linux_colegio/, y nos alegraría que nos informara (<structio-guias@lists.sourceforge.net>).
 
Confirmamos que el trabajo es nuestro y no copia del trabajo de alguien más. Apreciamos que al usarlo cite la fuente http://structio.sourceforge.net/guias/AA_Linux_colegio/, y nos alegraría que nos informara (<structio-guias@lists.sourceforge.net>).
  
<!-- Categorías-->
+
== Enlaces externos ==
 +
 
 +
{{Wikipedia|núcleo (informática)}}
 +
{{Wikipedia|Linux (núcleo)|el kernel Linux}}
 +
{{Commons|Linux kernel|el kernel Linux}}
 +
* [http://www.kernel.org/ Sitio web oficial del kernel Linux] {{en}}.
  
[[Categoría: Sistema Linux]]
 
 
[[Categoría: Sistema Linux]]
 
[[Categoría: Sistema Linux]]

Última revisión de 20:30 15 abr 2012


Eye.png Este artículo necesita ser wikificado en base al manual de estilo de este wiki. Por favor, colabora editándolo conforme a las normas de edición de este sitio. No elimines este aviso hasta que lo hayas hecho.


Linux
Tuxcrystal logo.png


Género:
Kernel
Licencia:
libre (GPL)
En Español:
No
Sitio Web:
www.kernel.org

[editar] Definición

En un sistema Linux la interacción final con dispositivos la realizan los controladores o el kernel (núcleo). Dicho de otra forma, un dispositivo sólo podrá ser usado si el kernel lo soporta o si existe un controlador capaz de controlarlo y si se configura apropiadamente para hacerlo. Por esto, los dispositivos que se produzcan hoy, no pueden ser operados con controladores ya existentes (a menos que los dispositivos hayan sido diseñados para ser operados con éstos, caso que para algunos dispositivos como tarjetas de sonido, tarjetas de vídeo o modems es poco común), por esto mismo, eventualmente, si actualiza el hardware de su computador o si desea usar un cierto servicio del kernel, también deberá actualizar algún módulo o eventualmente el kernel completo. Aunque algunos controladores autodetectan la configuración del dispositivo, esto no siempre ocurre y en algunos casos tendrá que probar (cacharrear), hasta hacer funcionar el módulo que maneja el dispositivo (en estas pruebas la documentación del dispositivo y la del módulo serán de utilidad. Si desea experimentar rápidamente emplee modconf).

Las fuentes en C de cada versión del kernel cuentan con controladores para diversos dispositivos. Cuando se compila una versión, algunos de esos controladores pueden unirse con el kernel mismo (estáticamente), otros pueden dejarse como módulos para cargarse/descargarse cuando la parte estática del kernel esté operando, otros pueden ser excluidos del proceso de compilación (y por lo tanto no podrán ser usados ni cuando el kernel esté operando).

[editar] Módulos

En este contexto, módulo se refiere a un controlador de un dispositivo o servicio que puede cargarse o descargarse cuando el usuario o algún dispositivo lo solicita (i.e dinámicamente). Los módulos que se distribuyen con en el kernel están ubicados en el directorio /lib/modules/versión, donde versión es la versión de su kernel (uname -r), con la extensión .o (1) organizados en directorios que indican el tipo de dispositivo o el propósito, por ejemplo fs (sistema de archivos), net (protocolos y hardware para redes).

Para lograr configurar un dispositivo controlado por un módulo, puedes emplear las herramientas del paquete modutils o modconf para:

  1. Asegurar que no haya conflictos entre el dispositivo con otros y eventualmente conocer la configuración que usa (algunos controladores autodetectan la configuración del dispositivo, pero no todos).
  2. Encontrar un módulo que pueda manejar el dispositivo.
  3. Eventualmente pasar opciones al módulo de acuerdo a la configuración del dispositivo (ej: IRQ o dirección base).

En Debian las herramientas del paquete modutils se configuran en los achivos del directorio /etc/modutils (con la información de esos archivos y de /etc/modules se genera el archivo de configuración de módulos /etc/modules.conf (2)). Los programas que ese paquete incluye son:

  • lsmod

Lista los módulos cargados, de cada uno presenta nombre, tamaño, cuenta de usos y lista de módulos que lo usan (es equivalente a cat /proc/modules).

  • rmmod módulos

Descarga uno o más módulos cargados, mientras éstos no estén siendo usados. Con la opción -r intenta descargar recursivamente módulos de los cuales el módulo especificado dependa. El comando rmmod -a descarga todos los módulos que no estén siendo usados.

  • insmod módulo [opciones]

Trata de cargar el módulo especificado. Pueden pasarse opciones específicas para el módulo, a continuación del nombre con la sintaxis símbolo=valor (los símbolos posibles dependen del módulo, pueden verse algunos en /usr/share/modconf/descr.gz que es la ayuda presentada por modconf o en último caso en las fuentes del módulo en los macros MODULE_PARAM y MODULE_PARAM_DESCR). Puede indicarse una ruta no estándar para buscar módulos estableciéndola en la variable MODPATH o en /etc/modules.conf. Dado que los módulos se enlazan directamente con el kernel, deben ser compilados para una versión precisa, con la opción -f puede evitarse el chequeo de versiones.

  • depmod<code>

Como un módulo puede requerir otros, hay dependencias que deben respetarse al cargar y descargar módulos. depmod permite calcular tales dependencias entre varios módulos o entre todos los disponibles con la opción <code>-a (3). Por defecto depmod -a escribe las dependencias en el archivo /lib/modules/version/modules.emp. Cada línea de ese archivo tiene el nombre de un módulo seguido del carácter ':' y los módulos de los cuales depende, separados por espacios.

  • modprobe módulo opciones<code>

Emplea la información de dependencias generada por depmod e información de <code>/etc/modules.conf para cargar el módulo especificado, cargando antes todos los módulos de los cuales dependa. Para especificar el módulo basta escribir el nombre (sin la ruta, ni la extensión .o) o uno de los alias definidos en /etc/modutils/alias (o en otro archivo del directorio /etc/modutils). Si hay líneas pre-install o post-install en /etc/modules.conf, modprobe puede ejecutar un comando antes y/o después de cargar el módulo. Como opciones para cargar el módulo usa prioritariamente las dadas en la línea de comandos y después las especificadas en líneas de la forma options módulo opciones en el archivo /etc/modules.conf (4).

Puedes emplear estos programas para configurar sus módulos y puedes hacer permanentes los cambios, agregando el módulo y las opciones en el archivo /etc/modules (5).

Para hacer más fácil la configuración de módulos, Debian ofrece las siguientes herramientas:

  • modconf

Para listar, cargar y descargar módulos con menús. Este programa muestra los módulos disponbiles en categorías y con ayudas sobre su uso y permite cargarlos o descargarlos del kernel, actualizando automáticamente los archivos /etc/modules y /etc/modules.conf (cambiando los archivos apropiados de /etc/modutils) para que los módulos configurados sean cargados automáticamente en el siguiente arranque. La información sobre los módulos disponibles la obtiene del directorio /lib/modules/, los módulos cargados y sus parámetros los lee de /etc/modutils y /etc/modules.conf y la ayuda y la información interna de los archivos en /usr/share/modules.conf ---modconf es un script para el intérprete de comandos.

  • update-modules

Actualiza el archivo /etc/modules.conf a partir de la información de los archivos del directorio /etc/modutils. En Debian no se edita directamente /etc/modules.conf.

Es posible que el kernel del que disponga no cuente con módulos que soporten ciertos dispositivos, en tal caso se puede:

  1. Buscar en Internet un módulo precompilado para la versión del kernel que tiene.
  2. Buscar fuentes de un módulo.
  3. Buscar una versión del kernel que incluya soporte para el dispositivo.

[editar] Configuración del kernel

Además de cargar y descargar módulos, algunas características del kernel pueden ser modificadas mientras está en funcionamiento el sistema, bien escribiendo en algunos archivos del directorio /proc/, o con el programa sysctl. Este programa con la opción -a presenta todas las variables modificables y su valor, entre otras encuentra variables que mantienen datos autodetectados en dispositivos (en particular del CD-ROM), datos de la interacción entre el kernel y el sistema de archivos, datos sobre los protocolos y dispositivos de redes, y detalles del kernel.

Para cambiar un valor se emplea:

/sbin/sysctl -w kernel.hostname=comp

con un nombre de variable en lugar de kernel.hostname y un valor adecuado en lugar de comp. Pueden hacerse cambios que se vuelven a tomar cada vez que el sistema inicia en el archivo /etc/sysctl.conf.

En cuanto a los módulos, las imágenes precompiladas del kernel producidas por Debian incluyen estáticamente varios controladores comunes y prácticamente los demás controladores los incluye como módulos. Por esto, si la versión del kernel que tiene soporta sus dispositivos y los servicios que desea, casi con seguridad usted NO necesita recompilar el kernel (puede confirmar si la imagen que tiene, soporta el controlador como módulo revisando en el directorio de módulos, o puede comprobar si éste se incluye estáticamente, efectuando el segundo paso para una instalación usando como archivo de configuración el de la imagen de su kernel).

Eventualmente, si su dispositivo no es detectado automáticamente o el módulo apropiado no es cargado automáticamente (6), tendrá que pasar los parámetros apropiados de una de las dos siguientes formas:

  • Controlado estático

Pase los parámetros apropiados desde el cargador de arranque o configúrelos de forma permanente con su cargador de arranque.

  • Módulo (dinámico)

Pase los parámetros de configuración a insmod/modprobe o configúrelos de forma permanente en /etc/modules, o en un archivo de /etc/modutils.

Eventualmente puede encontrar y usar algún programa que le ayude a determinar los parámetros apropiados y/o a realizar las configuraciones, o tendrá que consultar los manuales del dispositivo o incluso probar varias opciones hasta determinarlos.

Si tras consultar esta documentación o la del kernel o cualquier otra más actualizada, determina que una versión del kernel diferente a la que tiene, soporta cierto dispositivo o servicio que requiere, el método más sencillo que puede intentar es instalar una imagen precompilada disponible en algún depósito de paquetes de Debian (el nombre es de la forma kernel-image-version).

En caso de requerir un kernel con una configuración muy especial (por ejemplo, que incluya estáticamente ciertos módulos o que excluya de la compilación módulos para hacer un kernel pequeño) o si requiere una versión para la que que no haya imágenes precompiladas de Debian, recomendamos instalar primero una versión precompilada con una versión cercana a la que desea instalar, para tomar la configuración de ésta y modificarla antes de compilar la nueva versión. Además recomendamos esto porque las imágenes precompiladas actualizan otros programas indispensables para las nuevas versiones del kernel.

Para obtener las fuentes, puede recurrir a paquetes Debian para algunas versiones de las fuentes en depósitos oficiales (paquetes con nombres de la forma kernel-sources-version) y las fuentes de cualquier versión en el sitio de desarrollo del kernel. Cuando obtenga fuentes del kernel de Linux, tenga en cuenta que el segundo número de la versión sea par, si es impar se trata de una versión para desarrolladores pero NO para usuarios finales.

[editar] Eliminar kernel antiguos

Los kernels van cambiando de versión y a medida que van apareciendo los vamos actualizando, pero tengamos en cuenta que cuando uno actualiza un kernel, no hace más que instalar la última versión del mismo, y las versiones anteriores siguen estando en nuestras máquinas, uno lo nota en el aumento del listado del GRUB. Una vez probada la última versión del kernel y viendo que no nos presentó ningún problema, estamos en condiciones de eliminar los kernels antiguos.

1. Listar los kernels instalado con el siguiente comando:

dpkg --get-selections | grep linux-image

2. Eliminar los kernels anteriores, excepto el ultimo con el siguiente comando:

sudo aptitude purge paquete

paquete es el nombre del kernel, ej: linux-image-2.6.20-12-generic

3. Si el paquete no se encuentra actualizado te pedira hacerlo, esto no es necesario ya que procederemos a eliminar el kernel con el siguiente comando:

sudo aptitude remove paquete

[editar] Minix

Minix es un proyecto totalmente independiente (y en algunos casos contrario) al proyecto de desarrollo deL Kernel de Linux (Actualmente en la versión "2.6.31.6", y con la versión en desarrollo "2.6.32-rc8"), sin embargo es otro buen punto para el conocimiento del software libre y un punto importante en su historia.

Minix es un clon del sistema operativo Unix distribuido junto con su código fuente y desarrollado por el profesor Andrew S. Tanenbaum en 1987. La última versión oficial de Minix es la 3.1.2, publicada el 8 de Mayo de 2006.

Fue creado para enseñar a sus alumnos el diseño de sistemas operativos en la Vrije Universiteit de Ámsterdam. La razón de su desarrollo fue porque Unix estaba bajo restricciones de licencia de AT&T, era demasiado complicado y corría sobre máquinas complejas; algo completamente antipedagógico.

Gracias a su reducido tamaño, diseño basado en el paradigma del micronúcleo, y su amplia documentación, resulta bastante apropiado para personas que desean instalar un sistema operativo compatible con Unix en su máquina personal así como aprender sobre su funcionamiento interno.

Minix fue desarrollado para correr sobre IBM PC con Unidad Central de Proceso|procesador Intel 8088 o superior, aunque se han creado conversiones para otros sistemas.

Debido al enfoque puramente educacional de Minix, Tanenbaum no permitía que este fuera modificado demasiado ya que esto complicaría el sistema y no permitiría que sus estudiantes lo entendieran en un semestre. Por estos motivos, Linus Torvalds decidió escribir su propio núcleo (informática)|núcleo de sistema operativo (Linux (núcleo)|Linux) compatible con Unix. En simbiosis con las herramientas de GNU surgió GNU/Linux, que ha ganado protagonismo en el campo de los Unix para ordenadores compatibles con el IBM PC, principalmente debido a que su licencia (GPL) que permite la modificación del mismo. Actualmente Minix se distribuye con una licencia similar a la licencia BSD, lo que permite su modificación.

Para una persona poco familiarizada con los elementos internos de un sistema operativo, Minix es una buena opción que le permite entender casi todos los elementos del sistema con solo algunos meses de uso y estudio.

Historia

Andrew S.Tanenbaum creó MINIX en la Universidad Libre de Ámsterdam para ejemplificar los principios recogidos en su libro de texto Operating Systems: Design and Implementation (1987). Una parte del código en Lenguaje de programación C del núcleo , el controlador de memoria y el sistema de ficheros de MINIX 1.0 se recogen en este libro.

Junto con el libro también había disponible un disquete con el código fuente de MINIX y los Archivo binario|binarios, junto con un manual de referencia del Sistema operativo.

Tanenbaum creó originalmente MINIX para que fuera compatible con las arquitecturas IBM Ordenador personal|PC e IBM Ordenador personal|PC/ AT (factor de forma)|AT, que eran las comunes en esa época.

MINIX 1.5, lanzado en 1991, incluía soporte para MicroChannel IBM] PS/2 y también fue adaptado para las arquitecturas Motorola 68000 y SPARC, soportando Atari ST, Commodore Amiga, Apple Macintosh y plataformas Sun SPARCstation.

También existió una adaptación no oficial a las arquitecturas compatibles con Intel 386 (en modo de 32 bits protegido), National Semiconductor NS32532, ARM y procesadores INMOS transputer. Meiko Scientific utilizó una primera versión de MINIX como base de su sistema operativo MeikOS. También existió una versión de MINIX que se ejecutaba como un proceso de usuario en el sistema operativo SunOS.

Al decrementarse la demanda de las computadoras de arquitectura de 68k, MINIX 2.0, lanzada el 1997, sólo era compatible con las arquitecturas x86 y SPARC. Fue el tema para la segunda edición del libro de Tanenbaum, en esta ocasión co-escrito junto con Albert Woodhull, y fue distribuido en un CD-ROM incluido en el libro. MINIX 2.0 añadía compatibilidad con POSIX|POSIX1, soporte para arquitecturas 386 y superiores de 32 bits y reemplazó los protocolos de red Amoeba incluidos en MINIX 1.5 por TCP/IP. También aparecieron adaptaciones no oficiales de MINIX 2.0 para las arquitecturas basadas en el 68020 ISICAD Prisma 7000 y las basadas en Hitachi SH3.

Minix-vmd es una variante de MINIX 2.0 para procesadores compatibles con IntelIA-32, que fue creada por dos investigadores de la Vrije Universiteit, la cual añadía memoria virtual y soporte para el sistema gráfico X Window System.

MINIX 3

MINIX 3 fue públicamente anunciado el 24 de octubre de 2005 por Andrew Tanenbaum, durante su exposición en la conferencia de ACM en el Symposium on Operating System Principles. Aunque sigue manteniéndose como ejemplo para la nueva edición de su libro, está comprensiblemente rediseñado para ser “utilizado como un sistema serio en computadoras con recursos limitados y para aplicaciones que requieren de gran fiabilidad”.

Actualmente MINIX 3 soporta sólo arquitecturas derivadas de A-32, y está disponible en LiveCD, lo que permite ser utilizado sin necesidad de instalar el sistema operativo, y en versiones compatibles con sistemas de emulación o virtualización como BOCHS, Qemu, VMware y VirtualPC.

La versión 3.12 fue lanzada el 8 de mayo de 2006, y contiene X11, emacs, vi, cc, gcc, perl, python, ash, bash, zsh, ftp, ssh, telnet, pine y cerca de 650 aplicaciones más, comunes a los sistemas UNIX. Con la incorporación de X11, esta versión marca el punto de transición entre el modo texto y gráfico en este sistema operativo. Otra característica de esta versión, que será mejorada en un futuro, es la habilidad del sistema para mantenerse cuando el driver de algún componente deja de funcionar, y en algunos casos éstos son reemplazados automáticamente sin afectar a los procesos que se estén ejecutando. Siguiendo este camino, MINIX es self-healing, lo que lo hace ideal para sistemas que requieren alta fiabilidad.

Actualmente MINIX 3 está libremente disponible desde la página oficial www.minix3.org.


Estructura de MINIX


Para comprender un poco mejor la estructura Microkernel de MINIX voy a detallar a continuación las diferentes capas.

Capa 1: Esta es la capa que interactúa directamente con el hardware, es la encargada de atrapar todas las interrupciones y trampas, de planificar y ofrece a las capaz superiores un modelo de procesos independientes secuenciales para comunicarse mediante en uso de mensajes. En resumen cuenta con dos partes bien definidas en donde la primera trata todo lo referente a la programación de bajo nivel para brindar la abstracción de procesos a las capas superiores. El la segunda parte se gestionan los aspectos más mecánicos de los mensajes, como lo son los buffers de envío y recepción de mensajes que se alojan en la memoria física, las verificaciones de destinos y todo lo referente al manejo físico de memoria en lo que respecta a los mensajes. La primera capa es la que esta escrita en lenguaje ensamblador, el resto de las capaz ya esta escrita en lenguaje C.

Capa 2: Contiene todo lo concerniente a los procesos de E/S, uno por cada tipo de dispositivos (tareas), así como se muestra en el gráfico tenemos tareas para discos, impresoras, relojes, interfaces de red y tareas de sistema, que si bien no son dispositivos de sistema tienen sí por finalidad el servicio de copiado entre diferentes regiones de memoria para procesos que no cuentan con los privilegios para realizarlos ellos mismos. Todas las tareas de la capa 2 y el código de la capa 1 se combinan para formar un solo programa binario llamado kernel, aunque a pesar de que son compilados juntos cuando el kernel y los manejadores de interrupciones se están ejecutando estos tienen mayores privilegios que las tareas, de este modo se logra que el kernel pueda ejecutar todo tipo de instrucción usando datos de cualquier parte del sistema, en fin acceder a la parte que guste de la memoria y cualquier registro de procesador. Sin embargo las tareas a pesar de no contar con la cualidades del kernel sí puede acceder a cualquier región de memoria que pertenezca a un proceso menos privilegiado con el objetivo de realizar E/S para ellos.

Capa 3: Consisten en los procesos servidores. Se ejecutan en un nivel menos privilegiado que e kernel o las tareas y no acceden directamente a los puertos de E/S. Tampoco pueden acceder a otra región de memoria que no sea la que le fue asignada, para ello se vale de las llamadas al sistema (FORK, EXEC y BRK) las cuales son proporcionadas por el administrador de memoria (MM). El sistema de archivos (FS) realiza las llamadas al sistema para los archivos (READ, MOUNT y CHDIR). Cabe destacar que el sistema de archivos de MINIX esta diseñado como “servidor de archivos” por lo que se podría mover a una máquina remota casi sin cambios.


[editar] == Lecturas recomendadas ==

[editar] Texto de titular

Para manejar mejor las herramientas de módulos, puedes consultar las páginas man de modules.conf, insmod, modprobe.

Algunos módulos que se distribuyen separados del kernel requieren ser compilados. Puedes encontrar ayuda de cómo hacerlo en:

http://www.scyld.com/expert/modules.html

Otro documento donde puede consultar el proceso de compilación está disponible en Internet en:

http://structio.sourceforge.net/pablo/actualiz-kernel.html

[editar] Notas

(1) Esta extensión es típica de código objeto que es código generado por un compilador a partir de un archivo fuente (en el caso de Linux el compilador es gcc). Puede «unirse» estáticamente con más código objeto empleando un enlazador (en el caso de Linux el enlazador es ld) o dinámicamente usando /lib/ld.so (ver Administración de programas) o en el caso de módulos con insmod.

(2) El archivo de configuración de modutils puede variarse especificando uno diferente en la variable MODULECONF.

(3) La especificación de las rutas para buscar módulos puede hacerse con MODPATH o en /etc/modules.conf en las líneas de la forma path[tipo].

(4) El archivo /etc/modules.conf puede tener comentarios en líneas iniciadas con el carácter «#», puede tener líneas para: modificar las dependencias entre módulos (below, above, probe, probeall, depfile); para manejar las rutas donde buscar módulos (path, keep); para ejecutar comandos antes, en vez o después de instalar o descargar los módulos (pre-install, install, post-install, pre-remove, remove, post-remove); para especificar opciones por defecto para algunos módulos o insmod (options, insmod_opt); para crear alias o para definir variables o tener en cuenta sólo ciertas partes del archivo (alias, define, if, else, elseif, endif).

(5) Durante el arranque las dependencias entre módulos son generadas automáticamente y los módulos especificados (junto con sus opciones) en el archivo /etc/modules son cargados.

(6) kmod es el programa que se encarga de cargar módulos automáticamente por demanda i.e. sin intervención del usuario

[editar] Fuentes

Versión 1.1. Publicada en Febrero de 2003

TRABAJO CEDIDO AL DOMINIO PÚBLICO

Nosotros Vladimir Támara, Jaime Irving Dávila, Pablo Chamorro e Igor Támara hemos escrito "Aprendiendo a aprender Linux: Guías para colegios con plataforma de referencia S-Helio 1.1", que asisten el uso, la instalación y la administración de redes Linux en colegios. Por este medio cedemos esta obra al dominio público, renunciando a todos los derechos patrimoniales con lo que esperamos facilitar su adaptación y uso en colegios. En particular quedan permitidos para siempre: el uso, la copia, la redistribución y la modificación de este escrito y sus fuentes.

Confirmamos que el trabajo es nuestro y no copia del trabajo de alguien más. Apreciamos que al usarlo cite la fuente http://structio.sourceforge.net/guias/AA_Linux_colegio/, y nos alegraría que nos informara (<structio-guias@lists.sourceforge.net>).

[editar] Enlaces externos

Wikipedia logo.png Wikipedia alberga un artículo enciclopédico sobre Kernel.
Wikipedia logo.png Wikipedia alberga un artículo enciclopédico sobre el kernel Linux.
Commons alberga contenido multimedia sobre el kernel Linux.
Herramientas personales