Home    Forum    Cerca    FAQ    Iscriviti    Login


Nuova Discussione  Rispondi alla Discussione 
Pagina 1 di 1
 
 
Virtual Machine Monitor - Hypervisor -- Lo Strato Base Delle VM
Autore Messaggio
Rispondi Citando   Download Messaggio 
Messaggio Virtual Machine Monitor - Hypervisor -- Lo Strato Base Delle VM 
 
Virtual Machine Monitor

Il Virtual Machine Monitor (VMM) spesso indica l’hypervisor, ossia il sistema di virtualizzazione (come ESX/ESXi in VMware, Hyper-V in Microsoft, XenServer in Citrix, …), ma più precisamente indica una componente associata ad ogni VM. Tale componente si occupa di fornire al sistema operativo guest un’astrazione del livello fisico sottostante, in modo tale che il sistema operativo guest creda di essere eseguito direttamente sull’hardware della macchina. I driver installati all’interno della VM permettono di inoltrare le richieste al VMM, il quale a sua volta passa le richieste all’hypervisor per completare l’operazione richiesta. Il VMM presenta ad ogni VM una rappresentazione virtuale di CPU, memoria, storage, rete, … Grazie al VMM può essere garantita una importante proprietà per le VM, l’isolamento, in quanto le VM non possono accedere direttamente all’hardware fisico del nodo e dunque neppure alle risorse di altre VM.

architettura-esx-server

Voglio riportare un esempio di codice sorgente di questo pezzo fondamentale che sta alla base delle macchine virtuali:

1     /** @file
2      * VMM - The Virtual Machine Monitor.
3      */
4     
5     /*
6      * Copyright (C) 2006-2010 Oracle Corporation
7      *
8      * This file is part of VirtualBox Open Source Edition (OSE), as
9      * available from http://www.virtualbox.org. This file is free software;
10      * you can redistribute it and/or modify it under the terms of the GNU
11      * General Public License (GPL) as published by the Free Software
12      * Foundation, in version 2 as it comes in the "COPYING" file of the
13      * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14      * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15      *
16      * The contents of this file may alternatively be used under the terms
17      * of the Common Development and Distribution License Version 1.0
18      * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19      * VirtualBox OSE distribution, in which case the provisions of the
20      * CDDL are applicable instead of those of the GPL.
21      *
22      * You may elect to license modified versions of this file under the
23      * terms and conditions of either the GPL or the CDDL or both.
24      */
25     
26     #ifndef ___VBox_vmm_vmm_h
27     #define ___VBox_vmm_vmm_h
28     
29     #include <VBox/types.h>
30     #include <VBox/vmm/vmapi.h>
31     #include <VBox/sup.h>
32     #include <VBox/log.h>
33     #include <iprt/stdarg.h>
34     
35     RT_C_DECLS_BEGIN
36     
37     /** @defgroup grp_vmm       The Virtual Machine Monitor API
38      * @{
39      */
40     
41     /**
42      * World switcher identifiers.
43      */
44     typedef enum VMMSWITCHER
45     {
46         /** The usual invalid 0. */
47         VMMSWITCHER_INVALID = 0,
48         /** Switcher for 32-bit host to 32-bit shadow paging. */
49         VMMSWITCHER_32_TO_32,
50         /** Switcher for 32-bit host paging to PAE shadow paging. */
51         VMMSWITCHER_32_TO_PAE,
52         /** Switcher for 32-bit host paging to AMD64 shadow paging. */
53         VMMSWITCHER_32_TO_AMD64,
54         /** Switcher for PAE host to 32-bit shadow paging. */
55         VMMSWITCHER_PAE_TO_32,
56         /** Switcher for PAE host to PAE shadow paging. */
57         VMMSWITCHER_PAE_TO_PAE,
58         /** Switcher for PAE host paging to AMD64 shadow paging. */
59         VMMSWITCHER_PAE_TO_AMD64,
60         /** Switcher for AMD64 host paging to 32-bit shadow paging. */
61         VMMSWITCHER_AMD64_TO_32,
62         /** Switcher for AMD64 host paging to PAE shadow paging. */
63         VMMSWITCHER_AMD64_TO_PAE,
64         /** Switcher for AMD64 host paging to AMD64 shadow paging. */
65         VMMSWITCHER_AMD64_TO_AMD64,
66         /** Used to make a count for array declarations and suchlike. */
67         VMMSWITCHER_MAX,
68         /** The usual 32-bit paranoia. */
69         VMMSWITCHER_32BIT_HACK = 0x7fffffff
70     } VMMSWITCHER;
71     
72     
73     /**
74      * VMMRZCallRing3 operations.
75      */
76     typedef enum VMMCALLRING3
77     {
78         /** Invalid operation.  */
79         VMMCALLRING3_INVALID = 0,
80         /** Acquire the PDM lock. */
81         VMMCALLRING3_PDM_LOCK,
82         /** Acquire the PGM lock. */
83         VMMCALLRING3_PGM_LOCK,
84         /** Grow the PGM shadow page pool. */
85         VMMCALLRING3_PGM_POOL_GROW,
86         /** Maps a chunk into ring-3. */
87         VMMCALLRING3_PGM_MAP_CHUNK,
88         /** Allocates more handy pages. */
89         VMMCALLRING3_PGM_ALLOCATE_HANDY_PAGES,
90         /** Allocates a large (2MB) page. */
91         VMMCALLRING3_PGM_ALLOCATE_LARGE_HANDY_PAGE,
92         /** Acquire the MM hypervisor heap lock. */
93         VMMCALLRING3_MMHYPER_LOCK,
94         /** Replay the REM handler notifications. */
95         VMMCALLRING3_REM_REPLAY_HANDLER_NOTIFICATIONS,
96         /** Flush the GC/R0 logger. */
97         VMMCALLRING3_VMM_LOGGER_FLUSH,
98         /** Set the VM error message. */
99         VMMCALLRING3_VM_SET_ERROR,
100         /** Set the VM runtime error message. */
101         VMMCALLRING3_VM_SET_RUNTIME_ERROR,
102         /** Signal a ring 0 assertion. */
103         VMMCALLRING3_VM_R0_ASSERTION,
104         /** Ring switch to force preemption. */
105         VMMCALLRING3_VM_R0_PREEMPT,
106         /** Sync the FTM state with the standby node. */
107         VMMCALLRING3_FTM_SET_CHECKPOINT,
108         /** The usual 32-bit hack. */
109         VMMCALLRING3_32BIT_HACK = 0x7fffffff
110     } VMMCALLRING3;
111     
112     /**
113      * VMMR3AtomicExecuteHandler callback function.
114      *
115      * @returns VBox status code.
116      * @param   pVM     Pointer to the shared VM structure.
117      * @param   pvUser  User specified argument
118      *
119      * @todo missing prefix.
120      */
121     typedef DECLCALLBACK(int) FNATOMICHANDLER(PVM pVM, void *pvUser);
122     /** Pointer to a FNMMATOMICHANDLER(). */
123     typedef FNATOMICHANDLER *PFNATOMICHANDLER;
124     
125     /**
126      * Rendezvous callback.
127      *
128      * @returns VBox strict status code - EM scheduling.  Do not return
129      *          informational status code other than the ones used by EM for
130      *          scheduling.
131      *
132      * @param   pVM         The VM handle.
133      * @param   pVCpu       The handle of the calling virtual CPU.
134      * @param   pvUser      The user argument.
135      */
136     typedef DECLCALLBACK(VBOXSTRICTRC) FNVMMEMTRENDEZVOUS(PVM pVM, PVMCPU pVCpu, void *pvUser);
137     /** Pointer to a rendezvous callback function. */
138     typedef FNVMMEMTRENDEZVOUS *PFNVMMEMTRENDEZVOUS;
139     
140     /**
141      * Method table that the VMM uses to call back the user of the VMM.
142      */
143     typedef struct VMM2USERMETHODS
144     {
145         /** Magic value (VMM2USERMETHODS_MAGIC). */
146         uint32_t    u32Magic;
147         /** Structure version (VMM2USERMETHODS_VERSION). */
148         uint32_t    u32Version;
149     
150         /**
151          * Save the VM state.
152          *
153          * @returns VBox status code.
154          * @param   pThis       Pointer to the callback method table.
155          * @param   pVM         The VM handle.
156          *
157          * @remarks This member shall be set to NULL if the operation is not
158          *          supported.
159          */
160         DECLR3CALLBACKMEMBER(int, pfnSaveState,(PCVMM2USERMETHODS pThis, PVM pVM));
161         /** @todo Move pfnVMAtError and pfnCFGMConstructor here? */
162     
163         /** Magic value (VMM2USERMETHODS_MAGIC) marking the end of the structure. */
164         uint32_t    u32EndMagic;
165     } VMM2USERMETHODS;
166     
167     /** Magic value of the VMM2USERMETHODS (Franz Kafka). */
168     #define VMM2USERMETHODS_MAGIC         UINT32_C(0x18830703)
169     /** The VMM2USERMETHODS structure version. */
170     #define VMM2USERMETHODS_VERSION       UINT32_C(0x00010000)
171     
172     
173     VMMDECL(RTRCPTR)     VMMGetStackRC(PVMCPU pVCpu);
174     VMMDECL(VMCPUID)     VMMGetCpuId(PVM pVM);
175     VMMDECL(PVMCPU)      VMMGetCpu(PVM pVM);
176     VMMDECL(PVMCPU)      VMMGetCpu0(PVM pVM);
177     VMMDECL(PVMCPU)      VMMGetCpuById(PVM pVM, VMCPUID idCpu);
178     VMMDECL(uint32_t)    VMMGetSvnRev(void);
179     VMMDECL(VMMSWITCHER) VMMGetSwitcher(PVM pVM);
180     VMMDECL(void)        VMMTrashVolatileXMMRegs(void);
181     
182     /** @def VMMIsHwVirtExtForced
183      * Checks if forced to use the hardware assisted virtualization extensions.
184      *
185      * This is intended for making setup decisions where we can save resources when
186      * using hardware assisted virtualization.
187      *
188      * @returns true / false.
189      * @param   pVM     Pointer to the shared VM structure.
190      */
191     #define VMMIsHwVirtExtForced(pVM)   ((pVM)->fHwVirtExtForced)
192     
193     
194     #ifdef IN_RING3
195     /** @defgroup grp_vmm_r3    The VMM Host Context Ring 3 API
196      * @ingroup grp_vmm
197      * @{
198      */
199     VMMR3_INT_DECL(int)     VMMR3Init(PVM pVM);
200     VMMR3_INT_DECL(int)     VMMR3InitR0(PVM pVM);
201     VMMR3_INT_DECL(int)     VMMR3InitRC(PVM pVM);
202     VMMR3_INT_DECL(int)     VMMR3InitCompleted(PVM pVM, VMINITCOMPLETED enmWhat);
203     VMMR3_INT_DECL(int)     VMMR3Term(PVM pVM);
204     VMMR3_INT_DECL(void)    VMMR3Relocate(PVM pVM, RTGCINTPTR offDelta);
205     VMMR3_INT_DECL(int)     VMMR3UpdateLoggers(PVM pVM);
206     VMMR3DECL(const char *) VMMR3GetRZAssertMsg1(PVM pVM);
207     VMMR3DECL(const char *) VMMR3GetRZAssertMsg2(PVM pVM);
208     VMMR3_INT_DECL(int) VMMR3GetImportRC(PVM pVM, const char *pszSymbol, PRTRCPTR pRCPtrValue);
209     VMMR3_INT_DECL(int)     VMMR3SelectSwitcher(PVM pVM, VMMSWITCHER enmSwitcher);
210     VMMR3_INT_DECL(int)     VMMR3DisableSwitcher(PVM pVM);
211     VMMR3_INT_DECL(RTR0PTR) VMMR3GetHostToGuestSwitcher(PVM pVM, VMMSWITCHER enmSwitcher);
212     VMMR3_INT_DECL(int)     VMMR3RawRunGC(PVM pVM, PVMCPU pVCpu);
213     VMMR3_INT_DECL(int)     VMMR3HwAccRunGC(PVM pVM, PVMCPU pVCpu);
214     VMMR3DECL(int) VMMR3CallRC(PVM pVM, RTRCPTR RCPtrEntry, unsigned cArgs, ...);
215     VMMR3DECL(int) VMMR3CallRCV(PVM pVM, RTRCPTR RCPtrEntry, unsigned cArgs, va_list args);
216     VMMR3DECL(int)          VMMR3CallR0(PVM pVM, uint32_t uOperation, uint64_t u64Arg, PSUPVMMR0REQHDR pReqHdr);
217     VMMR3DECL(int)          VMMR3ResumeHyper(PVM pVM, PVMCPU pVCpu);
218     VMMR3DECL(void) VMMR3FatalDump(PVM pVM, PVMCPU pVCpu, int rcErr);
219     VMMR3_INT_DECL(void)    VMMR3YieldSuspend(PVM pVM);
220     VMMR3_INT_DECL(void)    VMMR3YieldStop(PVM pVM);
221     VMMR3_INT_DECL(void)    VMMR3YieldResume(PVM pVM);
222     VMMR3_INT_DECL(void)    VMMR3SendSipi(PVM pVM, VMCPUID idCpu, uint32_t uVector);
223     VMMR3_INT_DECL(void)    VMMR3SendInitIpi(PVM pVM, VMCPUID idCpu);
224     VMMR3DECL(int) VMMR3RegisterPatchMemory(PVM pVM, RTGCPTR pPatchMem, unsigned cbPatchMem);
225     VMMR3DECL(int) VMMR3DeregisterPatchMemory(PVM pVM, RTGCPTR pPatchMem, unsigned cbPatchMem);
226     VMMR3DECL(int) VMMR3AtomicExecuteHandler(PVM pVM, PFNATOMICHANDLER pfnHandler, void *pvUser);
227     VMMR3DECL(int) VMMR3EmtRendezvous(PVM pVM, uint32_t fFlags, PFNVMMEMTRENDEZVOUS pfnRendezvous, void *pvUser);
228     /** @defgroup grp_VMMR3EmtRendezvous_fFlags     VMMR3EmtRendezvous flags
229      *  @{ */
230     /** Execution type mask. */
231     #define VMMEMTRENDEZVOUS_FLAGS_TYPE_MASK            UINT32_C(0x00000007)
232     /** Invalid execution type. */
233     #define VMMEMTRENDEZVOUS_FLAGS_TYPE_INVALID         UINT32_C(0)
234     /** Let the EMTs execute the callback one by one (in no particular order). */
235     #define VMMEMTRENDEZVOUS_FLAGS_TYPE_ONE_BY_ONE      UINT32_C(1)
236     /** Let all the EMTs execute the callback at the same time. */
237     #define VMMEMTRENDEZVOUS_FLAGS_TYPE_ALL_AT_ONCE     UINT32_C(2)
238     /** Only execute the callback on one EMT (no particular one). */
239     #define VMMEMTRENDEZVOUS_FLAGS_TYPE_ONCE            UINT32_C(3)
240     /** Let the EMTs execute the callback one by one in ascending order. */
241     #define VMMEMTRENDEZVOUS_FLAGS_TYPE_ASCENDING       UINT32_C(4)
242     /** Let the EMTs execute the callback one by one in descending order. */
243     #define VMMEMTRENDEZVOUS_FLAGS_TYPE_DESCENDING      UINT32_C(5)
244     /** Stop after the first error.
245      * This is not valid for any execution type where more than one EMT is active
246      * at a time. */
247     #define VMMEMTRENDEZVOUS_FLAGS_STOP_ON_ERROR        UINT32_C(0x00000008)
248     /** The valid flags. */
249     #define VMMEMTRENDEZVOUS_FLAGS_VALID_MASK           UINT32_C(0x0000000f)
250     /** @} */
251     VMMR3_INT_DECL(int)     VMMR3EmtRendezvousFF(PVM pVM, PVMCPU pVCpu);
252     VMMR3_INT_DECL(int) VMMR3ReadR0Stack(PVM pVM, VMCPUID idCpu, RTHCUINTPTR R0Addr, void *pvBuf, size_t cbRead);
253     /** @} */
254     #endif /* IN_RING3 */
255     
256     
257     /** @defgroup grp_vmm_r0    The VMM Host Context Ring 0 API
258      * @ingroup grp_vmm
259      * @{
260      */
261     
262     /**
263      * The VMMR0Entry() codes.
264      */
265     typedef enum VMMR0OPERATION
266     {
267         /** Run guest context. */
268         VMMR0_DO_RAW_RUN = SUP_VMMR0_DO_RAW_RUN,
269         /** Run guest code using the available hardware acceleration technology. */
270         VMMR0_DO_HWACC_RUN = SUP_VMMR0_DO_HWACC_RUN,
271         /** Official NOP that we use for profiling. */
272         VMMR0_DO_NOP = SUP_VMMR0_DO_NOP,
273         /** Official slow iocl NOP that we use for profiling. */
274         VMMR0_DO_SLOW_NOP,
275     
276         /** Ask the GVMM to create a new VM. */
277         VMMR0_DO_GVMM_CREATE_VM,
278         /** Ask the GVMM to destroy the VM. */
279         VMMR0_DO_GVMM_DESTROY_VM,
280         /** Call GVMMR0SchedHalt(). */
281         VMMR0_DO_GVMM_SCHED_HALT,
282         /** Call GVMMR0SchedWakeUp(). */
283         VMMR0_DO_GVMM_SCHED_WAKE_UP,
284         /** Call GVMMR0SchedPoke(). */
285         VMMR0_DO_GVMM_SCHED_POKE,
286         /** Call GVMMR0SchedWakeUpAndPokeCpus(). */
287         VMMR0_DO_GVMM_SCHED_WAKE_UP_AND_POKE_CPUS,
288         /** Call GVMMR0SchedPoll(). */
289         VMMR0_DO_GVMM_SCHED_POLL,
290         /** Call GVMMR0QueryStatistics(). */
291         VMMR0_DO_GVMM_QUERY_STATISTICS,
292         /** Call GVMMR0ResetStatistics(). */
293         VMMR0_DO_GVMM_RESET_STATISTICS,
294         /** Call GVMMR0RegisterVCpu(). */
295         VMMR0_DO_GVMM_REGISTER_VMCPU,
296     
297         /** Call VMMR0 Per VM Init. */
298         VMMR0_DO_VMMR0_INIT,
299         /** Call VMMR0 Per VM Termination. */
300         VMMR0_DO_VMMR0_TERM,
301         /** Setup the hardware accelerated raw-mode session. */
302         VMMR0_DO_HWACC_SETUP_VM,
303         /** Attempt to enable or disable hardware accelerated raw-mode. */
304         VMMR0_DO_HWACC_ENABLE,
305         /** Calls function in the hypervisor.
306          * The caller must setup the hypervisor context so the call will be performed.
307          * The difference between VMMR0_DO_RUN_GC and this one is the handling of
308          * the return GC code. The return code will not be interpreted by this operation.
309          */
310         VMMR0_DO_CALL_HYPERVISOR,
311     
312         /** Call PGMR0PhysAllocateHandyPages(). */
313         VMMR0_DO_PGM_ALLOCATE_HANDY_PAGES,
314         /** Call PGMR0AllocateLargePage(). */
315         VMMR0_DO_PGM_ALLOCATE_LARGE_HANDY_PAGE,
316     
317         /** Call GMMR0InitialReservation(). */
318         VMMR0_DO_GMM_INITIAL_RESERVATION,
319         /** Call GMMR0UpdateReservation(). */
320         VMMR0_DO_GMM_UPDATE_RESERVATION,
321         /** Call GMMR0AllocatePages(). */
322         VMMR0_DO_GMM_ALLOCATE_PAGES,
323         /** Call GMMR0FreePages(). */
324         VMMR0_DO_GMM_FREE_PAGES,
325         /** Call GMMR0FreeLargePage(). */
326         VMMR0_DO_GMM_FREE_LARGE_PAGE,
327         /** Call GMMR0QueryHypervisorMemoryStatsReq(). */
328         VMMR0_DO_GMM_QUERY_HYPERVISOR_MEM_STATS,
329         /** Call GMMR0QueryMemoryStatsReq(). */
330         VMMR0_DO_GMM_QUERY_MEM_STATS,
331         /** Call GMMR0BalloonedPages(). */
332         VMMR0_DO_GMM_BALLOONED_PAGES,
333         /** Call GMMR0MapUnmapChunk(). */
334         VMMR0_DO_GMM_MAP_UNMAP_CHUNK,
335         /** Call GMMR0SeedChunk(). */
336         VMMR0_DO_GMM_SEED_CHUNK,
337         /** Call GMMR0RegisterSharedModule. */
338         VMMR0_DO_GMM_REGISTER_SHARED_MODULE,
339         /** Call GMMR0UnregisterSharedModule. */
340         VMMR0_DO_GMM_UNREGISTER_SHARED_MODULE,
341         /** Call GMMR0ResetSharedModules. */
342         VMMR0_DO_GMM_RESET_SHARED_MODULES,
343         /** Call GMMR0CheckSharedModules. */
344         VMMR0_DO_GMM_CHECK_SHARED_MODULES,
345         /** Call GMMR0FindDuplicatePage. */
346         VMMR0_DO_GMM_FIND_DUPLICATE_PAGE,
347     
348         /** Set a GVMM or GMM configuration value. */
349         VMMR0_DO_GCFGM_SET_VALUE,
350         /** Query a GVMM or GMM configuration value. */
351         VMMR0_DO_GCFGM_QUERY_VALUE,
352     
353         /** Call PDMR0DriverCallReqHandler. */
354         VMMR0_DO_PDM_DRIVER_CALL_REQ_HANDLER,
355         /** Call PDMR0DeviceCallReqHandler. */
356         VMMR0_DO_PDM_DEVICE_CALL_REQ_HANDLER,
357     
358         /** The start of the R0 service operations. */
359         VMMR0_DO_SRV_START,
360         /** Call IntNetR0Open(). */
361         VMMR0_DO_INTNET_OPEN,
362         /** Call IntNetR0IfClose(). */
363         VMMR0_DO_INTNET_IF_CLOSE,
364         /** Call IntNetR0IfGetBufferPtrs(). */
365         VMMR0_DO_INTNET_IF_GET_BUFFER_PTRS,
366         /** Call IntNetR0IfSetPromiscuousMode(). */
367         VMMR0_DO_INTNET_IF_SET_PROMISCUOUS_MODE,
368         /** Call IntNetR0IfSetMacAddress(). */
369         VMMR0_DO_INTNET_IF_SET_MAC_ADDRESS,
370         /** Call IntNetR0IfSetActive(). */
371         VMMR0_DO_INTNET_IF_SET_ACTIVE,
372         /** Call IntNetR0IfSend(). */
373         VMMR0_DO_INTNET_IF_SEND,
374         /** Call IntNetR0IfWait(). */
375         VMMR0_DO_INTNET_IF_WAIT,
376         /** Call IntNetR0IfAbortWait(). */
377         VMMR0_DO_INTNET_IF_ABORT_WAIT,
378     
379         /** Forward call to the PCI driver */
380         VMMR0_DO_PCIRAW_REQ,
381     
382         /** The end of the R0 service operations. */
383         VMMR0_DO_SRV_END,
384     
385         /** Official call we use for testing Ring-0 APIs. */
386         VMMR0_DO_TESTS,
387         /** Test the 32->64 bits switcher. */
388         VMMR0_DO_TEST_SWITCHER3264,
389     
390         /** The usual 32-bit type blow up. */
391         VMMR0_DO_32BIT_HACK = 0x7fffffff
392     } VMMR0OPERATION;
393     
394     
395     /**
396      * Request buffer for VMMR0_DO_GCFGM_SET_VALUE and VMMR0_DO_GCFGM_QUERY_VALUE.
397      * @todo Move got GCFGM.h when it's implemented.
398      */
399     typedef struct GCFGMVALUEREQ
400     {
401         /** The request header.*/
402         SUPVMMR0REQHDR      Hdr;
403         /** The support driver session handle. */
404         PSUPDRVSESSION      pSession;
405         /** The value.
406          * This is input for the set request and output for the query. */
407         uint64_t            u64Value;
408         /** The variable name.
409          * This is fixed sized just to make things simple for the mock-up. */
410         char                szName[48];
411     } GCFGMVALUEREQ;
412     /** Pointer to a VMMR0_DO_GCFGM_SET_VALUE and VMMR0_DO_GCFGM_QUERY_VALUE request buffer.
413      * @todo Move got GCFGM.h when it's implemented.
414      */
415     typedef GCFGMVALUEREQ *PGCFGMVALUEREQ;
416     
417     VMMR0DECL(int) VMMR0EntryInt(PVM pVM, VMMR0OPERATION enmOperation, void *pvArg);
418     VMMR0DECL(void)     VMMR0EntryFast(PVM pVM, VMCPUID idCpu, VMMR0OPERATION enmOperation);
419     VMMR0DECL(int)      VMMR0EntryEx(PVM pVM, VMCPUID idCpu, VMMR0OPERATION enmOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION);
420     VMMR0DECL(int)      VMMR0TermVM(PVM pVM, PGVM pGVM);
421     
422     #ifdef LOG_ENABLED
423     VMMR0DECL(void)     VMMR0LogFlushDisable(PVMCPU pVCpu);
424     VMMR0DECL(void)     VMMR0LogFlushEnable(PVMCPU pVCpu);
425     #else
426     #define             VMMR0LogFlushDisable(pVCpu)     do { } while(0)
427     #define             VMMR0LogFlushEnable(pVCpu)      do { } while(0)
428     #endif
429     
430     /** @} */
431     
432     
433     #ifdef IN_RC
434     /** @defgroup grp_vmm_rc    The VMM Raw-Mode Context API
435      * @ingroup grp_vmm
436      * @{
437      */
438     VMMRCDECL(int) VMMGCEntry(PVM pVM, unsigned uOperation, unsigned uArg, ...);
439     VMMRCDECL(void) VMMGCGuestToHost(PVM pVM, int rc);
440     VMMRCDECL(void)     VMMGCLogFlushIfFull(PVM pVM);
441     /** @} */
442     #endif /* IN_RC */
443     
444     #if defined(IN_RC) || defined(IN_RING0)
445     /** @defgroup grp_vmm_rz    The VMM Raw-Mode and Ring-0 Context API
446      * @ingroup grp_vmm
447      * @{
448      */
449     VMMRZDECL(int)      VMMRZCallRing3(PVM pVM, PVMCPU pVCpu, VMMCALLRING3 enmOperation, uint64_t uArg);
450     VMMRZDECL(int)      VMMRZCallRing3NoCpu(PVM pVM, VMMCALLRING3 enmOperation, uint64_t uArg);
451     VMMRZDECL(void)     VMMRZCallRing3Disable(PVMCPU pVCpu);
452     VMMRZDECL(void)     VMMRZCallRing3Enable(PVMCPU pVCpu);
453     VMMRZDECL(bool)     VMMRZCallRing3IsEnabled(PVMCPU pVCpu);
454     /** @} */
455     #endif
456
 



 
elixir1349 Invia Messaggio Privato
Torna in cimaVai a fondo pagina
Mostra prima i messaggi di:    

Nuova Discussione  Rispondi alla Discussione  Pagina 1 di 1
 


NascondiQuesto argomento è stato utile?
Condividi Argomento
Segnala via email Facebook Twitter Windows Live Favorites MySpace del.icio.us Digg SlashDot google.com LinkedIn StumbleUpon Blogmarks Diigo reddit.com Blinklist co.mments.com
technorati.com DIGG ITA linkagogo.com meneame.net netscape.com newsvine.com yahoo.com Fai Informazione Ok Notizie Segnalo Bookmark IT fark.com feedmelinks.com spurl.net

Online in questo argomento: 0 Registrati, 0 Nascosti e 1 Ospite
Utenti Registrati: Nessuno


 
Lista Permessi
Non puoi inserire nuovi Argomenti
Non puoi rispondere ai Messaggi
Non puoi modificare i tuoi Messaggi
Non puoi cancellare i tuoi Messaggi
Non puoi votare nei Sondaggi
Non puoi allegare files
Puoi scaricare gli allegati
Non puoi inserire eventi calendario