1. Arquitec
turas de
Sistemas
Operativ
os
VICENTE PANATA CASTILLO
5° SISTEMAS
2. 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.
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”
• 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:
d
% sysctl –w kernel.hostname=mihost
• Ajuste de servicios a traves de ordenes
(start/stop/restart/reload/status):
% /etc/init.d/xinetd reloa
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.
12. 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
13. Virtualizacion en Linux
• Soporta a maquinas virtuales:
– Xen
– KVM
– UML, y otros
• Virtualizacion “ligera”
– Namespaces
– cgroups
– Container
14. 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
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.