2012-05-09 12 views

risposta

10

Dipende cosa si intende per "hardware diverso" se si tratta dello stesso processore (o della stessa famiglia, ad esempio Intel x86), quindi le istruzioni del codice macchina sono le stesse.

Se l'hardware supplementare è differenti periferiche (schermi, dischi stampanti ecc) allora il sistema operativo nasconde quei dettagli dando un insieme coerente di istruzioni per indirizzare il loro

Se vuoi dire, come è possibile eseguire un programma per una CPU ARM su un Intel x86, quindi non è possibile - tranne per una sorta di emulatore di macchina virtuale che legge ciascuna delle istruzioni ARM e le traduce in x86 o esegue la stessa funzionalità di un insieme di funzioni x86 e quindi restituisce la stessa risposta che avrebbero avuto le ARM.

Modifica: Presumo che tu intenda PC con hw diversi, cioè periferiche diverse ma la stessa famiglia di processori?

Parlare con l'hardware non implica istruzioni specifiche in quanto tali: è principalmente una questione di spostamento della memoria in posizioni specifiche in cui il sistema operativo e/o il driver del dispositivo hanno specificamente riservato i dati a tale dispositivo. Nei vecchi tempi di DOS e BIOS si innesca quindi un interrupt per chiamare un bit specifico di codice nel BIOS per agire su quei dati e inviarlo all'HW.

+0

Grazie per la risposta concisa. Non riuscivo a capire come si collega un programma all'API del sistema operativo? Immagino che ci sia un livello di astrazione che si trova tra il programma e il processore e che esegue alcune delle istruzioni e passa le altre al processore. E in che lingua (o lingue) sono scritte queste istruzioni "virtuali"? Dove posso leggere di più su questo processo? –

+0

È solo lo spostamento della memoria anziché le istruzioni specifiche. In passato era più semplice - lo schermo era ad un certo indirizzo, tu scrivevi "65" a quell'indirizzo e una "A" appariva nell'angolo in alto a sinistra, scrivevi 1 in un'altra posizione e metteva il colore di quel rosso. –

+0

Un programma C che è stato compilato verrà collegato alle librerie che si trovano sulla macchina corrente. Anche se l'architettura del processore è la stessa, se un eseguibile dal computer A viene spostato nel computer B, l'eseguibile non verrà eseguito se il computer B non ha le stesse librerie del computer A? – Sophtware

4

Con un emulatore o una macchina virtuale, ognuno dei quali traduce in modo efficace la lingua della macchina al volo.

+0

Quindi vuoi dire che qualche tipo di emulazione viene sempre utilizzata nel processo? –

+0

@BobbyMarinoff: in situazioni in cui hai compilato il codice per un'architettura CPU e lo stai eseguendo su una diversa architettura della CPU, qualcosa deve fare la traduzione. –

0

Penso che sia più accurato dire che i compilatori nativi compilano un set di istruzioni specifico di un processore. Poiché ci sono famiglie di processori che mantengono la compatibilità all'indietro: 8086 - 80386 - 80486 - 80586 - Dual Core - Quad Core ...; quindi ogni processore esegue le istruzioni dei suoi antenati. Se si desidera eseguire il porting del codice su architetture di processori, è necessario disporre di una macchina virtuale o di un emulatore, come menzionato in precedenza.