- Grandezze analogiche:
- Sono grandezze continue: hanno infiniti stadi intermedi. Si pensi al movimento dell’ombra dell’asta di una meridiana in contrapposizione alle posizioni finite di un orologio digitale, o alle infinite posizioni che puo’ assumere il potenziometro di un amplificatore (ovviamente un amplificatore analogico!).
Tensione e corrente elettriche sono grandezze analogiche perche’ rappresentabili con funzioni continue.
- Grandezze digitali:
- Sono discrete: assumono un numero finito di stadi intermedi. Ad esempio l’interruttore per accendere una lampada. Quando i valori sono solo due si parla di valori binari, caso che riscontriamo in tutte le tecnologie basate sul silicio come i microprocessori o sui vecchi transistor. Si potrebbe pensare ai componenti di un computer come ad enorme numero di lampadine che possono essere solo accese o spente: l’evoluzione tecnologica passando dai transistor ai microporocessori ha raggiunto un livello di miniaturizzazione dell’ordine dei ~30 nanometri.
- La miniaturizzazione presenta i seguenti vantaggi:
- Minor costo di produzione ( rapporto tra il numero di transistor e superfice del wafer sul quale si stampano i microprocessori)
- Minore distanza tra gli elementi = minore attrito prodotto dal passaggio della corrente = minore dispersione termica = minore calore. Questo si traduce in un minore consumo elettrico, ulteriormente accentuato dal corrispettivo risparmio sulle unita’ di raffreddamento.
In informatica, con digitale ci si riferisce a tutto cio’ che viene rappresentato con numeri o che opera manipolando numeri. Il termine deriva dall’inglese digit, che significa cifra, che a sua volta deriva dal latino digitus, che significa dito.
- Una grandezza, tensione o corrente, si dice analogica quando al variare del tempo puo’ essere rappresentata mediante una funzione continua,
- senza punti di discontinuita’.
Una grandezza si dice digitale quando viene rappresentata mediante un sistema binario costituito da valori 0 ed 1.
Links: http://www.culturadigitale.net/?p=4
In informatica quindi si pone costantemente il problema della rappresentazione delle grandezze analogiche (tipiche del mondo reale) in valori digitali (discreti, e quindi approsimativi) A/D - D/A
I computer lavorano solo con grandezze finite, e si basano su sistemi cosidetti binari, dato che i microprocessori sono transistor miniaturizzati, che a loro volta possono essere visti come insiemi di lampadine che per definizione possono essere solo accese o spente.
Potremmo considerare quindi i due stati come:
Entita’ discrete come numeri interi o caratteri possono essere espressi facilmente con la sola combinazione dei valori 0 e 1, mentre valori complessi riconducibili a numeri reali (pensiamo alle infinite sfumature di un colore o ai suoni) tramite un’approssimazione basata su un numero di bit arbitrario. Ad esempio Il carattere a in formato ASCII si puo’ esprimere con: 01100001 , un’immagine puo’ essere rappresentata da una griglia di punti (pixel) piu’ o meno estesa (risoluzione) con una certa profondita’ di colore espressa in bit,
E cercare di comporre valori complessi (approssimazione di numeri reali tramite un numero di bit arbitrario), con la sola combinazione dei valori 0 e 1, mentre entita’ discrete Il carattere a in formato ASCII si puo’ esprimere con: 01100001 .
Schema sulla trasformazione da binario a decimale:
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 decimali = 0
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 decimali = 1
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 decimali = 2
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 decimali = 3
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 decimali = 4
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 decimali = 5
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 decimali = 6
....
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 decimali = 255
- Si lavora in base 2 (cioe’ si moltiplica sempre per 2), quindi si ha a che fare con sequenze numeriche del tipo:
2 4 8 16 32 64 128 256 512 1024 ...
C’e’ una ripetizione di questi patterns numerici dovuti alle parole usate dai processori. Se l’unita’ minima dell’informazione e’ il bit, l’unita’ minima funzionale e’ il Byte:
con 256 valori possibili possiamo esprimere efficacemente caratteri, colori ed altre informazioni percepibili dai nostri sensi.
In informatica, word_(dall’inglese parola) e’ un termine che identifica la dimensione nativa dei dati usati da un computer. Una word e’ semplicemente un gruppo di bit di una determinata dimensione che sono gestiti come unita’ da un microprocessore. La dimensione (o lunghezza) della word e’ un’importante caratteristica dell’architettura di un computer.
- Links aggiuntivi:
-
Se diciamo che una singola lampadina sia un bit, nel nostro lavoro ci troviamo a gestire miliardi di lampadine. Cerchiamo di definire dei multipli del bit per rendere la quotidianita’ piu’ semplice.
- bit
- Una singola informazione, l’unita’ minima. Si indica con la b minuscola. E’ l’unita’ di misura di riferimento per il trasferimento dei dati su reti: una scheda di rete 10/100 sposta circa 12MB (Bytes) al secondo.
- Byte:
- Un Byte e’ formato da 8 bit. Si indica con la B Maiuscola . La si puo’ considerare l’unita’ funzionale minima nell’informatica, dato che un numero minore di bit difficilmente puo’ rappresentare qualcosa di significativo. E’ l’unita’ di misura di riferimento per lo storaggio dati: le dimensioni dei files e dei supporti di storaggio si esprimono in Bytes.
- Bit
- Byte (B): 8 bit
- Kilobyte (KB): 1024 B
- Megabyte (MB): 1024 KB, 1048576 B
- Gigabyte (GB): 1024 MB, 1048576 KB, 1073741824 B
- Terabyte (TB): 1024 GB, 1048576 MB, 1073741824 KB, 1099511627776 B
Link disponibile: http://it.wikipedia.org/wiki/Byte
- Nota:
- Si tenga conto che i produttori di Hard Disk generalmente indicano la capienza di detti supporti in migliaia di megabyte e non 1024*: quindi per formattare 1 hd di 500 MB si considera 500/1000 (e non 500/1024).
Il termine velocita’ di trasmissione (o di trasferimento) viene solitamente utilizzato a proposito di scambi di informazioni tra computer o comunque dispositivi elettronici. Siccome su questi dispositivi l’informazione viene memorizzata e viaggia in forma digitale, ovvero e’ sostanzialmente una sequenza di bit, e’ naturale che tale velocita’ venga misurata in bit per secondo (e da qui il termine equivalente inglese bitrate).
Ad esempio, se in una linea ADSL abbiamo un trasferimento dati di 4 Mb/s, cioe’ 4.000.000 b/s, avremo (4.000.000/8) B/s equivalenti a 500 kB/s.
Quindi per calcolare la velocita’ di trasferimento di un file le cui dimensioni sono espresse in BYTEs su una rete bisogna dividere per 8
Ad es:
- ADSL 20 Mb (venti mega bit) ha una velocita’ equivalente di circa ~1.8MB (mega Bytes) per secondo
- Rete etherent 10/100 Mb ha una velocita’ di trasferimento di circa ~12MB per secondo.
C’e’ uno scarto tra la velocita’ nominale di trasferimento dati su una rete e l’effettivo trasferimento dei dati tra i due punti. Tipicamente questo e’ dovuto a forme di interferenza del supporto trasmissivo (pensiamo a una rete wifi su onde radio), a imprecisioni dell’hardware di rete, conflitti tra pacchetti, problemi ambientali.
Usiamo l’Hertz come unita’ di misura per le frequenze quali quelle di clock della CPU (es 2.0GHz numero di cicle del processore in un secondo) o di un BUS di per il trasferimento dati (es 33Mhz). Un hertz corrisponde alla distanza tra due creste di un onda.
In teoria, la velocita’ o frequenza di clock e’ il numero di commutazioni (tra i due livelli logici “0” e “1”) che circuiti logici (interni ad un’unita’ di calcolo o di un microprocessore) sono in grado di eseguire in un minuto secondo (preso come unita’di tempo); essa espressa in cicli/secondo (Hertz) ed i suoi multipli.
- Unita’ di misura per le frequenze:
- 1 hertz (simbolo Hz)
- 1 kilohertz (simbolo kHz ) = 10^3 Hz = 1 000 Hz
- 1 megahertz (simbolo MHz ) = 10^6 Hz = 1 000 000 Hz
- 1 gigahertz (simbolo GHz ) = 10^9 Hz = 1 000 000 000 Hz
Ricordiamo che i prefissi ‘kilo’, ‘mega’, ‘giga’, ‘tera’ derivano dal sistema numerico decimale (a base 10) e servono per esprimere le quantita’ in ‘ordini di grandezza’:
- 1 KILO = mille = 10^3
- 1 MEGA = 1 milione = 10^6
- 1 GIGA = 1 miliardo = 10^9
- 1 TERA = mille miliardi = 10^12
La velocita’ o frequenza di clock e’ il numero di commutazioni tra i due livelli logici “0” e “1” che circuiti logici interni ad un’unita’ di calcolo o di un microprocessore sono in grado di eseguire nell’unita’ di tempo di un minuto secondo, ed e’ espressa in cicli al secondo, o hertz, e suoi multipli; normalmente per eseguire un’istruzione o una semplice somma sono necessari piu’ cicli di clock.
In queste moderne CPU essendo la velocita’ di clock cosi’ elevata, viene generata da un minuscolo oscillatore al quarzo posto all’interno della stessa CPU, regolabile tramite il BIOS. Gli informatici esperti sono in grado di aumentare le prestazioni dei computer aumentando la velocita’ di clock nominale del processore, ma si tratta di un’operazione rischiosa che puo’ portare al surriscaldamento della CPU. Vi sono comunque alcuni processori di particolare efficienza e robustezza che sono in grado di supportare bene velocita’ di clock maggiori di quella nominale, senza subire danni. Nel gergo informatico questa operazione viene definita _overclocking, ed e’ utilizzata anche dall’industria per testare l’affidabilita’ delle CPU prodotte.
Tipicamente la velocita’ di clock consigliata per una cpu viene stabilita da un valore medio statistico ottenuto considerando vari esemplari del wafer da cui proviene la cpu, quindi e’ possibile che la nostra CPU sia stabile anche a una velocita’ di clock leggermente superiore a quella indicata. All’opposto, quando un elaboratore non necessita della velocita’ massima della CPU e’ possibile fare il downclock della stessa, in modo da ridurne il consumo e il riscaldamento, a vantaggio di una maggiore stabilita’ del sistema e minore usura del sistema di raffreddamento.
Le CPU piu’ moderne, in particolare quelle montate sui sistemi portatili, possono variare dinamicamente la frequenza di lavoro a seconda del carico di lavoro da sostenere, in modo da ridurre il consumo medio e la rumorosita’ (causata dalle ventole di raffreddamento). Ne e’ un esempio la tecnologia SpeedStep di Intel, ed equivalenti di altri produttori.
Supporti hardware adibiti a contenere le informazioni che trattiamo.
In ambito informatico con il termine storage si identificano i dispositivi hardware, i supporti per la memorizzazione, le infrastrutture ed i software dedicati alla memorizzazione non volatile di grandi quantita’ di informazioni in formato elettronico.
Tipici esempi di supporto di storaggio sono:
- Hard disks
- CD rom
- Unita’ a nastro
- ...
- Supporti fisici per la memorizzazione non volatile: http://it.wikipedia.org/wiki/Storage
- In ambito informatico con il termine STORAGE (STORAGGIO, contenitore che conserva info) si identifica tutto l’hardware
(dipositivi/supporti/infrastrutture) dedicato alla memorizzazione non volatile di grandi quantita’ di informazioni in formato elettronico. Tipici supporti storaggio sono: hard disks, CD-ROM, unita’ a nastro,floppy, chiavette USB.
Con il termine memorizzazione non volatile si intende la possibilita’ di immagazzinare delle informazioni in maniera persistente con una ragionevole probabilita’ che l’informazione rimanga inalterata per un ragionevole lasso di tempo.
- Con il termine memorizzazione NON VOLATILE si intende la possibilita’ di immagazzinare delle informazioni IN MANIERA PERSISTENTE CON UNA RAGIONEVOLE PROBABILITA’ CHE L’INFORMAZIONE RIMANGA INALTERATA PER UN RAGIONEVOLE LASSO DI TEMPO, e per farlo in formato digitale binario e’ necessaria avere un supporto fisico con le seguenti caratteristiche:
-sul supporto possono essere scritte almeno una volta sequenze di bit;
-le sequenze di bit scritte rimangono inalterate a meno di una specifica operazione di modifica;
-le sequenze di bit possono essere lette un numero elevato di volte senza alterarle.
La memoria RAM di un computer e’ la tipica memoria volatile, infatti e’ sufficiente che venga a mancare la corrente elettrica perche’ tutte le informazioni in essa imagazzinate vadano perdute.
Esistono molti supporti fisici che rispondono a queste caratteristiche, ma nella storia dell’informatica solo alcuni si sono affermati e sono tuttora utilizzati:
- Schede perforate (decisamente obsolete);
- Nastri magnetici;
- Dischi magnetici (hard disk e floppy disk);
- Dischi ottici;
Supporti fisici per la memorizzazione non volatile: http://it.wikipedia.org/wiki/Storage
Link: http://it.wikipedia.org/wiki/Hard_disk
Il disco rigido o hard disk (anche chiamato disco fisso) e’ un dispositivo utilizzato per la memorizzazione a lungo termine dei dati in un computer. Il disco rigido e’ il principale supporto di storaggio dei computer per via della sua capienza (~300 GB) e della sua velocita’ di trasferimento dati ( ~25MB per secondo) .
I supporti di storaggio USB o comunque di tipo NAND o SSD sono supporti removibili usati alla stregua dei vecchi floppy disk. La caratteristica peculiare e’ che non hanno parti in movimento e sono quindi meno delicati rispetto ai supporti magnetici con testine in movimento su dischi (come gli hard disks ) o a quelli a nastro (come nei dispositivi a cartucce quali DAT e similari ). Sono meno fragili dei supporti ottici ( ala CD-Rom ) e meno sensibili all’esposizione solare diretta, piu’ compatti fino ad essere tascabili nei tagli piu’ piccoli.
Link: http://it.wikipedia.org/wiki/Chiave_USB
Supporti di Storaggio |
Tipo di dispositivo |
capienza |
lettura |
scrittura |
re-scrittura[1] |
Hard disk |
~300GB |
vero |
vero |
vero |
Floppy disk |
1.44MB |
vero |
dipende [2] |
dipende |
CD ROM |
~640MB |
vero |
falso |
falso |
CD R |
~640MB |
vero |
vero |
falso |
CD RW |
~640MB |
vero |
vero |
vero |
DVD ROM |
~4GB |
vero |
falso |
falso |
Blue Ray |
~35GB |
... |
... |
... |
USB Key |
~1/128GB |
vero |
vero |
vero |
- Nota:
- per DVD e Blue RAY valgono gli stessi ragionamenti di scrittura (R) e re-scrittura (RW) fatti per i CD, solo con tante sigle in piu’.
- Tutti supporti di storaggio hanno vita limitata (aspettativa di vita), influenzata fortemente dalla nostra modalita’ di utilizzo e da fattori/accidenti esterni; sono quindi soggetti ad alcune norme di conservazione specifiche:
- HD: mantiene dati per 2-5 anni
- SUPPORTI MAGNETICI: evitare l’esposizione a rapide variazioni termiche e campi magnetici.
- SUPPORTI OTTICI: tenerlo lontano da fonti calore, non depositarlo senza la custodia dedicata, non sottoporlo a nessun tipo di sollecitazione meccanica (piegarlo, torcerlo ).
Il disco rigido o hard disk (anche chiamato disco fisso) e’ un dispositivo utilizzato per la memorizzazione a lungo termine dei dati in un computer. E’ 1 supporto magnetico con 1 testina che si sposta per leggere dati su uno o piu’ dischi.
Caratteristiche fondamentali: capiente (200-500 MB fino TB) + Trasf.dati (I/O) + riscrivibile (R,W,RW).
E’ quindi il principale supporto di storaggio per via della sua capienza (~300 GB), ma rappresenta un limite (‘collo di bottiglia’) per le prestazioni dell’intero pc perche’ e’ molto lento nel trasferire dati (25-30 MB/s) rispetto alla cpu (< 3 GHZ). Negli ultimi anni le prestazioni della cpu sono raddoppiate circa ogni 18 mesi (Legge di Moore), mentre i dischi rigidi sono rimasti relativamente statici dal punto di vista delle prestazioni nello scambio dati.
Link: http://it.wikipedia.org/wiki/Hard_disk
Cerchiamo di distinguere gli elaboratori per caratteristiche fisiche e funzionali, considerando la loro architettura, ambiente di utilizzo, target di utenza a cui sono rivolti.
Stabiliamo alcuni criteri per distinguere le varie classi:
- dimensioni
- mobilita’
- input | output
- capcita’ di calcolo
- numero di utenti
- completezza dell’interfaccia utente
Sono le macchine piu’ semplici, generalmente poco flessibili, tendono ad essere piu’ sofisticate nel caso delle calcolatrici scientifiche. Queste ultime sono spesso programmabili e hanno display comunque di dimensioni ridotte. L’interfaccia utente e’ quindi molto semplificata.
Device caratterizzati dalle piccole dimensioni e dalla portabilita’ (dimensioni tascabili e autonomia nell’ordine delle decine di ore), possono essere relativamente potenti e flessibili, sopratutto quando vengono equipaggiati con sistemi operativi analoghi a quelli dei personal computers. Le loro prestazioni in alcuni casi sono paragonabili a PC fissi di 4/5 anni precedenti alla loro introduzione sul mercato.
La capacita’ di storaggio e’ in genere molto limitata, ma e’ possibile espanderla con schede di memoria. I modelli piu’ recenti possono appogiiarsi a file-system di rete.
Autonomia: da 4 a 25 ore.
Capacita’ di storaggio: centinaia di MB
Sono sostanzialmente l’anello intermedio tra i palmari e i portatili. Di prezzo intermedio tra i due, hanno in genere una dotazione hardware semplificata e ridotte capacita’ di espansione rispetto a un portatile. Dotati di monitor e tastiere standard possono far girare gli stessi sistemi operativi dei computer fissi e quasi tutti i software con essi compatibili senza dover intervenire sulle interfacce utente.
Autonomia: da 1 a 8 ore.
Capacita’ di storaggio: da 4GB (stato solido) a 80GB (hard disk magnetici)
Versioni portabili o per lo meno trasportabili dei personal computers. Hanno generalmente una tastiera completa ma di dimensioni ridotte, un display di ~ 15 pollici, processori ottimizzati al risparmio energetico, capacita’ di storaggio limitate. L’espandibilita’ e’ molto limitata. I portabili hanno una batteria che ne consente l’utilizzo senza accesso alla rete elettrica fissa per alcune ore. I cosidetti trasportabili hanno un’autonomia senza rete elettrica irrisoria. Visto il progressivo abbassamento dei prezzi stanno raggiungendo i computer fissi per diffusione.
Autonomia: da 2 a 10 ore.
Capacita’ di storaggio: da 250Gb fino a 1TB (Anche in RAID! )
I cosidetti TRASPORTABILI sono sostanzialmente delle work-station che si possono spostare da una lugo all’altro.Data l’autonomi irrisoria della batteria (anche 30/45 minuti) sono praticamente utilizzabili solo connessi alla rete elettrica.
Tipicamente sono piu’ tozzi e pesanti dei portatili veri e propri, ma sono in genere piu’ economici. Ad eccezione dei modelli particolarmente lussuori con display da 17 o piu’ pollici, tipicamente dedicati al multimedia.
Sacrificano le prestazioni per migliorare la portabilita’: molto leggeri, grande autonomia (6 o piu’ ore), display da 12 pollici o inferiore, tipicamente molto costosi.
Sono le normali macchine fisse usati dagli gli utenti per gli usi piu’ disparati. Sono le macchine piu’ comuni, utilizzate per lavori di office automation e intrattenimento, dotate di processori che privilegiano le prestazioni rispetto al consumo (e al costo), e sono generalmente il risultato dell’assemblaggio di parti sfuse (schede madri, processori, periferiche) la cui combinazione puo’ portare a risultati variegati. A differenza delle classi precedentemente descritte sono aggiornabili (posto che ci sia compatibilita’ tra i singoli componenti).
Sono postazioni singole ad alte performance per gli usi piu’ impegnativi (grafica, calcolo). Fino ad alcuni anni fa erano generalmente caratterizzate da architetture multiprocessore, ma oggi si trovano palmari con piu’ di una CPU quindi questo elemento non e’ piu’ determinante. Generalmente il costo e’ di molte migliaia di euro. Questo termine sta diventando pero’ obsoleto, data la difficolta’ di caratterizzare queste macchine, per scopi promozionali / commerciali viene ormai usato per quasi tutti i sistemi in vendita...
Un server e’ un elaboratore che tipicamente eroga servizi a molti utenti (clients) e offre continuita’ del servizio: un server tipicamente resta acceso 24/7 mentre una workstation otto ore al giorno. L’hardware di un server (in particolare le parti in movimento piu’ soggette a usura: alimentatore, ventole, hard disks) dovrebbero quindi essere in grado di funzionare tutto il giorno tutti i giorni, dato che l’interruzione, seppur temporanea, dell’erogazione dei servizi puo’ compromettere la produttivita’ di molti clients.
Componenti come alimentatore o hard disk hanno comunque una vita limitata (anche se di buona qualita’) e in previsione di un loro malfunzionamento e’ possibile implementare sistemi di ridondanza relativamente economici come RAID e alimentazione ridondante. Puo’ essere possibile a seconda del tipo di hardware sostituire al volo (hot swap) i componenti guasti senza essere costretti a spegnere la macchina durante l’intervento di manutenzione.
I requisiti di capacita’ di calcolo e memoria saranno da calcolare in base ai requisiti dei servizi in esecuzione sul server in relazione al numero dei client collegati e effettivo utilizzo di questi. Non e’ raro trovare server con quantitativi di RAM o CPU ben piu’ limitati dei clients che servono quando i servizi sono poco esosi di risorse o le richieste relativamente frequenti e sopratutto senza picchi di utilizzo. Alcuni servizi fondamentali come DNS, routing o firewall possono saturare la banda disponibile del server ben prima delle altre risorse di sistema. Capita ritrovare vecchie work-station in disuso, ormai sostituite da macchine piu’ recenti e prestanti, svolgere decorosamente queste funzioni. Il che’ rappresenta un’interessante opzione di reciclo, per quanto il consumo elettrico sia il piu’ delle volte sproporzionato al lavoro svolto (tenendo come riferimento macchine a bassissiimo costo di derivazione embedded o NAS di produzione recente, ma il discorso si farebbe complicato...) .
Tipicamente i server hanno capacita’ di collegamento (hardware di rete) superiori ai singoli client (in proporzione alle macchine che devono servire), ma dato che spesso client e server condividono la stessa architettura hardware non e’ semplice fare in modo che i server siano in grado di gestire input/output in quantita’ direttamente proporzionale al numero dei clients. Si tenga conto che molti servizi non prevedono un flusso costante di dati ma solo chiamate sporadiche: questo permette di poter pianificare la ampiezza di banda necessaria al server sul valore massimo stimato di connessioni che si potrebbero verificare in un singolo momento piuttosto che sul reale numero di clients.
Spesso i server non hanno periferiche di input dedicate (mouse e tastiera), e preferibilmente montano hardware a basso consumo (anche per limitare di conseguenza l’usura dei sistemi di raffreddamento, e per permettere la concentrazione in singoli armadi o server farm ).
Tipo di macchine “desuete” (a parte i casi in cui non se ne puo’ fare a meno, ma la tendenza iattuale e’ di sostituirle con uno o piu’ server), i mainframe sono fondamentalmente caratterizzate da una superiore capacita’ nella gestione dell’input/output, e nel garantire la continuita’ del servizio (molti mainframe permettono la sostituzione a caldo anche dei processori).
I mainframe o Sistemi Centrali sono computer utilizzati per applicazioni critiche soprattutto da grandi aziende e istituzioni, tipicamente per elaborare con alte prestazioni ed alta affidabilita’ grandi moli di dati, come quelle in gioco nelle transazioni finanziarie, nei censimenti, nelle statistiche di industrie e clienti, nelle applicazioni ERP(Enterprise Resource Planning), etc
soluzione economica per raggiungere alte prestazioni utilizzando piu’ macchine semplici in parallelo per lo stesso scopo. Google ad esempio e’ un cluster costituito da macchine x86 facilmente reperibili sul mercato. L’hardware e’ quindi relativamente economico come gli interventi su di esso, e data la possibilita’ di garantire il funzionamento del cluster a prescindere dal fallimento di un singolo membro si puo’ tollerare hardware meno sofisticato.
I supercomputer sono macchine che raggiungono le massime prestazioni possibili secondo la tecnologia disponibile per singola unita’. La loro architettura e’ altamente specializzata e costruita su misura, sono generalmente molto costosi e poco aggiornabili.
La tendenza attuale e’ di sostituirli con clusters di macchine piu’ semplici da gestire: nelle _classifiche dei “super computer” molti sistema sono clusters.
I computer, come detto in precedenza, registrano e elaborano dei dati. Quest’ultima parte viene svolta con dei programmi che sono sostanzialmente delle sequenze di istruzioni, scritte in un linguaggio comprensibile all’elaboratore, ripetute piu’ volte.
links: http://it.wikipedia.org/wiki/Linguaggio_di_programmazione
Sappiamo che i microporcessori elaborano sequenze binarie formate dai valori 1|0, ma sarebbe decisamente scomodo per gli sviluppatori scrivere i programmi in questo formato. Si preferisce scrivere i software in linguaggi formali piu’ simili alla lingua umana (inglese), che oltre a essere piu’ significativi per gli sviluppatori permettono di scrivere sequenze di comandi che potranno poi essere adattate automaticamente alle varie CPU.
La trasformazione del codice sorgente scritto dal programmatore in un linguaggio di piu’ alto livello rispetto al codice oggetto direttamente eseguibile dal microprocessore viene svolta da un compilatore o da un interprete.
Esistono probabilmente centinaia di linguaggi di programmazione, caratterizzabili in base a:
- Distanza dall’hardware: linguaggi di basso livello come l’assebler sono molto piu’ a contatto con le caratteristiche propie della CPU rispetto a linguaggi di alto livello come Python / Ruby / PHP. La possibilita’ di interagire in modo piu’ stretto con l’hardware puo produrre codice piu’ prestante.
- Semplicita’: linguaggi di alto livello, sopratutto se interpretati, risultano molto piu’ semplici da scrivere e manutenere, abbassando di conseguenza costi e tempi di sviluppo. Vista la attuale capacita’ di calcolo dei microprocessori l’efficena massima del codice tende oggi a non essere prioritaria rispetto al tempo di sviluppo (almeno in molti casi).
http://it.wikipedia.org/wiki/Linguaggio_di_programmazione#Linguaggi_compilati_e_linguaggi_interpretati
In informatica, un compilatore e’ un programma che traduce una serie di istruzioni scritte in un determinato linguaggio di programmazione (codice sorgente) in istruzioni di un altro linguaggio (codice oggetto). Questo processo di traduzione si chiama compilazione.
Dal codice sorgente viene quindi generato un codice oggetto direttamente eseguibile dalla CPU, senza bisogno che al momento dell’esecuzione sia disponibile lo stesso linguaggio o componenti dell’ambiente si sviluppo. Dato che il compilatore ha la possibilita’ di fare un’analisi generale del codice prima di cominciare a convertirlo il codice risultante e’ in genere piu’ ottimizzato rispetto al codice eseguito da un interprete.
La compilazione richiede una certa quantita’ di tempo, ma questo accade solo in fase di compilazione. Una volta creato il codice oggetto questo sara’ immediatamente eseguibile su tutte le macchine compatibili, con un evidente vantaggio di prestazioni rispetto ai linguaggi interpretati che devono procedere alla traduzione a ogni esecuzione del programma.
La necessita’ di dover ricompilare ogni volta che si introduce un cambiamento del codice viene pero’ visto come uno svantaggio rispetto ai linguaggi interpretati, dal punto di vista dello sviluppatore.
Poiche’ in informatica non esitono proiettili_ d’argento (silver bullets, una soluzione per tutti i problemi) abbiamo a disposizione tanti linguaggi diversi, per supportare approcci piu’ o meno strutturati a problematiche piu’ o meno complesse: linguaggi piu’ o meno semplici, piu’ o meno efficenti nelle prestazioni, ottimizzati per fare specifiche compiti, etc. L’idea di base sarebbe di cercare di elaborare soluzioni semplici con gli strumenti piu’ adeguati (i linguaggi di programmazione) alla natura del problema.
Esempio di codice in linguaggio C
#include <stdio.h>
int main()
{
printf("Hello, World!");
return 0;
}
links: http://it.wikipedia.org/wiki/C_(linguaggio)
Analisi codice: http://it.wikipedia.org/wiki/C_(linguaggio)#Hello_world.21
http://it.wikipedia.org/wiki/Interprete_(informatica)
Un linguaggio interpretato e’ un linguaggio di programmazione i cui programmi vengono eseguiti da un interprete. Tale approccio si distingue da quello dei linguaggi compilati: a differenza di un interprete, un compilatore non esegue il programma che riceve in ingresso, ma lo traduce in linguaggio macchina (memorizzando su file il codice oggetto pronto per l’esecuzione diretta da parte del processore).
L’approccio interpretato comporta una minore efficienza a run-time; un programma interpretato, in esecuzione, richiede piu’ memoria ed e’ meno veloce, a causa dello overhead introdotto dall’interprete stesso. Durante l’esecuzione, l’interprete deve infatti analizzare le istruzioni a partire dal livello sintattico, identificare le azioni da eseguire (eventualmente trasformando i nomi simbolici delle variabili coinvolte nei corrispondenti indirizzo di memoria), ed eseguirle; mentre le istruzioni del codice compilato, gia’ in linguaggio macchina, vengono caricate e istantaneamente eseguite dal processore.
Esempio in python:
print "hello world!"
Analisi: scrive hello world a schermo !
link http://it.wikipedia.org/wiki/Macchina_virtuale_Java
La macchina virtuale Java, detta anche Java Virtual Machine o JVM, e’ la macchina virtuale che esegue i programmi in linguaggio Java bytecode, ovvero i prodotti della compilazione dei sorgenti Java. La JVM e’ formalmente una specifica, mantenuta da Sun Microsystems. Qualsiasi sistema che si comporti in modo coerente con tale specifica sara’ quindi da considerarsi una particolare implementazione della JVM. Esistono implementazioni software per praticamente tutti i sistemi operativi moderni, sia gratuite che commerciali. Inoltre, esistono implementazioni speciali per particolari ambienti hardware/software (per esempio telefoni cellulari e palmari), e persino implementazioni hardware.
La disponibilita’ di implementazioni della macchina virtuale Java per diversi ambienti operativi e’ la chiave della portabilita’ di Java, proclamata nello slogan write once, run everywhere (“scrivi una volta, esegui dappertutto”). La macchina virtuale realizza infatti un ambiente di esecuzione omogeneo, che nasconde al software Java (e quindi al programmatore) qualsiasi specificita’ del sistema operativo sottostante:
================================
| Software applicativo Java |
===============================
| Java Virtual Machine |
==========================
| Sistema Operativo |
======================
Sostanzialmente il codice Java viene scritto per essere eseguito da una Java Virtual Machine (JVM), della quale viene rilasciata una versione per ogni diverso sistema operativo. In questo modo modo lo sviluppatore puo’ scrivere un codice che sia indipendente dal sistema in cui verra’ eseguito, dato che la JVM (Java Virtual Machine) dovrebbe comportarsi allo stesso modo su qaulunque sistema venga installato.
Il pubblico dominio non e’ propriamente una licenza, per quanto sia determinante nei rapporti tra l’opera e i fruitori. L’essenza sta proprio nel non sottoprre l’opera a meccanismi di tutela della propieta’ dell’opera. L’opera e’ patrimonio dell’umanita’. Tutte le opere delle quale il copyright e’ scaduto per termini di leggi (a seconda del paese possono volerci fino a un centinaio di anni) diventano di pubblico dominio e quindi liberamente fruibili. Ad es. non dovete chiedere il permesso a nessuno per stampare e diffondere l’Odissea di Omero, posto che non contravveniate ad altre leggi vigenti nel farlo.
WWW, TCP/IP, sqlite sono sotto pubblico domnio
Publico dominio = cessazione di tutti i diritti di eslusiva:
http://it.wikipedia.org/wiki/Pubblico_dominio
http://it.wikipedia.org/wiki/Freeware
Software a gratis. Nel senso che non si paga per utilizzarlo. Gratis come in “birra gratis per tutti”.
L’utente non pu’ modificarlo in alcun modo, a meno che non espressamente previsto.
Il termine freeware indica un software che viene distribuito in modo gratuito.
Il freeware e’ distribuito indifferentemente con o senza codice sorgente, a totale discrezione dell’autore e senza alcun obbligo al riguardo. È sottoposto esplicitamente ad una licenza che ne permette la redistribuzione gratuita. Il software freeware viene concesso in uso senza alcun corrispettivo, ed e’ liberamente duplicabile e distribuibile, con pochissime eccezioni.
Shareware e’ una tipologia di licenza software molto popolare sin dai primi anni Novanta. Vengono distribuiti sotto tale licenza in genere programmi facilmente scaricabili via Internet o contenuti in CD e DVD quasi sempre allegati alle riviste di Informatica in vendita in edicola.
Il software sotto tale licenza puo’ essere liberamente ridistribuito, e puo’ essere utilizzato per un periodo di tempo di prova variabile (generalmente 30 giorni). Scaduti questi termini, per continuare ad utilizzare il software e’ necessario registrarlo presso la casa produttrice, pagandone l’importo. All’avvio dell’applicazione shareware generalmente un Nag Screen informa l’utente su come effettuare la registrazione e sulle condizioni di utilizzo.
http://it.wikipedia.org/wiki/Software_libero
Il Software libero e’ una questione di liberta’, non di prezzo. Per capire il concetto, bisognerebbe pensare alla liberta’ di parola e non alla birra gratis [NdT: il termine free in inglese significa sia gratuito che libero, in italiano il problema non esiste].
Cosa sia, o meglio quanto debba essere libero un software per poter essere definito tecnicamente libero e’ motivo di discussione sia tra sviluppatori che tra i non i non addetti ai lavori, data l’applicazione del concetto di copyleft ad altre discipline diverse dall’informatica.
Generalmente con software libero si intende quel codice rilasciato sotto licenza GPL, per quanto altre licenze vengano generalmente accettate come libere. Stabiliti dei criteri, almeno per quanto riguarda il software, si puo’ procedere a una comparazione tra le varie licenze alternative alla GPL:
Dal sito del progetto Gnu possiamo copiare la seguente definizione:
Definizione di Software Libero
Questa definizione ha lo scopo di chiarire quali sono i requisiti che un certo programma deve soddisfare perche’ lo si possa considerare “software libero”.
Il Software libero e’ una questione di liberta’, non di prezzo. Per capire il concetto, bisognerebbe pensare alla liberta’ di parola e non alla birra gratis [NdT: il termine free in inglese significa sia gratuito che libero, in italiano il problema non esiste].
L’espressione “software libero” si riferisce alla liberta’ dell’utente di eseguire, copiare, distribuire, studiare, cambiare e migliorare il software. Piu’ precisamente, esso si riferisce a quattro tipi di liberta’ per gli utenti del software:
Liberta’ di eseguire il programma, per qualsiasi scopo (liberta’ 0).
Liberta’ di studiare come funziona il programma e adattarlo alle proprie necessita’ (liberta’ 1). L’accesso al codice sorgente ne e’ un prerequisito.
Liberta’ di ridistribuire copie in modo da aiutare il prossimo (liberta’ 2).
Liberta’ di migliorare il programma e distribuirne pubblicamente i miglioramenti, in modo tale che tutta la comunita’ ne tragga beneficio (liberta’ 3). L’accesso al codice sorgente ne e’ un prerequisito.
Un programma e’ software libero se l’utente ha tutte queste liberta’. In particolare, se e’ libero di ridistribuire copie, con o senza modifiche, gratis o addebitando delle spese di distribuzione a chiunque ed ovunque. Essere liberi di fare queste cose significa (tra l’altro) che non bisogna chiedere o pagare nessun permesso.
Bisogna anche avere la liberta’ di fare modifiche e usarle privatamente nel proprio lavoro o divertimento senza doverlo dire a nessuno. Se si pubblicano le proprie modifiche, non si deve essere tenuti a comunicarlo a qualcuno in particolare o in qualche modo particolare.
La liberta’ di usare un programma significa liberta’ per qualsiasi tipo di persona od organizzazione di utilizzarlo su qualsiasi tipo di sistema informatico, per qualsiasi tipo di attivita’ e senza dover successivamente comunicare con lo sviluppatore o con qualche altra entita’ specifica. Quello che conta per questa liberta’ e’ lo scopo dell’utente, non dello sviluppatore; come utenti potete eseguire il programma per i vostri scopi; se lo ridistribuite a qualcun altro, egli e’ libero di eseguirlo per i propri scopi, ma non potete imporgli i vostri scopi.
La liberta’ di ridistribuire copie deve includere le forme binarie o eseguibili del programma e anche il codice sorgente, sia per le versioni modificate che non modificate (distribuire programmi in formato eseguibile e’ comodo per avere sistemi operativi liberi facili da installare). È legittimo anche se non c’e’ alcun modo di produrre una forma binaria o eseguibile (dal momento che alcuni linguaggi non supportano questa caratteristica), ma si deve avere la liberta’ di ridistribuire tali forme nel caso si trovi o si sviluppi un modo per farlo.
Affinche’ le liberta’ di fare modifiche e di pubblicare versioni migliorate abbiano senso, si deve avere accesso al codice sorgente del programma. Percio’, l’accessibilita’ al codice sorgente e’ una condizione necessaria per il software libero.
Un importante modo di modificare un programma e’ quello di includervi funzioni e moduli liberi gia’ esistenti. Se la licenza del programma prevede che non si possano includere moduli gia’ esistenti, ad esempio se richiede che voi possiate aggiungere solo codice di cui detenete il copyright, allora la licenza e’ troppo restrittiva per essere considerata libera.
Queste liberta’ per essere reali devono essere irrevocabili fin tanto che non si fa qualcosa di sbagliato: se lo sviluppatore del software ha il potere di revocare la licenza anche senza che l’utente sia causa di tale revoca, il software non e’ libero.
Tuttavia, certi tipi di regole sul come distribuire il software libero sono accettabili quando non entrano in conflitto con le liberta’ principali. Per esempio, il copyleft, noto anche impropriamente come “permesso d’autore”, e’ (detto poche parole) la regola per cui, quando il programma e’ ridistribuito, non e’ possibile aggiungere restrizioni per negare ad altre persone le liberta’ principali. Questa regola non entra in conflitto con le liberta’ principali, anzi le protegge.
Indipendentemente dal fatto che si siano ottenute copie di software GNU a pagamento o gratuitamente, si ha sempre la liberta’ di copiare e cambiare il software, e anche di venderne copie.
Software libero non vuol dire non-commerciale. Un programma libero deve essere disponibile per uso commerciale, sviluppo commerciale e distribuzione commerciale. Lo sviluppo commerciale di software libero non e’ piu’ inusuale: questo software commerciale libero e’ molto importante.
Il copyleft e’ un metodo generico per rendere un programma libero ed imporre che tutte le modifiche e versioni estese del programma siano anch’esse software libero.
L’espressione inglese copyleft, lett. “(diritto di) copiatura (esclusiva) abbandonato” , e’ gioco di parole su copyright (lett. “diritto (esclusivo) di copiatura”), in cui la seconda parola del composto, “right” e’ scambiata con “left” individua un modello alternativo di gestione dei diritti d’autore basato su un sistema di licenze attraverso le quali l’autore (in quanto detentore originario dei diritti sull’opera) indica ai fruitori dell’opera che essa puo’ essere utilizzata, diffusa e spesso anche modificata liberamente, pur nel rispetto di alcune condizioni essenziali. Nella versione pura e originaria del copyleft (cioe’ quella riferita all’ambito informatico) la condizione principale obbliga i fruitori dell’opera a rilasciare eventuali modifiche apportate all’opera a loro volta sotto lo stesso regime giuridico (e generalmente sotto la stessa licenza). In questo modo, il regime di copyleft e tutto l’insieme di liberta’ da esso derivanti sono sempre garantiti.
Il modo piu’ semplice per rendere un programma, o altro lavoro, libero e’ dichiararlo di dominio pubblico, privo di copyright. [NdT: in Italia questo concetto a rigore non esiste, perche’ l’autore non puo’ rinunciare alla paternita’ dell’opera; effetti simili si possono ottenere con l’uso di una licenza permissiva, come la licenza di X del MIT]. Cio’ permette a chiunque di condividere il programma e i suoi miglioramenti. Tuttavia permette anche a chi non vuol cooperare di convertire il programma in software proprietario. Costoro possono infatti apportare modifiche, che siano significative o meno, e distribuire il risultato come prodotto proprietario. Chi riceve il programma nella forma modificata non ha la liberta’ data dall’autore originario; l’intermediario l’avra’ rimossa.
Segue su: http://www.gnu.org/copyleft/copyleft.it.html
Link alla Licenza GPL (e DSFG):
Non dci dovrebbe essere nessuna differenza tecnica tra “free software”
e “open source”.
Le licenze BSD sono una famiglia di licenze permissive per software. Molte sono considerate libere ed open source. Il loro nome deriva dal fatto che la licenza BSD originale (detta anche licenza BSD con 4 clausole) fu usata originariamente per distribuire il sistema operativo Unix Berkeley Software Distribution (BSD), una revisione libera di UNIX sviluppata presso l’Universita’ di Berkeley.
- Links:
-
In ambito informatico, con Licenza Apache (ingl:Apache License) si intende una precisa licenza, che similmente alla licenza BSD, permette di utilizzare il codice dentro progetti non open source e senza obbligo di rilascio dei sorgenti modificati.
La Licenza Apache venne scritta dalla Apache Software Foundation (ASF) per il piu’ usato server web, Apache. È una licenza per software libero, ma non compatibile con la GNU GPL.
Questa licenza assume particolare inportanza in quanto usata per molti altri software rilasciati dalla Apache Software Foundation (ASF) e altri progetti,
Esistono le versioni 1.0, 1.1 e 2.0.