- Breve comparación entre kernels monolíticos, microkernels y
exokernels.
Los componentes básicos de un sistema operativo son:
- Manejo de procesos: Creación, suspención, deleción de procesos e
intercomunicación de procesos (IPC)
- Manejo de memoria: asignación y re-asignación de la memoria física
- Manejo de la memoria virtual: Mantener un mapeo de la memoria virtual a
la memoria física, decidir el tamanio de la memoria que se va a destinar a
los procesos
- Manejo de I/O: definición de los controladores de dispositivos,
ofreciendo una interfase uniforme a los dispositivos
- Manejo del almacenamiento secundario: Asignación y deasignación de
bloques y manejo de la recuperación de bloques
- Manejo de archivos: nominación, directorios, creación, uso y deleción de
archivos, protección: backups, cuentas.
- Servicios de Network: soporte para protocolos de network.
- Servicions de información.
- Cuentas: quotas, usos y costos.
- Seguridad y privacidad.
La arquitectura más antigua usada en los sistemas operativos es la
monolítica. Linux utiliza este tipo de arquitectura.
Una arquitectura más moderna que la monolítica es la arquitectura
micro kernel usada en MACH/HURD, Minix
OSF y NT.
Cómo se podrá observar en los gráficos, el principal atributo que
distingue a los kernels monolíticos y micro-kernel es lo que sus respectivas
arquitecturas implementan en en modo supervisor (kernel mode) de la CPU y lo que se
implementa en el modo usuario (user mode) de la CPU. La arquitectura
monolítica implementa todos los servicios del sistema operativo
(controladores de dispositivos, memoria virtual, sistema de archivos,
networking, etc) en el espacio dominado por el modo supervisor de la CPU. En
cambio, la arquitectura micro-kernel hace una división entre los servicios
del sistema operativo dividiéndolos en "higher-level" implementados en el
espacio dominado por el modo usuario y "lower-level"
implementados en el espacio dominado por el modo supervisor. En contraste, un
tercer tipo de arquitectura denominada exo kernel, como su nombre lo
indica, no implementa nada en el espacio dominado por el modo supervisor,
este tipo de arquitectura es la que posee el kernel MIT Aegis.
- Artículos imprescindibles:
- El Sistema de archivo ext2 en linux y concepto de fragmentación
Los bloques son la unidad básica de cualquier sistema de archivos. Hay 2
clases de bloques: "logical blocks" y "physical blocks", un bloque lógico es
siempre más grande que uno físico (bloque lógico = bloque físico elevado a la 2 potencia). El
bloque "zero" es conocido como el bloque de booteo. Cuando un archivo contiene un número NO entero de
bloques; el espacio al final de bloque es desperdiciado. En promedio se
pierde la mitad de un bloque por archivo. Para resolver este inconveniente,
los sistemas de archivo usan fragmentos, de este modo, un archivo es
un conjunto de bloques más una serie consecutivas de fragmentos. A su vez,
los bloques están agrupados: el grupo superblock contiene los bloques
a los cuales sólo el superusuario tiene acceso, contienen información
fundamental sobre el tamanio y estado del sistema de archivos ext2 (existe
una copia de estos bloques en caso de corrupción), el grupo
block descriptor es el que le sigue inmediatamente al grupo
superblock y contiene la siguiente información: blocks bitmap, usados
durante la asignación y deasignación de bloques, inode bitmap,
usados durante la asignación y deasignación de inodos y la tabla de inodos.
- Módulos dinámicamente cargables (loadables modules)
Un módulo dinámicamente cargable es una pieza de código que no
está incluída directamente en el código base del kernel y puede ser insertada
(usando el comando insmod) o removida (usando el comando rmmod) mientras que
el sistema operativo está en funcionamiento.
- 3.10 Problema con los módulos
1- Durante el boot veo los siguientes mensajes can't locate module net-pf-3, can't locate
module net-pf-4, etc: Esto significa que linux no encontro módulos para
determindos protocolos de network como IPX (net-pf-4) appletalk (net-pf-5)
Para solucionar este problemita edita /etc/conf.modules poniendo:
alias net-pf-3 off # Desactiva el módulo ax25
alias net-pf-4 off # Desactiva el módulo ipx
alias net-pf-5 off # Desactiva el módulo appletalk
2- Acabo de upgradear el kernel de 2.0.XX a 2.2.X y ahora veo: can't locate
module ppp-compress-2x. Edita /etc/conf.modules agregando:
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate
- 3.11 Cómo compilo un nuevo kernel?
Obtene el nuevo kernel y descomprimilo en el directorio /usr/src haciendo
gzip -dc kernel-2.2.5.tar.gz | tar xf - luego, cambia de directorio: cd
/usr/src/linux para cambiar de directorio y segui estos pasos:
1- make menuconfig *usa ncurses, interface para consola*
2- make dep *configura las dependencias del kernel*
3- make clean
4- make zImage (o make bzImage si el kernel es demasiado grande)
5- Opcional para crear un disco de booteo: make zdisk (o bzdisk si el
kernel es demesiado grande)
6- Módulos: make modules
make modules_install
7- Configuracion de lilo: Copia la imagen del nuevo kernel haciendo:
cp /usr/src/linux/arch/i386/boot/zImage /vmlinuz-2.2.5
Si usaste make bzImage en lugar de make zImage hace:
cp /usr/src/linux/arch/i386/boot/bzImage /vmlinuz-2.2.5
Edita /etc/lilo.conf cambiando la linea image = /vmlinuz por
image =/vmlinuz-2.2.5
8- Testeando los modulos:
a- Tipea depmod -a
b- Tipea modprobe [nombre del modulo]
- Problemas despues de hacer un upgrade desde 2.0.3X a 2.2.X:
1- Me dice "this kernel lacks for ppp support"! pero si yo tengo ppp support
compilado en el kernel!: Eso pasa cuando no se lee el README/Changes 2.2.X
necesita ppp-2.3.5 o versiones mas recientes para funcionar.
2- No puedo "routear" mi loopback interface! route add -net 127.0.0.0 dev lo
me dice: SIOCADDRT: Invalid argument. Los kernels 2.2.X necesitan que
agregues el netmask cuando agregas una ruta lo correcto es hacer: route add
-net 127.0.0.0 netmask 255.0.0.0 dev lo
- Al configurar mi placa de red me dice..."Network unreachable"
Si la placa de red esta correctamente tomada por el driver
(en el kernel) probablemente tu tabla de ruteo sea incorrecta
- 3.12 Como aplico un patch a mi kernel? Formato
.gz: mv patchXX.gz /usr/src luego cd /usr/src luego gzip -cd patchXX.gz |
patch -p0 Formato .bz2: mv patchXX.bz2 /usr/src luego cd /usr/src luego
bzip2 -dc patchXX.bz2 | patch -p0 Luego de aplicar el patch recompila el
kernel.
- Acabo de hacer un patch para mi kernel como lo testeo? cd
/usr/src; diff -u linux-2.2.5/drivers/net/driver_xyz.c
linux/drivers/net/driver_xyz.c > tu_patch El comando diff lo que hace es
comparar 2 archivos, imprescindible ver man diff
- Durante el boot veo un error que dice: "APM not supported by the
kernel" Qué es APM? Necesito compilar mi kernel con soporte para APM?
APM ignifica "Advanced Power Management" es usado en las laptops para
advertir cuándo la batería de la laptop se va a acabar, etc. Si no estás
usando una laptop, obvio que no necesitás esta opción ;)
- 3.13 GCC Internal compiler Error: si sigue
sucediendo en el mismo archivo a pesar de rebootear, usando un kernel estable
probablemente hayas decubierto un bug en gcc. Si este problema no se repite,
sino que es aleatorio, malas noticias, puede ser signo de corrupcion
de memoria.
|