RISOLTO Virtualizzazione, cpu e ram

  • Autore discussione Autore discussione gpc
  • Data d'inizio Data d'inizio
Pubblicità

gpc

Utente Èlite
Messaggi
2,629
Reazioni
45
Punteggio
113
La VM riesce a "comprendere" se sta sfruttando cpu AMD o Intel?
Grazie in anticipo
 
Ultima modifica:
Se per VM intendi proprio il programma in sè, ovviamente si, riesce (può farlo anche un qualsiasi programma). Ci sono anche istruzioni assembly apposta per individuare il vendor, ma in generale il sistema operativo dispone di "interfacce" (diciamo così, per semplificare) che i vari programmi possono richiamare per avere alcune funzionalità.

Chi per caso ne fosse interessato, trova un esempio di codice sotto spoiler. ?

C:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

typedef struct _cpu_basic_info {
    char     vendorid[13];
} cpu_basic_info;

int main() {

    cpu_basic_info* info = calloc(1, sizeof(cpu_basic_info));

    __asm
    {
        mov    eax, 00h
        cpuid

        mov    esi, info

        mov    dword ptr[esi].vendorid, ebx
        mov    dword ptr[esi].vendorid + 4, edx
        mov    dword ptr[esi].vendorid + 8, ecx
    };

    printf("%s\n", info->vendorid);
    free(info);    
    getchar();

    return 0;
}

Nel mio caso il risultato è:

2022-07-05_190924.webp
[/code]
 
Chi per caso ne fosse interessato, trova un esempio di codice sotto spoiler
non me lo compila, Compilatore GCC 11.2.0
da 5 errori,

In function 'main':
14|error: expected '(' before '{' token
15|error: unknown type name 'mov'|
15|error: invalid suffix "h" on integer constant|
15|error: expected identifier or '(' before numeric constant|
30|error: expected declaration or statement at end of input|
|=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|


magari posta lo zip direttamente del file, forse il copia-incolla si porta dietro robaccia, caratteri invisibili ecc.
 
Ultima modifica:
non me lo compila, Compilatore GCC 11.2.0
da 5 errori,

In function 'main':
14|error: expected '(' before '{' token
15|error: unknown type name 'mov'|
15|error: invalid suffix "h" on integer constant|
15|error: expected identifier or '(' before numeric constant|
30|error: expected declaration or statement at end of input|
|=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|


magari posta lo zip direttamente del file, forse il copia-incolla si porta dietro robaccia, caratteri invisibili ecc.
Non te lo compila perché la sintassi asm è di MSVC, dovresti compilare con Visual Studio (o comunque con il compilatore Microsoft).
O in alternativa convertire l'asm per GCC ?
 
grazie
quindi se da una VM si esegue uno script può fornire come risultato Intel o AMD
Se qualcosa è scritto solo per Intel non si può eseguire su AMD?
 
Se qualcosa è scritto solo per Intel non si può eseguire su AMD?
l'architettura è x86_64 per entrambi, è per questo motivo che Windows, linux e programmi vari funzionano su entrambe le CPU, a parte qualche differenza in prestazioni dipendenti dall'ottimizzazione software
 
ok, però se parliamo di kernel del SO?

Non ho capito cosa stai chiedendo però.
Le architetture Intel o AMD non hanno alcun nesso con un SO.

Tra win e Linux ovviamente le differenze ci sono, a partire dal tipo di kernel.
Gli OS supportano svariate architetture.

Cosa vuoi sapere di preciso?
 
ok
se un kernel non supporta un' architettura non può andare ovviamente nemmeno su una VM?

per fare un esempio estremo, i SO Apple non possono essere eseguiti su AMD
(a prescindere dal discorso che devono essere installati sui loro device)
come discorso estremo
 
ok, però siamo su kernel non ufficiali per AMD
corretto?
la stabilità è tutt' altro che garantita
non si può istallare da dmg ufficiale
 
ok
se un kernel non supporta un' architettura non può andare ovviamente nemmeno su una VM?

per fare un esempio estremo, i SO Apple non possono essere eseguiti su AMD
(a prescindere dal discorso che devono essere installati sui loro device)
come discorso estremo

VirtualBox esegue le istruzioni sulla macchina host, quindi non potresti ad esempio avere un host x86_64 che esegue un OS ARM.
VirtualBox è un hypervisor, non un emulatore.
 
Pubblicità
Pubblicità

Discussioni Simili

Indietro
Top