Bagikan melalui


Jenis Data

Nilai yang Dipesan

Spesifikasi ini mencadangkan beberapa bidang sebagai "dicadangkan." Bidang-bidang ini dapat diberi arti khusus dalam versi arsitektur hypervisor di masa mendatang. Untuk kompatibilitas penerusan maksimum, klien antarmuka hypervisor harus mengikuti panduan yang disediakan dalam dokumen ini. Secara umum, disediakan dua bentuk panduan. Pertahankan nilai (didokumentasikan sebagai RsvdP dalam diagram dan ReservedP dalam segmen kode) – Untuk kompatibilitas penerusan maksimum, klien harus mempertahankan nilai dalam bidang ini. Ini biasanya dilakukan dengan membaca nilai saat ini, memodifikasi nilai bidang yang tidak dipesan, dan menulis nilai kembali. Nilai nol (didokumentasikan sebagai RsvdZ dalam diagram dan ReservedZ dalam segmen kode) – Untuk kompatibilitas penerusan maksimum, klien harus nol nilai dalam bidang ini.

Bidang yang dipesan dalam struktur baca-saja hanya didokumentasikan sebagai Rsvd dalam diagram dan hanya sebagai Dicadangkan dalam segmen kode. Untuk kompatibilitas penerusan maksimum, nilai dalam bidang ini harus diabaikan. Klien tidak boleh mengasumsikan nilai-nilai ini akan selalu nol.

Jenis Skalar Sederhana

Jenis data hypervisor dibangun dari jenis skalar sederhana UINT8, UINT16, UINT32, UINT64, dan UINT128. Masing-masing mewakili skalar bilangan bulat sederhana yang tidak ditandatangani dengan jumlah bit yang ditentukan. Beberapa skalar bilangan bulat bertanda tangan yang sesuai juga didefinisikan: INT8, INT16, INT32, dan INT64. Hypervisor tidak menggunakan instruksi floating point maupun jenis floating point.

Kode Status Hypercall

Setiap hypercall mengembalikan kode status 16-bit jenis HV_STATUS.

typedef UINT16 HV_STATUS;

Tipe Ruang Alamat Memori

Arsitektur hypervisor mendefinisikan tiga ruang alamat independen:

  • Alamat fisik sistem (SPAs) menentukan ruang alamat fisik perangkat keras yang mendasar seperti yang terlihat oleh CPU. Hanya ada satu ruang alamat fisik sistem untuk seluruh komputer.
  • Alamat fisik tamu (GPA) menentukan tampilan memori fisik tamu. GPA dapat dipetakan ke SPAs yang mendasar. Ada satu ruang alamat fisik tamu per partisi.
  • Alamat virtual tamu (GVA) digunakan dalam tamu saat mengaktifkan terjemahan alamat dan menyediakan tabel halaman tamu yang valid.

Ketiga ruang alamat ini berukuran hingga 264 byte. Dengan demikian, jenis berikut didefinisikan:

typedef UINT64 HV_SPA;
typedef UINT64 HV_GPA;
typedef UINT64 HV_GVA;

Banyak antarmuka hypervisor bertindak pada halaman memori daripada byte tunggal. Ukuran halaman minimum bergantung pada arsitektur. Untuk x64, didefinisikan sebagai 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

Untuk mengonversi HV_SPA menjadi HV_SPA_PAGE_NUMBER, cukup bagi dengan HV_PAGE_SIZE.

Struktur, Enumerasi, dan Bidang Bit

Banyak struktur data dan nilai konstanta yang ditentukan nanti dalam spesifikasi ini didefinisikan dalam hal enumerasi dan struktur gaya C. Bahasa C sengaja menghindari menentukan detail implementasi tertentu. Namun, dokumen ini mengasumsikan hal berikut:

  • Semua enumerasi yang dideklarasikan dengan kata kunci "enum" mendefinisikan nilai bilangan bulat bertanda 32-bit.
  • Semua struktur dilapisi sededimikian rupa sehingga bidang selaras secara alami (yaitu, bidang 8-byte selaras dengan offset 8 byte dan sebagainya).
  • Semua bidang bit dikemas dari bit berurutan rendah hingga berurutan tinggi tanpa padding.

Endianness

Antarmuka hypervisor dirancang untuk menjadi endian-netral (yaitu, seharusnya dimungkinkan untuk memindahkan hypervisor ke sistem big-endian atau little-endian), tetapi beberapa struktur data yang ditentukan kemudian dalam spesifikasi ini mengasumsikan tata letak little-endian. Struktur data tersebut perlu diubah jika dan kapan port big-endian dicoba.

Konvensi Penamaan Penunjuk

Dokumen menggunakan konvensi penamaan untuk jenis penunjuk. Secara khusus, "P" yang ditambahkan sebelumnya ke jenis yang ditentukan menunjukkan penunjuk ke jenis tersebut. "PC" yang ditambahkan sebelumnya ke jenis yang ditentukan menunjukkan penunjuk ke nilai konstanta dari jenis tersebut.