Astrazione: ignorare dettagli per semplificare un problema -> utile per sistemi complessi.

Si tratta di un concetto tipico dell'ingegneria. Un esempio di applicazione è il motore oppure un database.

Un calcolatore può essere descritto e costruito come una gerarchia di macchine astratte, dove ogni livello maschera (nasconde) i dettagli ai livelli sottostanti.

L'astrazione è utile anche in fase di costruzione: ES: macchina powepoint: ha una complessità proibitiva -> suddivido il progetto in gerarchie astratte (1-Elaboratore, 2-S.O., 3-Programmi).

Un esecutore è definito in base a 3 elementi:

Per ogni istruzione esegue diverse operazioni:

  1. Preleva da memoria l'istruzione (FISSA) (fetch)
  2. Esamina l'istruzione e capisce cosa fare (FISSA) (decode)
  3. Esegue l'istruzione quindi le sue operazioni (op. DIVERSE x ogni istruzione) (execute)

Per definire un'istruzione serve un linguaggio (a sua volta astratto). Ogni processore ha il "suo" linguaggio macchina, ed è in grado di comprenderlo direttamente.

E' un linguaggio binario e sono comandi di bassissimo livello, che hanno quindi effetti elementari (ES: copia di un valore da un registro di memoria a un altro).

Tuttavia, è un linguaggio inadeguato per programmi complessi -> sono nati linguaggi di livello superiori le quali istruzioni sono tradotte (o eseguite mediante) istruzioni di livello inferiore. Sono più potenti e facili da programmare, che astraggono quanto accade ai livelli sottostanti.

(legenda: M0: macchina fisica, L0 linguaggio macchina di M0, IN: istruzioni del linguaggio L0, M1: macchina virtuale, L1: linguaggio di livello superiore di M1, JN: istruzioni di L1)