Comments
Transcript
Il Linguaggio del Il Linguaggio del Computer
ITCG CATTANEO CON LICEO DALL'AGLIO - via M. di Canossa, 3 - Castelnovo ne’ Monti (RE) Sezione ITI - Corso di Fisica - prof. Massimo Manvilli Il Linguaggio del Computer I primi calcolatori, come il MARK I e l'ENIAC, realizzati fra il 1944 ed il 1946, usavano il sistema di numerazione decimale. Fu il fisico matematico ungherese Johann von Neumann a suggerire, nel 1946, l'uso del sistema binario. Da allora, questo sistema di numerazione si è legato ai calcolatori in maniera indissolubile, tanto che oggi esso è impiegato da qualsiasi macchina per calcolare, dalla più semplice calcolatrice tascabile fino al più potente supercalcolatore. Le ragioni sono due: 1- il sistema binario impiega due soli simboli (0 ed 1), mentre, come è noto, il sistema decimale ne usa dieci. Ciò rende assai più agevole rappresentare i numeri nel calcolatore. Ogni numero (ed ogni lettera o simbolo grafico) può quindi essere rappresentato da una sequenza di O ed 1, un po' come accade con il codice "Morse" che utilizza il punto e la linea, corrispondenti ad un impulso breve o lungo. Nei calcolatori troviamo una serie di minuscoli circuiti, in ciascuno dei quali può passare o non passare corrente : al primo di questi stati del circuito si fa corrispondere la cifra 1, al secondo, la cifra 0. Se, invece del sistema binario, si usasse quello decimale, occorrerebbe distinguere fra dieci valori diversi dell'intensità della corrente per rappresentare le cifre da 0 a 9, il che, come è facile capire, sarebbe tecnicamente assai più complicato.(in realtà è più corretto parlare di "onde di tensione a dente di sega" che noi continueremo però ad indicare genericamente come "impulsi elettrici" ) Nel computer il sistema binario viene realizzato facendo corrispondere alla cifra 1 un impulso di tensione positivo (3-5 v) ed allo 0 un valore pressoché nullo . Le tre sequenze in figura corrispondono ai numeri 255,11,38. 2 - I calcoli, nel sistema binario, sono più semplici che nel sistema decimale. Per esempio, in questo sistema di numerazione, qualsiasi moltiplicazione si riduce al calcolo dei quattro prodotti fondamentali : 0x0=0;0x1=0;1x0=0;1x1=1 Nel sistema decimale, invece, come sapete, le moltiplicazioni "elementari" sono tutte quelle della cosiddetta "tavola pitagorica". Bit, byte, ecc. In un calcolatore quindi tutti i dati (numeri, caratteri alfabetici, istruzioni) sono rappresentati con un codice binario. bit = è una parola inglese, che letteralmente significa "pezzettino"; nel linguaggio dei calcolatori, essa viene usata come contrazione di "binary digit " (="cifra binaria"). Corrisponde quindi ad una informazione (o cifra) binaria elementare (O oppure 1) Le sequenze di bit, usate nei calcolatori, prendono il nome di "byte" e di "parole". byte = è un gruppo di 8 bit. Esistono 256 (= 28) possibili combinazioni di bit per scrivere 1 byte " "parole" = insieme di bytes ; hanno una lunghezza variabile da calcolatore a calcolatore. Nei ''calcolatori personali" più piccoli esse possono essere lunghe un solo byte (cioè 8 bit); nei calcolatori più potenti nanno una lunghezza maggiore ; per esempio:2 byte (16 bit), 4 byte (32 bit) o 8 byte (64 bit). Utilizzando quindi parole più lunghe si possono rappresentare molti più numeri, ad esempio: o con 1 byte(8 bit) esistono 28 = 256 conbinazioni di bit possibili o con 2 byte(16 bit) esistono 216 = 65.536 conbinazioni di bit possibili o con 4 byte(32 bit) esistono 232 = 4.294.967.296 conbinazioni di bit possibili.. o ecc. Come l'elaboratore scrive i numeri I numeri vengono normalmente rappresentati con "parole". Esistono due tipi di rappresentazione diverse per i numeri interi e per i numeri decimali (questi ultimi chiamati spesso "numeri a virgola mobile" perché schematizzati con la tecnica " floating-point", dall'inglese "to float"="fluttuare") . Questo è però un argomento che verrà adeguatamente approfondito nel corso del triennio. Per semplicità, ci limiteremo qui a fare qualche esempio di codifica dei numeri interi, supponendo inoltre che le parole del calcolatore siano di 8 bit. Agli 8 bit della parola si attribuisce il seguente significato: ordine 1° 2° 3° 4° 5° 6° 7° 8° parola ad 8 bit +/- 2^6 2^5 2^4 2^3 2^2 2^1 2^0 binari -128 64 32 16 8 4 2 1 decimali Il valore del primo bit permette di distinguere i numeri interi positivi da quelli negativi; infatti, se esso è 0, il numero è positivo; se è 1, il numero è negativo. Per questa ragione, il primo bit viene spesso chiamato "bit del segno". Qualche esempio ci aiuterà a comprendere meglio come vengano codificati i numeri positivi e negativi: A - Vogliamo rappresentare il numero positivo +22. Nel sistema binario, come è facile verificare, tale numero si scrive 10110 ; esso pertanto verrà codificato negli ultimi cinque bit della parola, come segue: 0 0 0 1 0 1 1 0 Ovvero (da destra) : 0x2^0 + 1x2^1 + 1x2^2 + 0x2^3 +1x2^4 + 0x2^5 + 0x2^6 = 0+2+4+0+16+0+0 =22 con il bit dell'ottavo ordine = 0 ad indicare che si tratta di un numero positivo. B- Vogliamo rappresentare il numero negativo -123. Esso può essere espresso come la somma algebrica del numero negativo -128 e del numero positivo +5 (infatti: -128 + 5 = -123). Il primo di questi numeri (-128) verrà codificato ponendo 1 nel primo bit della parola (in quanto questo bit rappresenta le unità negative dell'ottavo ordine, cioè proprio -128). Il secondo numero (+5), che in binario si scrive 101, verrà codificato negli ultimi tre bit. In definitiva il numero considerato si rappresenterà come : 1 0 0 0 0 1 0 1 Ovvero : 1x2^0 + 0x2^1 + 1x2^2 + 0x2^3 +1x2^4 + 0x2^5 + 0x2^6 - 2^7= 1+0+4+0+0+0+0 - 128 = 123 La grandezza dei numeri rappresentabili in un calcolatore è limitata. Con parole di 8 bit, si possono, per esempio, codificare solo numeri interi compresi tra: -128 1 0 0 0 0 0 0 0 1 1 1 1 1 +127 0 1 1 Tali limiti, naturalmente, si allargano se si usano parole più lunghe : per esempio, con parole di 32 bit si possono codificare numeri di valore fino a circa 4 miliardi. Per i numeri più grandi si possono usare più parole oppure si ricorre alla rappresentazione "a virgola mobile" (nella quale, di un numero si rappresentano solo le cifre più significative e la loro posizione rispetto alla virgola). Con essa, utilizzando parole di 32 bit, si arrivano a codificare numeri fino a circa 1038 . Se poi, nel corso dei calcoli, si ottenesse, come risultato di un'operazione, un numero ancora più grande di questo limite, il calcolatore, non potendo rappresentarlo, segnalerebbe all'utente un errore di "overflow" ( in inglese, "straripamento "). Come l'elaboratore scrive i dati simbolici I dati simbolici (o alfanumerici) sono tutti quei caratteri, come ad esempio lettere dell'alfabeto, segni di interpunzione o anche cifre numeriche , che non vengono utilizzate dal calcolatore per effettuare operazioni matematiche. Un carattere viene, in generale, rappresentato con un byte. Ricordando quanto si è detto in precedenza, possiamo dunque ritenere che il "byte" serva per rappresentare un simbolo alfanumerico mentre la "parola" venga usata per la rappresentazione dei numeri utilizzati per il calcolo vero e proprio . Il codice, oggi impiegato quasi universalmente per rappresentare i caratteri ed i simboli normalmente presenti sulla tastiera di un PC (anche "estesa"), è il codice ASCII (una sigla che sta per "American Standard Code for Information Interchange" = "Codice americano standard per lo scambio di informazioni"). Esso definisce 128 caratteri diversi fra i quali: le lettere dell'alfabeto sia maiuscole che minuscole, le cifre numeriche , i segni di interpunzione ecc.) associandoli ai numeri binari da 0 a +127 (il n° 128 è adeguato ad esprimere tutti i caratteri ed i simboli delle usuali tastiere). Vediamo, per esempio, la rappresentazione di alcuni di questi caratteri (la Tabella completa del codice ASCII esteso, usato nei personal computers, è riportata in allegato). simbolo codice binario numero decimale A 01000001 65 a 01100001 97 B 01000010 68 ; 00111010 59 1 00110001 49 Ciò significa che, ad esempio, se stiamo scrivendo e digitiamo la lettera "A" diamo il via ad 8 impulsi di tensione (di cui il primo ed il settimo al valore massimo e gli altri prossimi allo zero) che partono contemporaneamente ed il computer interpreta disegnando una A sullo schermo e memorizzandola nella sua memoria di lavoro (RAM) La memoria , il linguaggio macchina , il Sistema Operativo e la velocità di elaborazione L'unità centrale del computer non è altro che un complesso circuito, costituito da componenti elettronici e connessioni elettriche. Pertanto, la trasmissione e la elaborazione delle informazioni al suo interno possono avvenire solamente sotto forma di segnali elettrici. Il computer , in definitiva , può essere considerato come una "macchina elettrica" che utilizza un alfabeto costituito da due soli simboli (pensiamo sempre all'esempio del codice Morse), combinando i quali si possono comporre frasi o eseguire calcoli, esattamente come noi facciamo con il nostro alfabeto e la nostra numerazione decimale; il nostro cervello però, essendo molto più evoluto di un computer, è in grado di gestire contemporaneamente molti più simboli oltre a segnali visivi , tattili ecc. . D'altra parte il linguaggio binario risulterebbe per noi estremamente "scomodo" ; basti pensare che una semplicissima parola come "buongiorno " dovrebbe essere scritta con 80 caratteri, anche se sitratta di una serie di 0 ed 1 ; ciò comporterebbe una lentezza insostenibile oltre alla necessità di libri o quaderni di dimensioni spaventose (pensate al povero Dante impegnato nell'impresa di scrivere "La Divina Commedia" o Tolkien alle prese con la trilogia del "Signore degli Anelli" in linguaggio binario!!!! ) Lo stesso discorso vale per la numerazione decimale che per l'uomo risulta di utilizzo molto più agile, anche se dobbiamo ricordarci le tabelline a memoria. Per il calcolatore elettronico il fatto di dover gestire un codice così "elefantiaco" non è un problema perché la velocità con cui riesce a "muovere" gli impulsi elettrici al suo interno è eccezionale. La velocità di elaborazione del microprocessore (il "cuore" della macchina che esegue operazioni e distribuisce gli impulsi elettrici agli altri componenti ) viene normalmente chiamata "velocita di Clock" , espressa in MHz (MegaHertz) , oggi anche in GHz (Gigahertz), e si riferisce alla frequenza con cui gli impulsi elettrici (ovvero i bit) vengono emessi dall'"orologio temporizzatore" interno, cioè teoricamente la velocità massima con cui possono essere gestiti. Chip contenente Milioni di transistors Ad esempio : clock = 800 MHz significa che il microprocessore è in grado di gestire al massimo 800 milioni (!) di "impulsi" al secondo clock = 1,5 GHz significa che il microprocessore è in grado di gestire al massimo 1,5 miliardi (!!!!!) di "impulsi" al secondo La velocità effettiva dei computers in realtà è influenzata anche da altri importanti parametri (velocità del "bus" interno ovvero del canale di collegamento dei vari componenti col microprocessore, presenza ed entità di una memoria" cache" di 2° e/o 3° livello, quantità di memoria RAM presente ecc.), pur se di solito, a livello commerciale, viene sbandierata la sola velocità del microprocessore. Come risulta evidente è necessario utilizzare dispositivi di memoria, per la registrazione permanente dei dati, estremamente capienti, in grado di immagazzinare enormi sequenze di bit . Di solito si tratta di dispositivi di tipo magnetico, ottico o magneto-ottico (dischetti, dischi rigidi , CD ecc.) . I dispositivi magnetici si basano sull'orientamento di microscopiche "schegge" di ossido di ferro magnetizzato (cioè microscopiche calamite)ordinate sulla superficie , cui si fanno corrispondere le due cifre binarie fondamentali; il funzionamento dei CD invece è di tipo ottico, quindi del tutto diverso, ed utilizza un piccolo laser. Ogni cella elementare di memoria potrà allora contenere, dal punto di vista logico, solamente uno zero o un uno, cioè una cifra binaria. Per esprimere quantitativamente la capacità della memoria centrale, ma anche delle memorie ausiliarie, si usano i multipli del bit e soprattutto del byte. l più comuni sono: o o o o 1kilobyte = 1 kb = 1024 bytes 1Megabyte= 1 Mb = 1024 Kb = 1.048.576 bytes 1Gigabyte = 1 Gb = 1024 Mb = 1.073.741.824 bytes 1Terabyte = 1 Tb = 1024 Gb = 1.099.511.627.780 bytes Occorre fare attenzione al fatto che il prefisso "kilo" è qui impropriamente usato con il significato di "x1024", anziché di "x1000" in quanto la numerazione binaria è basata sulle potenze di due ed il numero 1024 è pari a 210. Analogo discorso vale per gli altri prefissi. Nella memoria centrale, dati, comandi e istruzioni si trovano tutti sotto forma binaria (linguaggio binario). Ogni singola parola può allora essere un dato, un comando oppure una istruzione ; con una simile impostazione, un osservatore esterno non può più distinguere tra essi, poiché appunto dati, comandi e istruzioni risultano trasformati in parole binarie. Questa impostazione del computer è detta di Von Neumann, dal nome del matematico americano di origine ungherese (vissuto nella prima metà del nostro secolo) che per primo la teorizzò. Tutto il software, come per esempio i programmi di scrittura, di grafica, di calcolo ed anche i giochi deve essere scritto in linguaggio binario. Le convenzioni con cui si abbinano significati alle cifre binarie si chiamano codici, e sono evidentemente arbitrarie. In ogni caso, anche se il linguaggio binario è intrinseco al computer (tant'è vero che prende il nome di "linguaggio macchina"), esso appare, come abbiamo già detto, scomodo e poco"umano" ; risulta assai noioso predisporre lunghe sequenze di istruzioni tutte composte da zeri e da uno, senza contare che un simile esercizio induce facilmente all'errore. Per ovviare a questi inconvenienti, le Case costruttrici hanno dotato i loro computers di alcuni elementari strumenti, allo scopo appunto di semplificare il lavoro degli utenti, e, in qualche misura, di isolare gli utenti stessi dall'hardware. Il vantaggio ottenuto è duplice: da un lato, infatti, I'operatore può non conoscere i particolari fisici della macchina, e dall'altro non può nuocere alla macchina commettendo errori nella delicata programmazione in linguaggio macchina delle periferiche. I programmi destinati a questo scopo costituiscono il cosiddetto "Sistema Operativo". Ogni macchina destinata ad un utente (esclusi solamente i programmatori delle Case costruttrici) è dotata di un Sistema Operativo. I programmi che formano il Sistema Operativo sono in grado di svolgere tutte le funzioni elementari relative all'unità centrale ed alle periferiche previste per un certo computer. Una loro caratteristica è quella di poter essere facilmente aggiornati con nuove versioni. Le modalità di uso dei Sistemi Operativi variano poi da Sistema a Sistema: normalmente all'accensione della macchina il Sistema Operativo si avvia e si pone automaticamente in uno stato, detto "livello di comando" o CLI (dall'inglese Command Level Interface), in cui è disponibile a ricevere i comandi che vengono immessi direttamente dalla tastiera o, tramite il mouse, utilizzando i menù a tendina e le interfacce grafiche ormai diffuse a livello di massa. I linguaggi di alto livello per la programmazione Il computer non conosce la soluzione di nessun problema, né di fisica, né di altra natura, fino a quando non sia stato opportunamente programmato per tale scopo specifico. Programmare il computer significa, in primo luogo, individuare il metodo di soluzione (o algoritmo ), quindi specificarlo formalmente secondo una tecnica prefissata, ed infine tradurlo nel linguaggio della macchina. Dunque, il programma è solamente una traduzione della soluzione in un particolare linguaggio. La soluzione del problema e la sua formalizzazione (scrittura secondo regole formali) spettano evidentemente all'uomo. Dovremo cioè conoscere già una via per risolvere ogni specifico problema, magari con carta e penna, e tradurre poi la nostra soluzione affinché il computer possa eseguire le operazioni necessarie a raggiungere il risultato prefissato. Uno dei metodi più immediati per scrivere algoritmi consiste nell'utilizzare i cosiddetti diagrammi a blocchi (flow-chart) che ne forniscono una efficace rappresentazione grafica facilmente interpretabile. Qui a lato è riportato il diagramma dell'algoritmo di soluzione di una semplice equazione di 2° grado In conclusione, I'uso dell'elaboratore non ci avvicinerà alla soluzione dei problemi, ma ci fornirà un utile strumento per potenziare le nostre capacità di calcolo e di utilizzazione dei dati derivati dalle nostre esperienze. Per le motivazioni ora esposte, e per quanto si è detto riguardo al linguaggio macchina, è rapidamente entrato nella mentalità comune il concetto di codifica, la quale consiste nell'uso di un codice mnemonico al posto del codice binario. Un linguaggio di questo tipo, detto "linguaggio assemblatore", rimane comunque orientato alla macchina pur risultando maggiormente comprensibile agli operatori umani. E tuttavia realizzabile un approccio diverso. Un linguaggio "più umano", sia pure adattato e semplificato per l'uso da parte del computer, prenderà il nome linguaggio orientato al problema, altrimenti detto linguaggio di alto livello. Un linguaggio di alto livello verrà progettato in modo specifico per essere chiaro all'operatore, cioè per permettergli di scrivere materialmente le istruzioni che si intende impartire al computer utilizzando sigle, abbreviazioni o contrazioni di parole di uso comune, molto più facili da usare e ricordare. Sarà invece demandato ad altri programmi (e cioè ancora alla macchina) il compito di tradurre le istruzioni di tale linguaggio in linguaggio macchina, esonerando I'utente dalla conoscenza di quest'ultimo. I traduttori di linguaggi chiamati interpreti o compilatori , a seconda delle modalità d'uso vengono forniti sotto forma di programmi registrati come files (documenti) su appositi dischi. Ciò rende possibile l'uso, sulla stessa macchina, di diversi linguaggi di programmazione, i cui interpreti o compilatori vanno acquistati presso i rivenditori autorizzati. I linguaggi di alto livello più famosi sono : BASIC "Beginners All purpose Symbolic Instruction Code" ; sviluppato a metà degli anni '60 , semplice sia a livello di apprendimento che di uso, adatto a risolvere problemi scientifici e commerciali Fa parte di una nuova generazione di linguaggi che consentono di programmare non solo scrivendo VISUAL righe di istruzioni in codice, ma in modo più intuitivo, posizionando e disegnando elementi grafici col BASIC mouse; rispetto ai linguaggi tradizionali quelli "visuali" permettono di ottenere risultati esteticamente migliori in tempi più brevi C creato nei primi anni '70, ha la particolarità di poter controllare il calcolatore anche nelle componenti più interne ; attualmente molto utilizzato per lo sviluppo di software tecnici e scientifici Estensione del linguaggio C sviluppata negli anni '80. E' un linguaggio" orientato agli oggetti" (object C++ oriented) che rende possibile un tipo di programmazione concettualmente differente dai precedenti. Attualmente è molto utilizzato nell'automazione industriale. COBOL FORTRAN "Common Business Oriented Language" ; è uno dei primi linguaggi di programmazione , risale agli anni '50 ed è adatto a trattare problemi di tipo commerciale. "FORmula TRANslation" ; indicato nella trattazione di problemi scientifici ed ingegneristici. deve il proprio nome al matematico Blaise Pascal(1623-1662) ; fu sviluppato da Wirth e dalla sua PASCAL equipe presso l'università di Zurigo. Grazie alla sua flessibilità e semplicità trova applicazione nella scuola per scopi didattici DELPHI PROLOG HTML JAVA Sviluppato negli anni '90 può essere considerato l'evoluzione del PASCAL nell'ambito dei "linguaggi visuali" "PROgramming in LOGic" ; utilizza una programmazione logica largamente impiegata nell'ambitto dello studio della cosiddetta "intelligenza artificiale" ; molto complesso. "HyperText Markup Language" ; pur non essendo un vero e proprio linguaggio di programmazione è molto utilizzato per formattare i documenti da immettere in rete. derivato dal C++ , ma concepito appositamente per applicazioni nell'ambito di internet. A livello didattico (scolastico, ma anche universitario) si introduce spesso, per un primo approccio alla programmazione, il TURBO PASCAL le cui ultime versioni risultano integrate, ossia comprendono tutto il necessario per sviluppare i programmi (cioè scriverli, eseguirli, correggerli), permettono una agevole correzione degli errori, che vengono localizzati direttamente sul testo del programma , sono veloci sia nella compilazione, cioè nella traduzione in linguaggio macchina, che nella esecuzione dei programmi e sono dotate di capacità grafiche, più o meno avanzate (a seconda dell'elaboratore di cui si dispone), ma sempre relativamente semplici da usare . In seguito si passa al C++ in quanto tale passaggio risulta piuttosto semplice dal punto di vista logico , nonostante la complessità di tale linguaggio. I.T.C.G. Carlo Cattaneo - SEZIONE ITI - CORSO DI FISICA - prof. Massimo Manvilli