Objetivo
• Conocer las estructuras/arquitectura de SOS
actuales desde el punto de vista de la
adaptabilidad funcional de los mismos a nuevos
servicios y hardware.
Índice
• Arquitectura monolítica:
– configuración del kernel
– configuración en el arranque
– configuración en tiempo de ejecución
– módulos de carga
• Maquinas virtuales:
– Soporte del kernel a la virtualización: namespaces,
cgroups, containers.
– Soporte a maquinas virtuales: Xen, KVM.
Arquitecturas en uso
• En la actualidad, las estructuras mas
usadas:
– Monolítica – Linux, ...
– Microkernel – MacOS, Windows, QNX, ...
– Maquinas virtuales – Xen, VMWare, …
– SO de internet – PalmOS(WebOS)
Arquitectura Monolitica
• Características:
– Toda la funcionalidad en modo kernel.
– Ventaja: eficiencia
– Problema: no confinamiento de errores en modo
kernel
– Adaptabilidad:
• De forma estática:
– Configuración y arranque del kernel
– Modificar o añadir código
• De forma dinámica:
– “On-the-fly”
– LKM (Linux Kernel Modules)
Arq. Monolitica: configuracion
• Razones para configurar un kernel:
– Anadir nuevo hardware
– Optimizar según entorno: servidor, desktop, ..,
SMP, …
– Anadir nueva funcionalidad o un manejador no
oficial.
– Fijar errores de la versión actual.
• Lista opciones de configuración:
– [Kroadh-Hartman2006]
– make [config|menuconfig|xconfig|gconfig]
Compilacion del kernel (2.6)
• Configurado el kernel, debemos compilarlo:
– Situados en /usr/src/linux, ejecutamos:
% make
– Optimizaciones:
• Compilar una porción del kernel:
% make [M=]drivers/usb/serial
• Realizar una compilación cruzada:
% make ARCH=arm CROSS_COMPILER=/usr/local/bin/...
• Acelerar la compilación con ccache (http://ccache.samba.org/) o
distcc (http://code.google.com/p/distcc/):
% make CC=”ccache distcc”
• Compilación mutihebra:
% make -jn (donde n = 2 * numero_de_procesadores).
Instalacion del kernel (2.6)
• Instalamos los módulos:
% make modules_install
• Instalamos la imagen del kernel:
% make install
– verifica la correcta construcción del kernel
– Instala el kernel en /boot
– Se genera cualquier imagen ramdisk inicial (se debe generar un disco ram
después de hacer make modules_install:
# mkinitramfs -o /boot/initrd.img-2.6.20.1 /lib/modules/2.6.20.1
– Se notificar al programa cargador de la existencia de una nueva imagen y se actualiza.
• Algunas distribuciones automatizan los pasos de la compilación:
– installkernel (paquete mkinitrd).
– make-kpkg en Ubuntu.
Modificaciones “on-the-fly”
• El seudo-sistema de archivos /proc nos permite
configurar al vuelo ciertos parametros del sistema.
% echo “mihost” >/proc/sys/kernel/hostname
• Podemos hacer los cambios permanentes con
sysctl:
% sysctl –w kernel.hostname=mihost
• Ajuste de servicios a traves de ordenes
(start/stop/restart/reload/status):
% /etc/init.d/xinetd reload
Linux Kernel Modules
• Un LKM es un objeto ELF (Executable and
Linkable Format) que resuelve sus simbolos
cuando se carga en el kernel.
• Aligera el nucleo vs. Sobrecarga
• No es un proceso.
• Puede estar en un de los siguientes estados:
MODULE_STATE_COMING, MODULE_STATE_LIVE, y
MODULE_STATE_GOING.
• Ordenes relacionadas: insmod, rmmod,
modprobe y lsmod.
LKM
Estructura de un LKM (2.6)
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE(“GPL”)
MODULE_AUTHOR(“Autor del módulo”)
MODULE_DESCRIPTION(“Descripción del módulo)
static int __init funcion_entrada(void)
{
....
return 0;
}
static void __exit funcion_salida (void)
{
return;
}
module_init (funcion_entrada);
module_exit(funcion_salida);
Includes
Macros del modulo
Constructor del modulo
Destructor del modulo
Macros de entrada/salida
Virtualizacion en Linux
• Soporta a maquinas virtuales:
– Xen
– KVM
– UML, y otros
• Virtualizacion “ligera”
– Namespaces
– cgroups
– Container
Namespaces
• Namespaces es una forma ligera de
virtualizacion que permite que veamos
propiedades globales de un sistema bajo
diferentes aspectos (un namespace es
esencialmente una “vista” del sistema).
• SOs que soportan este tipo de virtualizacion:
– Namespaces – Linux
– Zones – Solaris
– Jail – FreeBSD
PID Namespace: relacion
    • Los namespaces
    pueden o no estar
    jerarquicamente
    relacionados.
    • Podemos observar
    como un proceso
    tiene varios PIDs
    dependiendo del
    contexto en el que se
    observa.
PID ns: Estructuras de datos

Arquitecturas so

  • 2.
    Objetivo • Conocer lasestructuras/arquitectura de SOS actuales desde el punto de vista de la adaptabilidad funcional de los mismos a nuevos servicios y hardware.
  • 3.
    Índice • Arquitectura monolítica: –configuración del kernel – configuración en el arranque – configuración en tiempo de ejecución – módulos de carga • Maquinas virtuales: – Soporte del kernel a la virtualización: namespaces, cgroups, containers. – Soporte a maquinas virtuales: Xen, KVM.
  • 4.
    Arquitecturas en uso •En la actualidad, las estructuras mas usadas: – Monolítica – Linux, ... – Microkernel – MacOS, Windows, QNX, ... – Maquinas virtuales – Xen, VMWare, … – SO de internet – PalmOS(WebOS)
  • 5.
    Arquitectura Monolitica • Características: –Toda la funcionalidad en modo kernel. – Ventaja: eficiencia – Problema: no confinamiento de errores en modo kernel – Adaptabilidad: • De forma estática: – Configuración y arranque del kernel – Modificar o añadir código • De forma dinámica: – “On-the-fly” – LKM (Linux Kernel Modules)
  • 6.
    Arq. Monolitica: configuracion •Razones para configurar un kernel: – Anadir nuevo hardware – Optimizar según entorno: servidor, desktop, .., SMP, … – Anadir nueva funcionalidad o un manejador no oficial. – Fijar errores de la versión actual. • Lista opciones de configuración: – [Kroadh-Hartman2006] – make [config|menuconfig|xconfig|gconfig]
  • 7.
    Compilacion del kernel(2.6) • Configurado el kernel, debemos compilarlo: – Situados en /usr/src/linux, ejecutamos: % make – Optimizaciones: • Compilar una porción del kernel: % make [M=]drivers/usb/serial • Realizar una compilación cruzada: % make ARCH=arm CROSS_COMPILER=/usr/local/bin/... • Acelerar la compilación con ccache (http://ccache.samba.org/) o distcc (http://code.google.com/p/distcc/): % make CC=”ccache distcc” • Compilación mutihebra: % make -jn (donde n = 2 * numero_de_procesadores).
  • 8.
    Instalacion del kernel(2.6) • Instalamos los módulos: % make modules_install • Instalamos la imagen del kernel: % make install – verifica la correcta construcción del kernel – Instala el kernel en /boot – Se genera cualquier imagen ramdisk inicial (se debe generar un disco ram después de hacer make modules_install: # mkinitramfs -o /boot/initrd.img-2.6.20.1 /lib/modules/2.6.20.1 – Se notificar al programa cargador de la existencia de una nueva imagen y se actualiza. • Algunas distribuciones automatizan los pasos de la compilación: – installkernel (paquete mkinitrd). – make-kpkg en Ubuntu.
  • 9.
    Modificaciones “on-the-fly” • Elseudo-sistema de archivos /proc nos permite configurar al vuelo ciertos parametros del sistema. % echo “mihost” >/proc/sys/kernel/hostname • Podemos hacer los cambios permanentes con sysctl: % sysctl –w kernel.hostname=mihost • Ajuste de servicios a traves de ordenes (start/stop/restart/reload/status): % /etc/init.d/xinetd reload
  • 10.
    Linux Kernel Modules •Un LKM es un objeto ELF (Executable and Linkable Format) que resuelve sus simbolos cuando se carga en el kernel. • Aligera el nucleo vs. Sobrecarga • No es un proceso. • Puede estar en un de los siguientes estados: MODULE_STATE_COMING, MODULE_STATE_LIVE, y MODULE_STATE_GOING. • Ordenes relacionadas: insmod, rmmod, modprobe y lsmod.
  • 11.
  • 12.
    Estructura de unLKM (2.6) #include <linux/module.h> #include <linux/init.h> MODULE_LICENSE(“GPL”) MODULE_AUTHOR(“Autor del módulo”) MODULE_DESCRIPTION(“Descripción del módulo) static int __init funcion_entrada(void) { .... return 0; } static void __exit funcion_salida (void) { return; } module_init (funcion_entrada); module_exit(funcion_salida); Includes Macros del modulo Constructor del modulo Destructor del modulo Macros de entrada/salida
  • 13.
    Virtualizacion en Linux •Soporta a maquinas virtuales: – Xen – KVM – UML, y otros • Virtualizacion “ligera” – Namespaces – cgroups – Container
  • 14.
    Namespaces • Namespaces esuna forma ligera de virtualizacion que permite que veamos propiedades globales de un sistema bajo diferentes aspectos (un namespace es esencialmente una “vista” del sistema). • SOs que soportan este tipo de virtualizacion: – Namespaces – Linux – Zones – Solaris – Jail – FreeBSD
  • 15.
    PID Namespace: relacion  • Los namespaces  pueden o no estar  jerarquicamente  relacionados.  • Podemos observar  como un proceso  tiene varios PIDs  dependiendo del  contexto en el que se  observa.
  • 16.