vuoi
o PayPal
tutte le volte che vuoi
Algoritmi e Linguaggi di Programmazione
Il Calcolatore è un esecutore di Algoritmi, ovvero un procedimento per la risoluzione di una classe
di problemi, costituito da una sequenza finita di direttive non ambigue che specificano le
operazioni da eseguire su un insieme di dati. I linguaggi utilizzati per comunicare algoritmi ai
calcolatori sono detti Linguaggi di programmazione, essi sono tanto più difficili da utilizzare per
scrivere e comunicare algoritmi quanto minori sono le capacità dell’esecutore a cui è rivolto. Le
istruzioni possono essere classificate in Elementari, ovvero quelle che l’esecutore è in grado di
comprendere ed eseguire; Non Elementari quelle non note all’esecutore, affinché tale istruzione
possa essere eseguita dal calcolatore deve essere specificata in termini più semplici, tale
procedimento è detto raffinamento o specificazione dell’istruzione non elementare. Un
programma è quindi la descrizione di un algoritmo in un linguaggio comprensibile al calcolatore, il
linguaggio più semplice è quello comprensibile direttamente dal calcolatore che chiameremo
Linguaggio Macchina, le istruzioni in linguaggio macchina hanno un formato fisso, ovvero il codice
operativo che specifica quale operazione deve essere eseguita e poi gli indirizzi delle locazioni di
memoria degli operandi. Esso da un la to offre il vantaggio di una elevata velocità di esecuzione e
di una ottimizzazione nell’uso delle risorse hardware, dall’altro lo svantaggio che un programma
scritto per un calcolatore non può essere eseguito da un calcolatore con caratteristiche diverse.
Inoltre programmare in linguaggio macchina è difficile sia perché le istruzioni sono tanto
elementari sicché la costruzione dell’algoritmo richiederebbe un gran numero di comandi sia
perché i calcolatori comprendono solo istruzioni sottoforma di sequenze di bit. Per ovviare a tale
difficoltà possono essere usati i Linguaggi Assemblativi, i quali rendono più agevole la
programmazione, poiché associano alle sequenze di bit dei codici mnemonici più facili da ricordare
e interpretare. Essi comunque, come i linguaggio macchina sono detti di basso livello in quanto si
pongono al livello del calcolatore comportano difficoltà nella scrittura e verifica del funzionamento
di programmi. Sono nati per questo i cosiddetti Linguaggi di Alto Livello che rendono più semplice
l’attività di programmazione in quanto sono più comprensibili agli uomini che non dai calcolatori.
Essi fanno uso di uno pseudo-linguaggio umano utilizzando parole chiavi o codici, facilitando la
stesura e rilettura di un programma ma non mette il computer nella condizione di comprendere
direttamente il programma. Per ottenere il risultato finale è necessario applicare un traduttore
che traduca il linguaggio in istruzioni comprensibili al calcolatore, quello più semplice è
sicuramente quello che mette in corrispondenza i codici del linguaggio assemblativo con le
sequenze di bit del linguaggio macchina, tale traduttore è detto Assemblatore. La traduzione del
testo del programma detto anche testo sorgente può avvenire secondo due modalità diverse :
mediante una preventiva traduzione del testo sorgente in linguaggio macchina e successiva 2
esecuzione del programma utilizzando i compilatori; oppure mediante una contestuale
interpretazione del testo origine e sua esecuzione utilizzando un interprete.
Il compilatore riceve in ingresso un testo sorgente traducendolo in un linguaggio oggetto, tuttavia
esso non è in grado di mettere assieme le varie componenti del programma, pertanto tale
funzione viene assolta da un’applicazione detta linker o collegatore che riceve in ingresso un
programma oggetto e i riferimenti alle librerie da cui estrarre moduli da collegare produce un
unico programma eseguibile. Infine, per essere eseguito il programma viene caricato in memoria
centrale attraverso il caricatore o loader.
Un Interprete invece è un esecutore che definisce una macchina astratta attraverso il linguaggio
che riconosce eseguendo contestualmente la traduzione e l’esecuzione. I vantaggi sono la loro
indipendenza dalla macchina reale e dal sistema operativo che li ospita pertanto possono essere
eseguiti su macchine diverse, di contro però sono più lenti in quanto il calcolatore esegue sempre il
programma interprete che a sua volta esegue il programma utente, per cui ogni volta che un
programma interpretato viene eseguito, esso viene anche tradotto. 3
Architettura di Un Calcolatore Moderno
Con il termine Hardware indichiamo l’insieme di circuiti elettronici ed elettromeccanici che
costituiscono un calcolatore, mentre con il termine Architettura indichiamo la combinazione delle
funzionalità operative delle unità hardware del calcolatore, del flusso delle informazioni e del
controllo tra esse. Lo schema funzionale di un PC corrisponde ancora oggi a quello della macchina
di Von Neumann, ma lo sviluppo tecnologico ha comportato delle modifiche nel tempo, come ad
esempio la memoria cetrale è stata affiancata dalle memorie di massa, caratterizzate da una
elevate capacità di memorizzazione. Un personal computer oggi si compone di : unità di Input e di
Output, delle periferiche, di un contenitore detto case che racchiude gli altri componenti.
Il Sistema operativo di un computer, è un insieme di componenti software che si interpone tra
l’hardware di un calcolatore e l’utilizzatore, ponendosi come obiettivo quello di consentire al
calcolatore di svolgere le proprie funzioni con la massima efficienza possibile ed offrire un
ambiente amichevole di lavoro all’utilizzatore. Un PC è essenzialmente Monoutente, ovvero può
essere utilizzato da un utente per volta, ma consente il Multitasking cioè è in grado di eseguire più
attività contemporaneamente. I sistemi operativi più utilizzati sono Windows, Linux. All’interno
del case è alloggiata la Motherboard (scheda madre), ovvero un circuito stampato sulla quale
poggiano gli altri componenti, come la CPU, la ROM, la RAM, gli slot di espansione,il BIOS, il
Chipset ed altri componenti come ventole ecc.
Il BIOS (Basic Input/Output System) è un insieme di istruzioni usato dal processore per
inizializzare il computer dopo premuto il bottone di accensione. Esso s’incarica di eseguire una
procedura di autodiagnostica (controlli e verifiche sulla memoria RAM, tastiera, processore, drive,
disco fisso, porte di comunicazione, ...) e di caricare il kernel del sistema operativo in memoria
centrale. Il Chipset è un Chip integrato in una scheda madre o grafica, che gestisce lo scambio di
dati fra CPU e memoria e con il bus. Gestisce e coordina il funzionamento di tutti i componenti
presenti sulla motherboard (Controllo I/O, gestione dell’elettronica dei dischi e CD-ROM, richieste
di interrupt, accessi diretti alla memoria,...).
I microprocessori, sono dispositivi elettronici in grado di contenere al proprio interno le funzioni
di una intera CPU, costituito da un unico circuito integrato costruito su uno strato di silicio e
installato su uno speciale zoccolo detto socket saldato sulla scheda madre. Esso interagisce con
tutti gli altri dispositivi attraverso dei fili su cui possono transitare uno o più bit
contemporaneamente (dipendente dal numero di linee) per trasferire i dati e le informazioni, tali
canali di comunicazione sono detti Bus, la cui velocità di trasferimento è detta Ampiezza di Banda,
misurata in bps, ovvero numero di bit al secondo. Un Bus costituito da un solo filo è chiamato Bus
Seriale e su di esso i bit transitano uno dietro l’altro, mentre un Bus costituito da n fili è chiamato 4
Bus Parallelo perché su di esso transitano n bit alla volta. A seconda delle informazioni trasportate
distinguiamo:
Address Bus (Bus Indirizzi), tipicamente ha 64 linee e serve alla CU per comunicare
l’indirizzo del dispositivo interessato da una operazione di lettura o scrittura;
Data Bus (Bus Dati), tipicamente ha 64 linee e consente ai dati di fluire da CPU a locazione
di memoria selezionata per operazioni di store e viceversa per quelle di load;
Control Bus (Bus di controllo), trasporta segnali di controllo in tutto il sistema e serve alla
CU per indicare ai dispositivi cosa essi devono fare, tipici segnali sono quelli per operazioni
di read o write.
I Bus realizzano lo scambio delle informazioni attraverso i seguenti passi : la CPU fornisce l’indirizzo
all’address bus, i dispositivi collegati devono ascoltare l’address bus e attivarsi quando su di esso
riconoscono il proprio indirizzo identificativo, una volta attivatosi il dispositivo interpreta i segnali
del control bus per eseguire i comandi, le memorie prelevano dati dal data bus o immettono dati
in esso, i dispositivi di input possono solo immettere dati sul data bus mentre quelli di output
possono solo prelevarli. Bus di comunicazione standard per il trasferimento dati tra CPU e schede
periferiche sono detti PCI (Peripheral Component Interconnect), bus parallelo a 32 o 64 bit dotato
di una velocità di circa 133MB/sec. Una evoluzione del PCI è il PCIe (PCI Express) il quale non è
compatibile con il precedente e garantisce una maggiore velocità di trasferimento, con la versione
4.0 circa 31.5 GB/sec.
Come sappiamo, durante l’esecuzione dei programmi essi risiedono in memoria centrale ovvero
nella memoria RAM (Random Access Memory), memoria ad accesso casuale, così definita in
quanto il tempo di accesso non dipende dalla poszizine occupata. Su di essa sono consentite
operazioni di lettura e scrittura, in particolare una memoria di questo tipo è definita volatile, in
quanto tutte le informazioni in essa contenute vengono perse allo spegnimento del Sistema. Parte
della RAM può essere inclusa nella scheda madre, anche se di solito è presente sotto forma di
moduli intercambiabili SIMM o DIMM, che ne permettono l’ampliamento. Simm (Single Inline
Memory Module) Sono dei moduli, piccole schede, di memoria RAM con linea singola di
contatti.La loro velocità è di 60 o 70 ns. Dimm (Dual Inline Memory Module) Sono dei moduli di
memoria con linea doppia di contatti, la loro velocità è di 60 o 70 ns, e un modulo DIMM può
arrivare a 256 Mb. Le memorie RAM le classifichiamo in :
SDRAM (Synchronous Dynamic RAM) è detta dinamica perché i bit della memoria
mantengono i dati solo per breve tempo e devono quindi essere aggiornati continuamente
(refresh).
SRAM (Static RAM) è detta statica perché conserva i dati senza bisogno di refresh ed ha una
velocità di accesso ancora più alta. Essendo più costosa viene utilizzata essenzialmente per
la cache.
La Cache memory è piccola ma molto veloce, viene usata per accelerare il processo di