Vous êtes sur la page 1sur 47

1 Arquitecturas de Sistemas Operativos

Diseo de Sistemas Operativos


(cc) Jos Antonio Gmez Curso 2011-12

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 monoltica:
configuracin del kernel configuracin en el arranque configuracin en tiempo de ejecucin mdulos de carga

Mquinas virtuales:
Soporte del kernel a la virtualizacin: namespaces, cgroups, containers. Soporte a mquinas virtuales: Xen, KVM.

Introduccin
Necesitamos estructuras (arquitecturas) que permitan dar soporte a nuevos tipos de aplicaciones y a nuevos dispositivos sistemas extensibles/adaptables. Necesitamos construir sistemas seguros, correctos, y robustos. La arquitectura puede determinar propiedades no funcionales, por ejemplo, QoS.
Diseo de Sistemas Operativos - Tema 1 4

Arquitecturas en uso
En la actualidad, las estructuras ms usadas:
Monoltica Linux, ... Microkernel MacOS, Windows, QNX, ... Mquinas virtuales Xen, VMWare, SO de internet PalmOS(WebOS)

Diseo de Sistemas Operativos - Tema 1

Arquitectura Monoltica
Caractersticas:
Toda la funcionalidad en modo kernel. Ventaja: eficiencia Problema: no confinamiento de errores en modo kernel Adaptabilidad:
De forma esttica:
Configuracin y arranque del kernel Modificar o aadir cdigo

De forma dinmica:
On-the-fly LKM (Linux Kernel Modules)

Diseo de Sistemas Operativos - Tema 1

Arq. Monoltica: configuracin


Razones para configurar un kernel:
Aadir nuevo hardware Optimizar segn entorno: servidor, desktop, .., SMP, Aadir nueva funcionalidad o un manejador no oficial. Fijar errores de la versin actual.

Lista opciones de configuracin:


[Kroadh-Hartman2006] make [config|menuconfig|xconfig|gconfig]
Diseo de Sistemas Operativos - Tema 1 7

Arq. Monolitica: arranque


Podemos pasar parmetro al kernel en el arranque, a travs de GRUB o LILO. Por ejemplo:
nousb elevator=[cfq|deadline|noop]

Todas las opciones en:


Doc/Documentation/kernel-parameters.txt Libro [Kroadh-Hartman2006]
Diseo de Sistemas Operativos - Tema 1 8

Compilacin del kernel (2.6)


Configurado el kernel, debemos compilarlo:
Situados en /usr/src/linux, ejecutamos:
% make

Optimizaciones:
Compilar una porcin del kernel:
% make [M=]drivers/usb/serial

Realizar una compilacin cruzada:


% make ARCH=arm CROSS_COMPILER=/usr/local/bin/...

Acelerar la compilacin con ccache (http://ccache.samba.org/) o distcc (http://code.google.com/p/distcc/):


% make CC=ccache distcc

Compilacin mutihebra:
% make -jn

(donde n = 2 * nmero_de_procesadores).
Diseo de Sistemas Operativos - Tema 1 9

Instalacin del kernel (2.6)


Instalamos los mdulos:
% make modules_install

Instalamos la imagen del kernel:


% make install

verifica la correcta construccin del kernel Instala el kernel en /boot Se genera cualquier imagen ramdisk inicial (se debe generar un disco ram despus 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 compilacin:


installkernel

(paquete mkinitrd).

make-kpkg en Ubuntu.

Diseo de Sistemas Operativos - Tema 1

10

Parcheado del kernel


Permite modificar funcionalidad, corregir errores o actualizar el kernel. Un parche es un archivo que contiene los elementos a cambiar respecto de un archivo original existente en la distribucin. El proceso de pasar un parche se puede automatizar con la herramienta ketchup. Lo generamos con diff:
diff -Naur dir_archivo_original archivo_nuevo > parche.patch
Diseo de Sistemas Operativos - Tema 1 11

Parchear: pasos
1. Bajar los fuentes del kernel, el parche en /usr/src, y descomprimir. 2. Parchear el kernel: bzcat ../patch-2.4.21-ac1.bz2 | patch -p1 3. Copiar el .config anterior al directorio actual. 4. Verificar opciones nuevas y hacer consistente con las actuales: make oldconfig 5. Configurar o modificar ms opciones si lo deseamos: make menuconfig 6. Compilar como lo hacemos habitualmente. 9. Instalar como lo hacemos habitualmente.

Diseo de Sistemas Operativos - Tema 1

12

Modificar el kernel
La complejidad medida como LOC es exponencial.

Ngc891, Evolution of the Linux kernel source code tarball size, en lnea (6/3/2012) en http://ngc891.blogdns.net/?p=92

Diseo de Sistemas Operativos - Tema 1

13

Modificar/aadir cdigo
La complejidad de modificar / aadir cdigo es muy elevada debido a las dependencias entre componentes

http://www.makelinux.net/kernel_map o http://lxr.linux.no

Diseo de Sistemas Operativos - Tema 1

14

Modificaciones on-the-fly
El seudo-sistema de archivos /proc nos permite configurar al vuelo ciertos parmetros del sistema.
% echo mihost >/proc/sys/kernel/hostname

Podemos hacer los cambios permanentes con sysctl:


% sysctl w kernel.hostname=mihost

Ajuste de servicios a travs de rdenes (start/stop/restart/reload/status):


% /etc/init.d/xinetd reload

Diseo de Sistemas Operativos - Tema 1

15

Linux Kernel Modules


Un LKM es un objeto ELF (Executable and Linkable Format) que resuelve sus smbolos cuando se carga en el kernel. Aligera el ncleo vs. Sobrecarga No es un proceso. Puede estar en un de los siguientes estados: MODULE_STATE_COMING, MODULE_STATE_LIVE, y MODULE_STATE_GOING. rdenes relacionadas: insmod, rmmod, modprobe y lsmod.
Diseo de Sistemas Operativos - Tema 1 16

LKM
Kernel limpio

Figura extrada de [CorbetRubiniKroah-Hartmanen05]

Diseo de Sistemas Operativos - Tema 1

17

Estructura de un LKM (2.6)


#include <linux/module.h> #include <linux/init.h> MODULE_LICENSE(GPL) MODULE_AUTHOR(Autor del mdulo) MODULE_DESCRIPTION(Descripcin del mdulo) 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 mdulo

Constructor del mdulo Destructor del mdulo

Macros de entrada/salida

Diseo de Sistemas Operativos - Tema 1

18

Construccin de un mdulo
En 2.6, la construccin es ms simple gracias al sistema de construccin kbuild. Lo primero que tenemos que decidir en donde vivir el mdulo:
Junto con las fuentes del kernel: ya sea como parche o mezclando el cdigo con el rbol oficial. Fuera del rbol de fuentes.

Diseo de Sistemas Operativos - Tema 1

19

Construccin: rbol de fuentes


Si el mdulo es parte una parte oficia del kernel vive en el rbol de fuentes. Por ejemplo, un manejador de un dispositivo de caracteres estar en drivers/char. Las reglas para ubicarlo no son muy estrictas, por lo que podemos crear nuestro propio directorio si es necesario.
Diseo de Sistemas Operativos - Tema 1 20

Construccin: externo
Crear un Makefile en el directorio que contiene el archivo fuente y aadir la lnea: obj-m := mi_modulo.o La diferencia esta en la construccin. Debemos indicar donde estan los fuentes: make -C /kernel/source/location SUBDIRS=$PWD modules
Diseo de Sistemas Operativos - Tema 1 21

Instalacin y dependencias
Los mdulos instalados se sitan en /lib/modules/version/kernel/ Esto es lo que hace make modules_install Podemos construir la informacin de dependencias entre mdulos con depmod. Las dependencias se almacenan en /lib/modules/version/modules.dep que es usado por depmod. Por ejemplo:
% cat modules.dep | grep vfat kernel/fs/fat/vfat.ko: kernel/fs/fat/fat.ko

Diseo de Sistemas Operativos - Tema 1

22

Carga de mdulos
Cargamos un mdulo con:
insmod : no controla dependencias, ni errores. modprobe: suministra resolucin de dependencias, control errores e informes.

Descarga de mdulos:
rmmod modprobe -r

Las llamadas al sistema usadas son: init_module() y delete_module().


Diseo de Sistemas Operativos - Tema 1 23

Informacin
Podemos obtener informacin de un modulo con /sbin/modinfo. % /sbin/modinfo vfat filename: /lib/modules/2.6.34.7-0.7desktop/kernel/fs/fat/vfat.ko author: Gordon Chaffee description: VFAT filesystem support license: GPL srcversion: 70D5128491544D7A33E0C3A depends: fat vermagic: 2.6.34.7-0.7-desktop SMP preempt mod_unload modversions 686 La informacin se almacena en la seccin .modinfo del ELF.

Diseo de Sistemas Operativos - Tema 1

24

Qu es un mdulo?
Un mdulo es un archivo objeto reubicable:
% file vfat.ko vfat.ko: ELF 32-bit LSB relocatable, , not stripped

Funciones externas del mdulo: % nm vfat.ko 00000000 T init_module 00000000 t init_vfat_fs U iput U jiffies U kfree
Diseo de Sistemas Operativos - Tema 1 25

qu es .. (ii)?
Los smbolos marcados indefinidos (U) son smbolos del kernel o de otros mdulos.
% cat /proc/kallsyms|grep jiffies c0946a40 D jiffies

La D indica que es smbolo definido en el segmento de datos. Una T, indicara en el de texto, ver espeficacin de ELF. Esta informacin es la que usa depmod. Todos los smbolos que exporta el kernel estn en System.map o en /proc/kallsyms.
Diseo de Sistemas Operativos - Tema 1 26

Limitaciones LKM
No podemos modificar funcionalidad compilada estticamente. Podemos preparar ganchos Dificultad de confinar un error dentro del mdulo. Intentos de solventarlo:
Mdulos binarios no puede acceder a funciones explcitamente disponibles sobre licencia GPL. Su carga produce un kernel contaminado (tainted). Modularizacin del cdigo fuente.
Diseo de Sistemas Operativos - Tema 1 27

Ms detalles ..
W. Mauerer, Professional Linux Kernel Architecture, Wiley Publishing, 2008. Capitulo 7. D. Bovet y M. Cesati, Understanding the Linux kernel (3/e), O'Reilly, 2006, Apndice B.

Diseo de Sistemas Operativos - Tema 1

28

Virtualizacin
Virtualizacin es una tecnologa que combina o divide recursos de computacin para presentar uno o varios entornos de operacin utilizando metodologas como particionamiento o agregacin ya sea hardware o software, simulacin de mquinas completa o parcial, emulacin, tiempo compartido, y otras [Susanta Nanda y Tzi-cker
Chiueh, A Survey on Virtualization Technologies, RPE Report, SUNY at Stony Brook, New York. Feb. 2005.]

Diseo de Sistemas Operativos - Tema 1

29

Virtualizacin
Razones para virtualizar:
Aislamiento de recursos Compartir recursos hardware o consolidar servidores* Desarrollo de software o SO para hardware no existente

Dos enfoques:
Sistemas virtualizados donde una mquina soporta varios kernels Un nico kernel opera sobre una entorno virtual que abstrae los recursos globales en espacios de nombres aislados*.

Diseo de Sistemas Operativos - Tema 1

30

Virtualizacin: taxonoma
VM divididas en:
Process virtual Machine System Virtual Machine:
Emulacin: ISA1 ISA2 Virtualizacin:
Hipervisor nativo (bare-metal) o Tipo 1 Hipervisor con anfitrin o Tipo 2
API ABI ISA Aplicaciones Bibliotecas Sistema Operativo Hardware

Diseo de Sistemas Operativos - Tema 1

31

Tipos hipervisores

http://blogs.technet.com/b/chenley/archive/2011/02/09/hypervisors.aspx

Segn la implementacin podemos separarlos: Traduccin binaria dinmica Paravirtualizacin Virtualizacin asistida por hardware

Diseo de Sistemas Operativos - Tema 1

32

Ejemplos de MV
Nivel ISA: Boch, QEMU, Nivel HAL: VMWare, Xen, UML, KVM Nivel SO: Jail, Containers, Nivel de lenguaje de programacin: JVM, Microsoft .NET CLI Nivel de biblioteca: Wine, ...

Diseo de Sistemas Operativos - Tema 1

33

Virtualizacin en Linux
Soporta a mquinas virtuales:
Xen KVM UML, y otros

Virtualizacin ligera
Namespaces cgroups Container
Diseo de Sistemas Operativos - Tema 1 34

Namespaces
Namespaces es una forma ligera de virtualizacin 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 virtualizacin:
Namespaces Linux Zones Solaris Jail FreeBSD
Diseo de Sistemas Operativos - Tema 1 35

Namespaces: objetivos de diseo


Transparencia y compatibilidad las aplicaciones debe ejecutarse en namespace como lo hacen en el host. Rendimiento no afecta significativamente. Usabilidad y administracin la herramientas existentes deben seguir funcionando. Aceptar de Linux main-stream desarrollo homogneo del kernel (no kernel personalizado).

Diseo de Sistemas Operativos - Tema 1

36

Namespaces: lista
La lista de namespaces actualmente incluidos:
UTS (Unix Timesharing System) (lwn) informacin del sistema (nombre, versin, tipo arquitectura, etc.) System V IPC (lwn) mecamismos de comunicacin entre procesos. mounts - sistemas de archivos montados: shared subtrees (lwn) y r/o bind mount (lwn). pid (lwn) espacio de nombres de identificadores de procesos. network (lwn) conjunto de dispositivos de red. userid (lwn) permite limitar los recursos por usuario.

Diseo de Sistemas Operativos - Tema 1

37

Namespaces: creacin
Podemos establecer un nuevo namespace con:
Al crear un proceso con clone y los indicadores: CLONE_NEWIPC, CLONE_NEWNET, CLONE_NEWNS, CLONE_NEWPID, CLONE_NEWUTS La llamada al sistema unshare() disocia parte de los namespaces compartidos con el padre.
Diseo de Sistemas Operativos - Tema 1 38

Namespaces: implementacin
Para ahorar espacio y mejorar la eficiencia, necesitamos dos componentes: Una estructura namespace por subsistema que envuelve los componentes que anteriormente eran globales en base a un namespace (struct uts_namespace, ipc_namespace, mnt_namespace, pid_namespace, user_namespace, net_ns. Un mecanismo que asocia un proceso con su namespace (struct nsproxy).
Conexin entre procesos y namespaces [Mauerer2008]

Diseo de Sistemas Operativos - Tema 1

39

PID Namespace: relacin


Los namespaces pueden o no estar jerrquicamente relacionados. Podemos observar como un proceso tiene varios PIDs dependiendo del contexto en el que se observa.

Jerarqua de namespaces [Mauerer2008]

Diseo de Sistemas Operativos - Tema 1

40

Usos de los namespaces


Posibles usos:
Servidores Privados Virtuales (VPS) como por ejemplo Linux Containers (lxc.sourceforge.net) Application checkpoint and restart (ACS) En clusters:
Sustitucin de NFS Re-construccin de /proc

Diseo de Sistemas Operativos - Tema 1

41

Pid namespace:requisitos
Requisitos:
Los pids en un namespace son independientes de los pids de otros namespace. El administrador debe visualizar y sealar todos los procesos. Las utilidades existentes debe poder seguir monitorizando y controlando el sistema completo: ps, top, kill, etc.
Diseo de Sistemas Operativos - Tema 1 42

pid namespace: ED
La gestin de identificadores maneja dos estructuras:
pid la representacin interna del kernel de un PID.
struct pid { atomic_t count; /* contador de referencias */ /* lista de tareas que usan este pid */ struct hlist_head tasks[PIDTYPE_MAX]; int level; /*en cuantos namespaces es visible el ID*/ struct upid numbers[1]; /*n instancias upid por nivel*/ }

upid informacin visible en un namespace especfico.


struct upid { int nr; /* valor numerico de un ID */ struct pid_namespace ns; /*namespace al que pertenece*/ struct hlist_node pid_chain; /*lista hash desbordamiento*/ }

Diseo de Sistemas Operativos - Tema 1

43

PID ns: Estructuras de datos

Diseo de Sistemas Operativos - Tema 1

44

Ejemplo: rbol de procesos con procesos en 3 pid-namespaces

Diseo de Sistemas Operativos - Tema 1

45

Virtualizacin: bibliografa
Susanta Nanda y Tzi-cker Chiueh, A Survey on Virtualization Technologies, RPE Report, SUNY at Stony Brook, New York. Feb. 2005. J.E. Smith y R. Nair, Virtual Machines: Versatile Platforms for Systems and Processes, The Morgan Kaufmann Series in Computer Architecture and Design, San Francisco, USA, Morgan Kaufmann Inc., 2005.Disponible en http://www.sciencedirect.com/science/book/9781558609105. Wikipedia, Comparison of platform virtual machines, consultado el 13/3/2012, disponible es http://en.wikipedia.org/wiki/Comparison_of_platform_virtual_machines.

Diseo de Sistemas Operativos - Tema 1

46

Cuestiones ...

Diseo de Sistemas Operativos - Tema 1

47

Vous aimerez peut-être aussi