Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Astrazione e comunicazione tra hardware e software: la macchina virtuale, Dispense di Elementi di Informatica

Sulla costruzione di programmi per risolvere problemi e l'importanza della macchina virtuale per astrarre dall'organizzazione fisica della macchina. Viene inoltre esplorata la differenza tra la programmazione diretta della macchina hardware e la programmazione utilizzando linguaggi di alto livello. Il testo include anche informazioni sui linguaggi di comandi e il ruolo del software di base, incluso il sistema operativo.

Tipologia: Dispense

2019/2020

Caricato il 16/01/2020

emma1899
emma1899 🇮🇹

1 documento

1 / 31

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Il
so
ftw
ar
e
Un software è un programma informatico in grado di eseguire una sequenza
logica di comandi in un computer o in un qualsiasi macchina e dispositivo
elettronico programmabile. È sviluppato dai programmatori utilizzando degli
appositi linguaggi informatici detti linguaggi di programmazione ( es. C++,
python, java, ecc. ).
Possono essere interpretati dalle macchine oppure richiedere la compilazione in
linguaggio macchina.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f

Anteprima parziale del testo

Scarica Astrazione e comunicazione tra hardware e software: la macchina virtuale e più Dispense in PDF di Elementi di Informatica solo su Docsity!

Il software

Un software è un programma informatico in grado di eseguire una sequenza

logica di comandi in un computer o in un qualsiasi macchina e dispositivo

elettronico programmabile. È sviluppato dai programmatori utilizzando degli

appositi linguaggi informatici detti linguaggi di programmazione ( es. C++,

python, java, ecc. ).

Possono essere interpretati dalle macchine oppure richiedere la compilazione in

linguaggio macchina.

Il termine software ha origine durante la seconda guerra mondiale.  I tecnici dell'esercito inglese erano impegnati nella decrittazione dei codici tedeschi di Enigma, di cui già conoscevano la meccanica interna (detta hardware, componente dura, nel senso di ferraglia) grazie ai servizi segreti polacchi. La prima versione di Enigma sfruttava tre rotori per mescolare le lettere.  Dopo il 1941, ad Enigma venne aggiunto un rotore, e il team di criptanalisti inglesi, capitanati da Alan Turing, si dovette interessare non più alla sua struttura fisica, ma alle posizioni in cui venivano utilizzati i rotori della nuova Enigma.

  • La costruzione di un programma è usualmente associata alla necessità di risolvere in maniera efficiente uno o più problemi.
  • Questo perché si vuole automatizzare una serie di operazioni che sarebbero estremamente tediose da farsi manualmente, oppure perché cerchiamo di risolvere un determinato problema simulandolo.
  • Abbiamo perciò bisogno di definire un algoritmo adatto , e scriverlo in qualche linguaggio di programmazione convertibile in un codice comprensibile al calcolatore.
  • Con algoritmo noi intenderemo un insieme finito non ambiguo di istruzioni che servono per eseguire un calcolo o per risolvere un problema. La parola algoritmo deriva dal nome di un astronomo e matematico arabo del nono secolo al-Khowarizmi , il cui libro sui numerali Hindu ha posto le basi della nostra notazione decimale (tra cui l'introduzione del concetto di zero).
  • Originariamente la parola era legata alle operazioni algebriche decimali che si potevano svolgere, ma con il trascorrere del tempo e con l'aumento di interesse verso le macchine calcolatrici il termine si è evoluto per accogliere anche le procedure per la risoluzione di problemi.

L'algoritmo è un procedimento che permette di calcolare un risultato e/o risolvere un problema, eseguendo una serie di ordini e condizioni impostate a priori. Analogamente, in informatica, un algoritmo non è altro che un semplice procedimento che permette la risoluzione di specifici problemi mediante l’applicazione di una sequenza finita di precise istruzioni che, a loro volta, devono essere interpretate ed eseguite fino alla loro conclusione seguendo un ordine ben preciso.

Metafora: ricette

deve esistere qualcuno (cuoco) che esegua la ricetta le istruzioni devono essere eseguite in ordine per partire dagli ingredienti ed ottenere il piatto il cuoco deve conoscere la lingua italiana altrimenti serve un traduttore il cuoco non può preparare “cotolette di arigusta” se non sa preparare la “balsamella” la ricetta per “balsamella” è riportata nel capitolo “salse” cuoco in difficoltà con istruzioni ambigue (“abbiate l’avvertenza di cuocerli poco, in molta acqua”) l’ordine di esecuzione è importante (“condite gli spaghetti” dopo “cuocerli”) istruzioni non infinite tempo non infinito eseguendo più volte la stessa ricetta si ottiene lo stesso piatto se una ricetta è per 4 persone, raddoppiando le dosi degli ingredienti vale per 8 persone

Metafora: algoritmi

deve esistere un esecutore (calcolatore) che esegua l’algoritmo le istruzioni devono essere eseguite in ordine per partire dai dati di input ed ottenere i dati di output il calcolatore deve conoscere il linguaggio dell’algoritmo altrimenti serve un traduttore l’algoritmo deve prevedere solo istruzioni elementari per il calcolatore specificato un algoritmo, può essere richiamato per l’esecuzione di algoritmi più complessi il linguaggio dell’algoritmo non può essere ambiguo l’ordine di esecuzione è importante istruzioni non infinite tempo non infinito l’algoritmo deve essere deterministico: eseguito più volte sugli stessi dati di input genera sempre lo stesso output algoritmo parametrico: risolve una classe di problemi (al variare dei dati di input)

 Una programmazione diretta della macchina hardware da parte degli utenti creerebbe delle serie difficoltà  L’utente dovrebbe conoscere l’ organizzazione fisica dell’elaboratore e il suo linguaggio macchina  Ogni programma dovrebbe essere scritto utilizzando delle sequenze di bit ed ogni piccola differenza hardware comporterebbe una riscrittura del programma stesso Una programmazione diretta della macchina hardware da parte degli utenti non è accettabile

Il software

 È necessario fornire un meccanismo per astrarre

dall’organizzazione fisica della macchina

 L’utente deve:

usare nello stesso modo (o comunque in un modo molto simile) macchine diverse dal punto di vista hardware  avere un semplice linguaggio di interazione con la macchina  avere un insieme di programmi applicativi per svolgere compiti diversi

La macchina virtuale

 La macchina virtuale viene realizzata mediante il software ( software di base )  L’utente interagisce con la macchina virtuale grazie ad un opportuno linguaggio di comandi  Ogni computer ha un linguaggio macchina le cui istruzioni sono direttamente eseguibili dalla macchina hardware

Linguaggio di comandi

 La macchina virtuale si preoccupa della traduzione di ogni comando

impartito dall’utente nella sequenza di comandi che realizzano la

stessa funzione e sono riconosciuti dalla macchina fisica sottostante

Linguaggio di comandi (interfaccia testuale) C:> print foo 1 .doc Can’t find file foo 1 .doc C:> Dai il messaggio di prompt all’utente Quando arriva il comando, riconoscilo Se è corretto, esegui l’azione corrispondente Se è errato, dai un messaggio di errore Al termine dell’operazione, torna all’inizio

Linguaggio di comandi (interfaccia grafica)  Per esempio: interfaccia grafica  Nei calcolatori con interfaccia grafica molti comandi sono impartiti mediante l’interazione attraverso il mouse e la tastiera  Cioè il clic (il doppia clic, …) del mouse su un’icona viene tradotto in una opportuna sequenza di istruzioni che il computer esegue per soddisfare la richiesta dell’utente

Linguaggio di comandi (interfaccia grafica) Mac OSX di Apple

Linguaggio di comandi (interfaccia grafica) Linux