virtual machine
Rappresentazione di un sistema di calcolatori e delle sue risorse secondo una visione ad alto livello di astrazione che privilegia solo quegli elementi che possono essere di interesse per l’utente. Una macchina virtuale è pertanto un ambiente di esecuzione (spesso è un software a creare tale ambiente virtuale), composta dalle sole risorse hardware che l’utente è in grado di percepire, prescindendo da tutte le altre fisicamente presenti nel sistema. In tal modo è possibile dividere l’uso di una singola risorsa tra più utenti, i quali non hanno contezza gli uni degli altri. L’interfaccia tra utente e macchina virtuale è fornita dal software di sistema, intendendo con tale locuzione l’insieme dei programmi che gestiscono le risorse di un calcolatore e il loro accesso. Il software di sistema nasconde all’utente le specificità dell’hardware, presentando soltanto le informazioni più rilevanti, nel modo più semplice possibile. Il software di sistema non è un programma unico ma una raccolta di programmi, la cui supervisione spetta al sistema operativo. Quest’ultimo ha il compito di comunicare con l’utente, determinandone le richieste e attivando gli applicativi desiderati (traduttori, file system, gestori della memoria, editor di testi e così via). Tale approccio non offre ulteriori funzionalità, ma riproduce soltanto un’interfaccia identica all’hardware sottostante, cosicché ogni processo possa disporre di una copia virtuale del calcolatore fisicamente presente. Il concetto di macchina virtuale, sebbene sia molto difficile da realizzare in modo esatto, presenta molti vantaggi, garantendo la completa protezione delle risorse del sistema (ogni macchina virtuale risulta isolata rispetto alle altre). Tale strategia di rappresentazione dei calcolatori elettronici fu per la prima volta proposta da IBM con il sistema operativo VM. L’uso della macchina virtuale è oggi fondamentale per molti sistemi. In particolare, nel linguaggio di programmazione Java, il compilatore genera il proprio output in un linguaggio intermedio detto bytecode, le cui istruzioni sono eseguite dalla cosiddetta macchina virtuale Java (JVM, Java virtual machine). Ogni piattaforma che voglia eseguire programmi Java deve pertanto disporre di una JVM.
→ Programmazione, linguaggi di