12
2.2 NUCLEO O KERNEL Definición de Kernel Núcleo. Parte esencial de un sistema operativo que provee los servicios más básicos del sistema. Se encarga de gestionar los recursos como el acceso seguro al hardware de la computadora. Se encarga también del multiplexado, determinando qué programa accederá a un determinado hardware si dos o más quieren usarlo al mismo tiempo. El kernel también ofrece una serie de abstracciones del hardware para que los programadores no tengan que acceder directamente al hardware, proceso que puede ser complicado. En informática, el núcleo (también conocido en español con el anglicismo kernel, de raíces germánicas como kern) es la parte fundamental de un sistema operativo. Es el software responsable de facilitar a los distintos programas acceso seguro al hardware de la computadora. Como hay muchos programas y el acceso al hardware es limitado, el núcleo 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. Acceder al hardware directamente puede ser realmente complejo, por lo que los núcleos suelen implementar una serie de abstracciones del hardware. Esto permite esconder la complejidad, y proporciona una interfaz limpia y uniforme al hardware subyacente, lo que facilita su uso para el programador. Esquema básico de la interacción entre un Núcleo (Kernel), el resto del Software (los programas de aplicación, las bases de datos, etc.) y el Hardware. 1

25738116-leccion-2-2-Nucleo-o-Kernel.pdf

Embed Size (px)

Citation preview

Page 1: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

2.2 NUCLEO O KERNEL

Definición de Kernel Núcleo. Parte esencial de un sistema operativo que provee los servicios más básicos del sistema. Se encarga de gestionar los recursos como el acceso seguro al hardware de la computadora. Se encarga también del multiplexado, determinando qué programa accederá a un determinado hardware si dos o más quieren usarlo al mismo tiempo.

El kernel también ofrece una serie de abstracciones del hardware para que los programadores no tengan que acceder directamente al hardware, proceso que puede ser complicado.

En informática, el núcleo (también conocido en español con el anglicismo kernel, de raíces germánicas como kern) es la parte fundamental de un sistema operativo. Es el software responsable de facilitar a los distintos programas acceso seguro al hardware de la computadora. Como hay muchos programas y el acceso al hardware es limitado, el núcleo 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. Acceder al hardware directamente puede ser realmente complejo, por lo que los núcleos suelen implementar una serie de abstracciones del hardware. Esto permite esconder la complejidad, y proporciona una interfaz limpia y uniforme al hardware subyacente, lo que facilita su uso para el programador.

Esquema básico de la interacción entre un Núcleo (Kernel), el resto del Software (los programas de aplicación, las bases de datos, etc.) y el Hardware.

1

Page 2: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

Generalidades

En informática, el núcleo de un sistema operativo, es el programa informático que se asegura de:

· La comunicación entre los programas informáticos y el hardware.

· Gestión de los distintos programas informáticos (tareas) de una máquina.

· Gestión del hardware (memoria, procesador, periférico, forma de almacenamiento, etc.)

La mayoría de los sistemas operativos se construyen en torno al concepto del núcleo. La existencia de un núcleo, es decir, de un único programa responsable de la comunicación entre el hardware y el programa informático, resulta de compromisos complejos referentes a cuestiones de resultados, seguridad y arquitectura de los procesadores. El núcleo tiene grandes poderes sobre la utilización de los recursos materiales (hardware), en particular, de la memoria. Los núcleos tienen como funciones básicas de garantizar el cargamento y la ejecución de los procesos, las entradas / salidas y proponer un interfaz entre el espacio núcleo y los programas del espacio del usuario.

Tipos de Núcleos

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: para usar distintos programas se tenía que reiniciar y reconfigurar la computadora cada vez. 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.

2

Page 3: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

· 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. Son los que reciben o dan salida a señales analógicas que son procesadas digitalmente. Esto puede realizarse gracias a los conversores analogicos/digitales que , como su nombre indica ,convierte señales analógicas a digitales

· 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.

El kernel ó núcleo de linux se puede definir como el corazón de este sistema operativo. Es el encargado de que el software y el hardware de tu ordenador puedan trabajar juntos.

Las funciones más importantes del mismo, aunque no las únicas, son:

• Administración de la memoria para todos los programas y procesos en ejecución.

• Administración del tiempo de procesador que los programas y procesos en ejecucion utilizan.

• Es el encargado de que podamos acceder a los periféricos/elementos de nuestro ordenador de una manera cómoda.

Hasta que empezó el desarrollo de la serie 2.6 del núcleo, existieron dos tipos de versiones del núcleo:

• Versión de produccion: La version de produccion, era la version estable hasta el momento. Esta version era el resultado final de las versiones de desarrollo o experimentales.

Cuando el equipo de desarrollo del núcleo experimental, decidia que tenia un núclo estable y con la suficiente calidad, se lanzaba una nueva versión de producción ó estable. Esta versión era la que se debia utilizar para un uso normal del sistema, ya que eran las versiones consideradas más estables y libres de fallos en el momento de su lanzamiento.

• Versión de desarrollo: Esta versión era experimental y era la que utilizaban los desarrolladores para programar, comprobar y verificar nuevas

3

Page 4: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

características, correcciones, etc. Estos núcleos solian ser inestables y no se debian usar sin saber lo que se hacia.

Como interpretar los numeros de las versiones de las series por debajo de la 2.6:

• Las versiones del núcleo se numeraban con 3 numeros, de la siguiente forma: AA.BB.CC

AA: Indicaba la serie/versión principal del núcleo. Solo han existido la 1 y 2. Este número cambiaba cuando la manera de funcionamiento del kernel habia sufrido un cambio muy importante.BB: Indicaba si la versión era de desarrollo ó de producción. Un número impar, significaba que era de desarrollo, uno par, que era de producción.CC: Indicaba nuevas revisiones dentro de una versión, en las que lo único que se habia modificado eran fallos de programación.

• Unos ejemplos nos ayudaran a entenderlo mejor:

ej1: versión del núcleo 2.4.0: Núcleo de la serie 2 (AA=2), versión de producción 4 (BB=4 par), primera versión de la serie 2.4 (CC=0)ej2: versión del núcleo 2.4.1: Núcleo de la serie 2, versión 4, en el que se han corregido errores de programación presentes en la version 2.4.0 (CC=1)ej3: versión del núcleo 2.5.0: versión 0 del núcleo de desarrollo 2.5.

Con la serie 2.6 del núcleo, el sistema de numeración asi como el modelo de desarrollo han cambiado. Las versiones han pasado a numerarse con 4 digitos y no existen versiones de produccion y desarrollo.

• Las versiones del núcleo se numeran hoy en dia con 4 digitos, de la siguiente forma: AA.BB.CC.DD.

AA: Indica la serie/versión principal del núcleo.BB: Indica la revision principal del núcleo. Numeros pares e impares no tienen ningun significado hoy en dia.CC: Indica nuevas revisiones menores del núcleo. Cambia cuando nuevas caracteristicas y drivers som soportados.DD: Este digito cambia cuando se corrigen fallos de programación o fallos de seguridad dentro de una revisión.

Hoy en dia se suele usar el nucleo distribuido con la distribucion que el usuario utiliza. Son las distribuciones las encargadas de distribuir núcleos estables a sus ausuarios y estos nucleos se basan en el núcleo ("vanilla") distribuido por Linux Torvalds y el equipo de programadores del núcleo.

4

Page 5: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

Dónde conseguir el núcleo

El núcleo denominado "vanilla" (sin alteraciones y suministrado por Linux Torvalds) se puede bajar de un gran número de servidores en internet pero el sitio oficial es http://www.kernel.org/. En este enlace tienes la lista internacional oficial de servidores espejos, de donde es posible bajarse cualquier versión del núcleo (última y antigüas).

Cada distribución distribuye sus nucleos por los canales de actualización habituales para cada una de ellas.

Configuración e instalación de un nuevo núcleo

Este es uno de los temas que asustan a los nuevos usuarios de Linux. Lo primero, deciros que no hay razón para asustarse, la configuración e instalación de un nuevo núcleo en nuestro sistema es mas fácil de lo suena. Lo segundo, es que puedes tener un sistema estable, actualizado y que funcione sin problemas durante meses sin tener que compilar un solo núcleo, siempre y cuando utilices los núcleos distribuidos con esa distribución.

Es muy recomendable el utilizar los núcleos distribuidos por la distribución que utilizas. Estos núcleos tienen muy buena calidad y son muy completos y con esto nos evitamos el trabajo de configurar, compilar y mantener nuevas versiones del núcleo. Si eres de los que les gustan experimentar y aprender nuevas cosas, adelante, nadie impide bajar el último núcleo y experimentar con el, esto era mucho más común hace unos años y una tarea casi imprescindible en muchos casos.

Para los interesados en el tema existen dos documentos muy buenos que podeis utilizar para aprender a como compilar un núcleo, FAQ/Kernel compilation y el Kernel Rebuild Guide

Como compilar un kernel.

Cuando Linux inicia, se suele cargar un archivo comprimido en memoria que suele andar por /boot, y que se llama /boot/vmlinux-x.x.x, este archivo resulta ser el kernel comprimido.

La idea de configurar u optimizar este kernel, es la de crear este archivo, con los drivers y datos que sean acordes a la configuración técnica de nuestra máquina. Para hacer esto, los drivers pueden ser configurados tanto formando parte del kernel como de forma de un módulo cargable. El propósito de este concepto radica en que hay drivers, como el audio, por ejemplo, que no hacen falta todo el tiempo, sino solo cuando se va ha necesitar en una aplicación tipo CD Player. Si por lo contrario, es necesario desde un principio convendría que sea parte del kernel. Si elijo cargarlo como módulo, se puede hacer de dos maneras, o

5

Page 6: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

habilito la opción de que el kernel lo cargue o bien lo realizo a mano, a través del comando insmod.

Si hemos cargado las fuentes del kernel precompilado de nuestra distribución, tendremos las mismas en el directorio /usr/src/linux, allí hay un archivo oculto llamado .config, es un archivo, para variar de texto, por lo que podemos abrirlo con cualquier editor e imprimirlo, por cualquier cosa. Existen opciones de configuración que no deben cambiarse como protocolos, y otras cosas, pero con el tiempo de uso del Sistema se verán que cosa hacen falta o no. Sobre todo en kernel nuevos a compilar. Como norma, suelo dejar el kernel viejo y le agrego el nuevo, como predeterminado en el arranque. Si tengo algún inconveniente de que no arranque o algo similar, entonces vuelvo a bootear e inicio el viejo, para solucionar el problema.

El proceso empleado para bootear es bastante simple ya que son comandos mas o menos estándares. El único inconveniente aparece al tener que elegir las cosas a cargar o no.

Para iniciar la compilación se requiere tener instalado la utilidad make y un compilador para C, como el gcc.

Sabiendo que tenemos los dos programas y las fuentes del kernel en nuestro poder, comenzamos con el proceso:

Primero borramos el directorio /usr/src/linux, recordemos que es un link.

Luego descomprimamos y desempaquetemos las fuentes en el directorio /usr/src/linux, cambiamos el nombre del directorio a /usr/src/linux-x.x.x que corresponden a la versión del kernel, por ejemplo si han descargado el 2.2.17, sería /usr/src/linux-2.2.17.

Creamos un link en el directorio /usr/src/linux que señale a /usr/src/linux-2.2.17, esto nos servirá cuando estemos compilando.

Dentro de directorio tenemos tres opciones para trabajar, si estamos sobre las X ponemos (en consola), make xconfig, si estamos en consola y deseamos trabajar con una pequeña pantalla gráfica ponemos make menuconfig. Si deseamos trabajar directamente desde consola, se usa make config. Las diferencias son, que las dos primeras pueden o permiten mostrar una ayuda, por las dudas, mientras que le otra no, además de no permitir ir hacia atrás.

Luego de optimizar el kernel, se graban los cambios, en este punto se pueden hacer varias cosas, una es grabar la configuración en un archivo que yo he definido y la otra es guardar en el mismo .config. Otra opción es de no guardar e incluso permite cargar una configuración anterior, por ejemplo si estamos actualizando y no queremos volver a verificar todas las opciones.

6

Page 7: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

Luego de terminar el proceso de selección, hacemos make dep, que crea las dependencias de los módulos, algunos hacen make clean, que borra las configuraciones anteriores. Yo no lo hago, a criterio.

Posterior a esto viene make bzImage, este paso es muy importante ya que comprime el kernel que hemos creado. Puede pasar que indique que el cache sea muy chico, entonces se hace make zImage. Recuerden que Linux considera las palabras con letras mayúsculas y minúsculas. Suele tardar algún tiempo.

Terminado este proceso viene make modules, que crea los módulos que hemos definido. Al terminar hacemos make modules_install y genera los directorios e instala los módulos creados en el paso anterior.

Hasta aquí se crearan dos archivos que nos interesan, uno es /usr/src/linux/System.map, y otro llamado /usr/src/linux/arch/i386/boot/bzImage, ahora los copiamos al directorio /boot haciendo:

# cp /usr/src/linux/System.map /boot/System.map-2.2.27, (según el ejemplo)# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinux-2.2.17.

Ahora debemos borrar el archivo /boot/System.map, que suele ser un link, y lo creamos nuevamente para el System.map nuevo.

En este paso algunos hacen make lilo, pero prefiero configurar el archivo de configuración del lilo de forma personal, de la siguiente manera:

Agrego como opción:image=/boot/vmlinux-2.2.17label=linux.nuevo # aquí va el nombre que decidan.root= /dev/hda5 # el dispositivo que es el linux native. Suele ser el mismo que el kernel viejo.read-onlyappend=” opciones “ # qauí van las opciones que necesiten.

Luego de hacer esto hay que reinstalar el lilo para ver si es tomado el nuevo kernel, se escribe en consola lilo -v.

Si hay error entonces será indicado, puede ser que parezca por un error de tipeo en alguna sentencia, se modifica el /etc/lilo.conf y se reinstala.

Luego se reinicia la PC y se bootea con el nuevo kernel.

Si todo funciona bien, entonces no habría problemas pero si hay duda pueden consultar el Kernel-Como para ver si hay algún problema.

Hago notar, que este método, me a dado resultado y a varios de la misma manera, por lo que considero que no tendrán problemas al respecto.

7

Page 8: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

Kernel Panic

El kernel panic es un mensaje desplegado por un sistema operativo una vez detectado un error interno de sistema del cual no se puede recuperar. Intentos del sistema operativo para leer una dirección de memoria inválida o no permitida son una fuente común de kernel panics. El error también puede ocurrir como resultado de un fallo de hardware.

Un kernel panic puede ser producto de una explotación de una vulnerabilidad en algún módulo del kernel de forma malintencionada, logrando corromper la integridad del sistema.

Kernel Panic, o “Pantalla azul de la muerte” en Windows

La llamada Blue Screen of Death o BSoD (más conocida en español como pantalla azul de la muerte o «pantallazo azul»), hace referencia a la pantalla mostrada por el sistema operativo Windows de Microsoft cuando no puede (o está en peligro de no poder) recuperarse de un error de sistema. Hay dos pantallas de error de Windows referidas como pantallas azules de la muerte, siendo una de ellas bastante más seria que la otra.

· Una pantalla azul de la muerte es conocida como un "Stop Error" o "Error de detención grave" en los manuales de Windows XP.

· Una pantalla azul de la muerte "real" sucede cuando el kernel del sistema operativo Windows NT no puede recuperarse de un error y la única acción que un usuario puede realizar es reiniciar el sistema perdiendo todo el trabajo no guardado, el estado de todos los programas ejecutándose en ese momento y, posiblemente, poniendo en peligro la integridad del sistema de archivos.

8

Page 9: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

La pantalla azul de la muerte está presente, de una forma u otra, en todos los sistemas Windows desde Windows 2.0.

La información mostrada en la pantalla azul de la muerte no es, en ningún caso, suficiente para determinar que fue mal, incluso para alguien con acceso al código fuente (por ejemplo, no contiene un volcado de pila y, aunque lo contuviese, sería bastante trabajo copiarlo a otro sitio, dado que no se pueden grabar los datos mostrados en la pantalla azul). La pantalla sólo muestra el punto en el cual el código falló (que puede ser completamente diferente del punto donde el error fue originado) y, por ello puede inducir erróneamente al usuario a pensar que se trata de un error de hardware o algo similar.

El motivo más común por el cual se muestran pantallas azules, es por problemas entre versiones incompatibles de DLLs (biblioteca de enlace dinámico). Esta causa es conocida en ocasiones como el infierno de las DLL. Windows carga esas DLL en memoria cuando son necesitadas por los programas. Si esas DLLs son reemplazadas por otras más recientes (o más antiguas), la próxima vez que la aplicación cargue la DLL puede encontrarse con algo distinto a lo que espera. Estas incompatibilidades aumentan con el paso del tiempo, según se va instalando más y más software. Ello es uno de las principales motivos por los cuales un sistema recién instalado es más estable que uno al que se le han practicado múltiples instalaciones y desinstalaciones de programas.

Kernel Panic en Mac Os

Se produce cuando el núcleo del Sistema recibe datos en un formato que le es desconocido o que no puede usar debidamente, también pueden ser causados por un mal estado del hardware del equipo, o por problemas con los drivers de estos.

9

Page 10: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

Como se ve en la imagen, un Kernel Panic consiste en un texto sobrescrito en la última imagen que se mostrara en pantalla, el cual, a diferencia de Windows, puede ser de gran ayuda para los programadores y ayudarles a solucionar los problemas que pudieran tener tanto el hardware como el software (si es que el problema es algo mas grande que un simple “cuelgue” ).

10

Page 11: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

Kernel Panic en Linux

En Linux, un “panic” es un error insalvable del sistema detectado por el kernel en oposición a los errores similares detectados en el código del espacio de usuario. Es posible para el código del kernel 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 los alertas son el resultado de excepciones en el código del kernel 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 una falla en el hardware como una falla del RAM o errores en las funciones aritméticas en el procesador, o por un error en el software.

11

Page 12: 25738116-leccion-2-2-Nucleo-o-Kernel.pdf

Y acá un plus para hacer un poco interesante este documento: Si tienes Windows y el color azul del panic te tiene enfermo, con esto vas a poder cambiarle el color

1) Con el Notepad abrir archivo System.ini (C: \WINDOWS)

2) Localizar Sección 386ENH

3) Añadir a esa sección el siguiente texto:

MessageBackColor=Numero de color y MessageTextColor=Numero de Color

4) Los números de colores son: 0 -> Azul, 1 -> Verde, 2-> cian, 3 rojo, 4 magenta, 5 marrón, 6 blanco, 7 azul intenso, 8 verde intenso, A: cian intenso, B rojo intenso, C magenta intenso, D amarillo, E blanco.

12