Mondo IT

recensioni, articoli e approfondimenti sul mondo IT

XEN: come viene descritto un dominio

leave a comment »

Un dominio nel sistema di virtualizzazione XEN è una entità che incapsula al suo interno un ambiente completo per l’esecuzione di un sistema operativo ospite.

Nella struttura domain sono contenute tutte le informazioni relative al dominio e alle risorse ad esso allocate. Questa viene definita nel file sched.h contenuto nella cartella xen/include/xen/. Attraverso tale struttura, quindi, ogni macchina virtuale in esecuzione viene gestita e rappresentata.

Ne verrà discussa ora la parte più significativa :

struct domain

{

domid_t domain_id;

spinlock_t page_alloc_lock; /* protects all the following fields */

struct page_list_head page_list; /* linked list, of size tot_pages */

struct page_list_head xenpage_list; /* linked list (size xenheap_pages) */

unsigned int tot_pages; /* number of pages currently possesed */

unsigned int max_pages; /* maximum value for tot_pages */

unsigned int xenheap_pages; /* # pages allocated from Xen heap */

/* Scheduling. */

void *sched_priv; /* scheduler-specific data */

struct domain *next_in_list;

struct domain *next_in_hashbucket;

struct list_head rangesets;

spinlock_t rangesets_lock;

struct vcpu *vcpu[MAX_VIRT_CPUS];

shared_info_t *shared_info; /* shared data area */

/* Event channel information. */

struct evtchn *evtchn[NR_EVTCHN_BUCKETS];

spinlock_t event_lock;

struct grant_table *grant_table;

};

Come è facile immaginare, ogni dominio è caratterizzato da un identificatore rappresentato dalla variabile domain_id. All’interno della struttura vengono anche memorizzate tutte le informazioni riguardanti le pagine di memoria dedicate alla macchina ospite. In particolare, le variabili tot_pages e max_pages descrivono il numero massimo e quello attuale di pagine di memoria fruibili dal dominio.

Per quanto riguarda lo scheduling ogni dominio conserva un puntatore a void di nome sched_priv utile agli sviluppatori dello scheduler per allocare a quell’indirizzo dati utili al corretto svolgimento delle funzioni di scheduling. L’ultima variabile presente nella sezione scheduling è un array di CPU virtuali (VCPU). Ogni CPU virtuale è una astrazione del processore fisico della macchina.

La variabile shared_info contiene informazioni aggiornate dinamicamente run-time. Essa è utilizzata dalla macchina virtuale per reperire informazioni sullo stato globale del sistema, quali ad esempio le VCPU del dominio in stato runnable, gli event channel disponibili, il tempo di sistema e alcune informazioni relative all’architettura.

Infine viene descritta la sezione riguardante gli event channel. Questi sono un meccanismo per notifiche asincrone all’interno di XEN. Assieme alle shared memory pages, gli event channel vengono utilizzati per comunicazioni tra back-end e front-end di device driver o di applicazioni come XenStore.

Il codice contenuto nelle parti non commentate consiste in flag che descrivono caratteristiche della macchina virtuale come ad esempio il fatto se una macchina è paravirtualizzata o meno.

Annunci

Written by Michele Paolino

24/03/2010 a 23:53

Rispondi

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: