IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

S'ha produït un error en crear la miniatura: /bin/bash: /usr/bin/rsvg-convert/rsvg: Not a directory
Esquema bàsic de la interacció entre nucli, la resta del programari i el maquinari
Una visió típica de l'arquitectura de computadors com a una serie de capes d'abstracció: hardware, firmware, ensamblador, nucli, sistema operatiu i aplicacions

El nucli (també conegut per l'anglicisme kernel) és la part fonamental del sistema operatiu. És el programari responsable de facilitar a les aplicacions del sistema un accés segur al maquinari i de gestionar els recursos compartits (memòria, espai de disc, perifèrics, etc.).

Accedir directament al maquinari pot ser una tasca realment complexa per a la majoria d'aplicacions. El nucli s'encarrega d'oferir una interfície més senzilla d'accés al maquinari mitjançant una abstracció del maquinari que permet amagar (encapsular) la complexitat del sistema i proporcionar un accés senzill i controlat al maquinari. A aquesta interfície se l'anomena màquina virtual.

Tipus de nuclis

Tots els SO disposen d'un nucli, encara que hi han diferents tipus de nucli:

  • Nuclis monolítics: Els nuclis monolítics engloben tots els serveis de maquinari del sistema, i no s'utilitzen serveis (en el sentit d'aplicacions fora del nucli que accedeixin directament al maquinari)
  • Micronuclis: Els micronuclis (en anglès microkernel) proporcionen un petit conjunt d'abstraccions simples del maquinari, i utilitzen aplicacions anomenades servidors per oferir la majoria de la resta de funcionalitats.
  • Nuclis híbrids: Los nuclis híbrids (micronúclis modificats) són molt pareguts als micronúclis purs, excepte perquè inclouen codi addicional en el espai del nucli per tal que aquest s'executi més ràpidament.
  • exonúclis: no faciliten cap abstracció del maquinari, però permeten l'ús de biblioteques que proporcionen major funcionalitat gracies a l'accés directa al maquinari.

Depenent del tipus de nucli aquest durà a terme unes o altres tasques.

Consulteu l'apartat el kernel del tema 15 sobre sistemes operatius.

Localització del nucli de Linux

Segons l'estàndard FHS, trobareu el nucli a la carpeta /boot:

$ ls -l /boot/
total 40256
-rw-r--r-- 1 root root  528310 2009-10-20 23:56 abi-2.6.28-16-generic
-rw-r--r-- 1 root root  629174 2009-10-16 20:03 abi-2.6.31-14-generic
-rw-r--r-- 1 root root  629174 2009-11-10 19:52 abi-2.6.31-15-generic
-rw-r--r-- 1 root root   96866 2009-10-20 23:56 config-2.6.28-16-generic
-rw-r--r-- 1 root root  111371 2009-10-16 20:03 config-2.6.31-14-generic
-rw-r--r-- 1 root root  111371 2009-11-10 19:52 config-2.6.31-15-generic
drwxr-xr-x 2 root root    4096 2009-11-26 06:27 grub
-rw-r--r-- 1 root root 7003553 2009-11-02 11:35 initrd.img-2.6.28-16-generic
-rw-r--r-- 1 root root 7894440 2009-11-23 09:12 initrd.img-2.6.31-14-generic
-rw-r--r-- 1 root root 7895697 2009-11-26 06:27 initrd.img-2.6.31-15-generic
-rw-r--r-- 1 root root  128796 2009-10-23 18:11 memtest86+.bin
-rw-r--r-- 1 root root 1450875 2009-10-20 23:56 System.map-2.6.28-16-generic
-rw-r--r-- 1 root root 1664737 2009-10-16 20:03 System.map-2.6.31-14-generic
-rw-r--r-- 1 root root 1665323 2009-11-10 19:52 System.map-2.6.31-15-generic
-rw-r--r-- 1 root root    1074 2009-10-20 23:58 vmcoreinfo-2.6.28-16-generic
-rw-r--r-- 1 root root    1196 2009-10-16 20:06 vmcoreinfo-2.6.31-14-generic
-rw-r--r-- 1 root root    1196 2009-11-10 19:55 vmcoreinfo-2.6.31-15-generic
-rw-r--r-- 1 root root 3491696 2009-10-20 23:56 vmlinuz-2.6.28-16-generic
-rw-r--r-- 1 root root 3890400 2009-10-16 20:03 vmlinuz-2.6.31-14-generic
-rw-r--r-- 1 root root 3892224 2009-11-10 19:52 vmlinuz-2.6.31-15-generic

Com podeu veure el nucli comparteix la carpeta /boot amb la configuració del gestor d'arrencada GRUB (carpeta /boot/grub) i amb altres fitxers de suport al procés d'arrencada, com els fitxers initrd.

Documentació

$ sudo apt-get install linux-doc

És un paquet tonto que instal·la la documentació de l'ultima versió del kernel disponible als repositoris. Per saber els fitxers instal·lats:

$ sudo dpkg -L linux-doc-2.6.28

Ho trobareu a:

/usr/share/doc/linux-doc-2.6.28

Alguns fitxers estan comprimits i cal descomprimir-los amb gunzip.

Paràmetres d'execució del kernel

Consulteu l'article sobre GRUB:

 GRUB. Paràmetres del kernel

Quins paràmetres s'estan executant al nucli actual

Consulteu el fitxer /proc/cmdline

$ cat /proc/cmdline 
root=UUID=7f5a86b3-89b8-434c-b2cb-c66b971b247e ro quiet splash

Conèixer la versió del kernel

Es pot utilitzar la comanda uname:

$ uname -r

Compilació del kernel

Consulteu l'article:

Compilació del kernel

Mòduls del kernel

Vegeu l'article Mòduls del Kernel.

REISUB. Gentle Linux Restart

Quan el sistema és queda penjat sempre podem provar la aturada "gentil" del kernel. La combinació de tecles és

ALT+ “Impr Pant" + R + E + I + S + U + B 

S'ha de prémer les tecles REISUB una a una i poc a poc. El significat de les tecles és el següent:

  • ALT+ “Impr Pant" + R: Torna el control al teclat (Raw)
  • ALT+ “Impr Pant" + E: Envia a tots els processos la senyal TERM
  • ALT+ “Impr Pant" + I: Envia a tots els processos la senyal kill.
  • ALT+ “Impr Pant" + S: Sincronitza el disc dur (Sync)
  • ALT+ “Impr Pant" + U: Desmuntat tots els sistemes de fitxers (Unmount)
  • ALT+ “Impr Pant" + B: Torna a iniciar l'ordinador (reBoot)

Consulteu també sysrq

Recursos:

sysrq

Vegeu sysrq

dkms. Dynamic Kernel Module Support

Vegeu l'article dkms.

init ram disk (initrd)

El procés d'arrencada executarà primer el kernel i després la imatge initrd.img es carregarà en ram i serà executada. La imatge initrd és muntada com a root en mode lectura i escriptura i s'executa el fitxer:

/linuxrc

o

/init

que es troba dins la imatge. Normalment, quan s'acaba l'execució de la imatge, aleshores es munta el sistema de fitxers arrel inicial i el initrd es mou a /initrd. Aleshores s'inicia la seqüència de boor (procés init).

initrd s'utilitza per proporcionar moduls addicionals com per exemple SCSI o RAID.

Consulteu també:

Com aturar l'execució de initrd amb opcions del kernel

break=top Break before any scripts are run (including usplash)
break=modules Break before any modules are loaded
break OR break=premount Break before the premount scripts are run (ie: udev)
break=mount Break before the root partition is mounted
break=bottom Break before the 'bottom' scripts are run
break=init Break just before control is handed over to /sbin/init. 

Consulteu:

Com modificar una imatge initrd existent

Hi has dos possibilitats:

Sistema de fitxers ext3 comprimit:

cd ~
mkdir temp
cd temp
mkdir initrd
gunzip < /initrd.img > initrdtest.img
mount -o loop initrdtest.img initrd
cd initrd
ls 

Si us dona un error:

mount: haureu d'especificar el tipus del sistema de fitxers

Aleshores és que es tracta d'un fitxer fet amb cpio.

Fitxer comprimit i amb cpio:

$ cd
$ mkdir initrdtest
$ cd initrdtest/
$ gunzip < /initrd.img |cpio -i --make-directories
37585 blocks
$ ls
bin  conf  etc  init  lib  sbin  scripts  usr

Per tornar a crear/comprimir el fitxer:

$ find . | cpio --create --format='newc' > /tmp/newinitrd
16524 blocks
# gzip /tmp/newinitrd

Scripts d'inicialització de initrd

L'script principal és init, que està a l'arrel del fitxer initrd. Si us fixeu acaba executant els scripts de la carpeta /scripts:

$ cat init
run_scripts /scripts/init-top

Com crear una imatge initrd

Abans es teni l'ordre:

mkinitrd

Proporcionada pel paquet:

initrd-tools

Ara s'utilitza

mkinitramfs

Proporcionada pel paquet:

initramfs-tools

Esl executables són:

$ dpkg -L initramfs-tools  | grep bin
/usr/sbin
/usr/sbin/mkinitramfs
/usr/sbin/mkinitramfs-kpkg

/usr/sbin/update-initramfs



Consulteu:

Obtenir la configuració del nucli que s'està executant

$ zcat /proc/config.gz > .config

Ara podeu buscar paràmetres amb grep. Per exemple els paràmetres de Xen:

$ cat .config | grep XEN
CONFIG_X86_64_XEN=y
CONFIG_X86_XEN_GENAPIC=y
CONFIG_XEN_PCIDEV_FRONTEND=y
CONFIG_XEN_PCIDEV_FE_DEBUG=y
# CONFIG_NETXEN_NIC is not set
CONFIG_XEN=y
CONFIG_XEN_INTERFACE_VERSION=0x00030205
# XEN
# CONFIG_XEN_PRIVILEGED_GUEST is not set
CONFIG_XEN_UNPRIVILEGED_GUEST=y
CONFIG_XEN_PRIVCMD=y
CONFIG_XEN_XENBUS_DEV=y
CONFIG_XEN_BACKEND=y
CONFIG_XEN_BLKDEV_BACKEND=y
CONFIG_XEN_BLKDEV_TAP=y
CONFIG_XEN_NETDEV_BACKEND=y
# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
CONFIG_XEN_NETDEV_LOOPBACK=y
 CONFIG_XEN_PCIDEV_BACKEND=y
CONFIG_XEN_PCIDEV_BACKEND_VPCI=y
# CONFIG_XEN_PCIDEV_BACKEND_PASS is not set
# CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
CONFIG_XEN_PCIDEV_BE_DEBUG=y
CONFIG_XEN_TPMDEV_BACKEND=y
CONFIG_XEN_BLKDEV_FRONTEND=y
CONFIG_XEN_NETDEV_FRONTEND=y
CONFIG_XEN_SCRUB_PAGES=y
CONFIG_XEN_DISABLE_SERIAL=y
CONFIG_XEN_SYSFS=y
CONFIG_XEN_COMPAT_030002_AND_LATER=y
# CONFIG_XEN_COMPAT_030004_AND_LATER is not set
# CONFIG_XEN_COMPAT_LATEST_ONLY is not set
CONFIG_XEN_COMPAT=0x030002
CONFIG_XEN_SMPBOOT=y

Ordres

uname

Consulteu uname

file

$ file /boot/vmlinuz-2.6.31-15-generic 
/boot/vmlinuz-2.6.31-15-generic: Linux kernel x86 boot executable bzImage, version 2.6.31-15-generic (buildd@rothe, RO-rootFS, root_dev 0x801, 
swap_dev 0x3, Normal VGA

Consulteu file.

Ubuntu

Kernel flavours

https://wiki.ubuntu.com/Kernel/Dev/Flavours

El sabor del kernel és escollit automàticament segons el tipus de CD escollit durant la instal·lació (Server/Desktop i la plataforma). Algunes decisions de com utilitzar PAE es fan segons la plataforma i la memòria RAM disponible

També cal tenir el compte que hi ha un sistema per a màquines virtuals:

linux-image-virtual o el paquet linux-virtual

Que esta optimitzat per a córrer a Xen, KVM/Qemu i EC2 de Amazon.

Sobre les diferències entre cada tipus de kernel:

  • linux-generic: Aquest és el kernel normal utilitzat en Ubuntu Desktop
  • linux-generic-pae: El mateix que l'anterior però amb PAE activat. Permet utilitzar més de 4GB en sistemes de 32 bits. NO cal en sistemes de 64 bits que ja poden per defecte treballar en sistemes de més de 4GB. És important no activar PAE en sistemes que tinguin menys de 4GB ja que té una petita penalització de rendiment.
  • linux-server: Aquest és el nucli optimitzat per a un servidor. En resum prioritza els processos en terme respecte als processos interactius. Per exemple es pot arribar a penjar el teclat o el ratolí per tal de donar el màxim de CPU als serveis del sistema.
  • linux-virtual: és el server kernel però al que se li ha tret la majoria de drivers ja que no és necessiten en entorns virtuals.

linux-server

Vegeu també

Pàgines antigues d'aquesta wiki

Enllaços externs