Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Valori riservati
Questa specifica documenta alcuni campi come "riservati". Questi campi possono essere assegnati significato specifico nelle versioni future dell'architettura dell'hypervisor. Per garantire la massima compatibilità con l'inoltro, i client dell'interfaccia hypervisor devono seguire le indicazioni fornite all'interno di questo documento. In generale, vengono fornite due forme di indicazioni. Conservare il valore (documentato come RsvdP nei diagrammi e ReservedP nei segmenti di codice): per la massima compatibilità con l'inoltro, i client devono mantenere il valore all'interno di questo campo. Questa operazione viene in genere eseguita leggendo il valore corrente, modificando i valori dei campi non riservati e scrivendo nuovamente il valore. Valore zero (documentato come RsvdZ nei diagrammi e ReservedZ nei segmenti di codice): per la massima compatibilità con l'inoltro, i client devono zero il valore all'interno di questo campo.
I campi riservati all'interno di strutture di sola lettura sono semplicemente documentati come Rsvd nei diagrammi e semplicemente come Riservati nei segmenti di codice. Per la massima compatibilità con l'inoltro, i valori all'interno di questi campi devono essere ignorati. I client non devono presupporre che questi valori siano sempre zero.
Tipi scalari semplici
I tipi di dati hypervisor vengono compilati da tipi scalari semplici UINT8, UINT16, UINT32, UINT64 e UINT128. Ognuno di questi rappresenta un semplice scalare scalare intero senza segno con il numero di bit specificato. Sono definiti anche diversi scalari interi con segno corrispondente: INT8, INT16, INT32 e INT64. L'hypervisor usa né istruzioni a virgola mobile né tipi a virgola mobile.
Codice di stato hypercall
Ogni hypercall restituisce un codice di stato a 16 bit di tipo HV_STATUS.
typedef UINT16 HV_STATUS;
Tipi di spazio indirizzi di memoria
L'architettura dell'hypervisor definisce tre spazi di indirizzi indipendenti:
- Gli indirizzi fisici di sistema definiscono lo spazio indirizzi fisici dell'hardware sottostante, come illustrato dalle CPU. C'è solo uno spazio di indirizzi fisici del sistema per l'intero computer.
- Gli indirizzi fisici guest definiscono la visualizzazione della memoria fisica del guest. È possibile eseguire il mapping degli oggetti Criteri di gruppo a spA sottostanti. È disponibile uno spazio indirizzi fisico guest per ogni partizione.
- Gli indirizzi virtuali guest (GVA) vengono usati all'interno del guest quando abilita la traduzione degli indirizzi e fornisce una tabella di pagina guest valida.
Tutti e tre questi spazi indirizzi sono fino a 264 byte di dimensioni. I tipi seguenti sono quindi definiti:
typedef UINT64 HV_SPA;
typedef UINT64 HV_GPA;
typedef UINT64 HV_GVA;
Molte interfacce hypervisor agiscono su pagine di memoria anziché su byte singoli. La dimensione minima della pagina dipende dall'architettura. Per x64, è definito come 4K.
#define X64_PAGE_SIZE 0x1000
#define HV_X64_MAX_PAGE_NUMBER (MAXUINT64/X64_PAGE_SIZE)
#define HV_PAGE_SIZE X64_PAGE_SIZE
#define HV_LARGE_PAGE_SIZE X64_LARGE_PAGE_SIZE
#define HV_PAGE_MASK (HV_PAGE_SIZE - 1)
typedef UINT64 HV_SPA_PAGE_NUMBER;
typedef UINT64 HV_GPA_PAGE_NUMBER;
typedef UINT64 HV_GVA_PAGE_NUMBER;
typedef UINT32 HV_SPA_PAGE_OFFSET
Per convertire un HV_SPA oggetto in un HV_SPA_PAGE_NUMBERoggetto , è sufficiente dividere per HV_PAGE_SIZE.
Strutture, enumerazioni e campi bit
Molte strutture di dati e valori costanti definiti più avanti in questa specifica sono definiti in termini di enumerazioni e strutture in stile C. Il linguaggio C consente di evitare di definire determinati dettagli di implementazione. Tuttavia, questo documento presuppone quanto segue:
- Tutte le enumerazioni dichiarate con la parola chiave "enum" definiscono valori interi con segno a 32 bit.
- Tutte le strutture vengono riempite in modo che i campi siano allineati naturalmente ,ovvero un campo a 8 byte è allineato a un offset di 8 byte e così via.
- Tutti i campi di bit vengono compressi da bit di basso ordine a bit elevati senza spaziatura interna.
Ordine dei byte
L'interfaccia dell'hypervisor è progettata per essere endian-neutral ,ovvero dovrebbe essere possibile convertire l'hypervisor in un sistema big-endian o little-endian, ma alcune delle strutture di dati definite più avanti in questa specifica presuppongono un layout di tipo little-endian. Tali strutture di dati dovranno essere modificate se e quando viene tentata una porta big-endian.
Convenzione di denominazione puntatore
Il documento usa una convenzione di denominazione per i tipi di puntatore. In particolare, un valore "P" preceduto da un tipo definito indica un puntatore a tale tipo. Un "PC" preceduto da un tipo definito indica un puntatore a un valore costante di tale tipo.