Un sistema di elaborazione è costituito dai componenti fisici (o hardware), e da un insieme di istruzioni o software.
Il software è un insieme di programmi per il computer che governa il modo di operare di un sistema di elaborazione.
Un programma è un insieme di istruzioni che possono essere "maneggiate" da un computer ed elaborate.
Si puo' dire che senza un appropriato software un computer non potrebbe fare nulla.
Possiamo classificare tutto il software in tre distinte categorie:
- Sistema Operativo S.O. (Operating System OS)
- Linguaggi di programmazione
- Applicativi
Sistema Operativo
Il Sistema Operativo è l'insieme di quei programmi che permettano all'utente di interagire con il computer, che permettono di gestire le periferiche e le risorse hardware e di eseguire gli strumenti (tools) per i linguaggi di programmazione e i programmi applicativi. Deve servire inoltre a facilitare l'interazione degli utenti con il sistema di elaborazione.
La gestione delle risorse quali memoria, CPU, stampanti ed altre risorse di rete, dischi ed altre periferiche è normalemente compito della gestione del sistema operativo.
Esistono diversi sistemi operativi.
Oggi i più comuni sono:
- Microsoft Windows (Seven, "8.1", dieci)
- Apple MAC OS X
- Linux, con tutte le sue distribuzioni oggi più comuni (Ubuntu, Slackware, Debian, Red Hat, Gentoo, Mandriva)
Interfaccia utente
L'interfaccia utente è il mezzo con cui un utente di un sistema di elaborazione puo' comunicare i comandi al PC, decidere quali programmi eseguire e con quali dati, e far funzionare le periferiche.
I primi computer avevano solo una interfaccia testuale (chiamata Shell). La Shell o terminale era l'unico mezzo per interagire attraverso dei comandi direttamente inseriti tramite la tastiera. Ancora oggi la Shell è il mezzo più potente e più veloce per far eseguire comandi, soprattutto in ambiente UNIX / Linux. Era l'interfaccia a riga di comando.
Lo svantaggio era che questi comandi richiedevano una appropriata sintassi, altrimenti il computer non li eseguiva.
Nel 1973 venne sviluppato il primo computer graficamente controllato.
Ma il primo vero computer con una GUI (graphical user interface, interfaccia utente grafica) fu il Macintosh, nel 1984.
Quello che oggi è di uso comune, ossia la disponibilità di un mouse, di icone, di cartelle, l'uso del doppio click, del singolo click, del tasto destro del mouse, negli anni '80 era una indubbia novità.
Gestione delle risorse
Tutte le risorse (microprocessore, memoria, periferiche, rete) vengono controllate e gestite dal Sistema Operativo, in maniera molto spesso trasparente. L'utente finale non se ne accorge, o comunque la gestione deve essere fatta senza interazione con l'utente, in maniera automatica o batch.
In altri casi ci sono programmi speciali di utilità (utilities) che se eseguiti permettono un opportuno controllo, manutenzione di queste risorse.
Si pensi ad esempio ad una utility di deframmentazione del disco.
Gestione del microprocessore
E' compito del S.O. (sistema operativo) stabilire come deve essere gestito il microprocessore.
La maggior parte dei S.O. devono gestire l'esecuzione di più applicazioni contemporaneamente (multitasking), spesso eseguite da più utenti in simultanea (multi-user).
Se il microprocessore è uno solo il S.O. deve controllare il quanto di tempo che ogni programma deve avere in quel momento, ossia deve lavorare in time-sharing. Solitamente viene dedicato un tempo di pochi microsecondi per ciascuna applicazione, in modo da far sembrare ai vari utenti che tutte le applicazioni sono 'running'.
Potrebbe capitare che in un S.O. mal progettato il sistema si blocca ('freezing') perché una applicazione prende il controllo di una risorsa e non la rilascia in attesa di un evento che non si verifica.
Nel multitasking di tipo preventivo (preemptive multitasking) il sistema operativo può interrompere una applicazione e passare il controllo ad un'altra mettendo in pratica il principio SRTF (shortest remaining time first, per prima quella che si concluderà presumibilmente prima delle altre).
Gestione della memoria
E' compito del S.O la gestione di una risorsa davvero importante quale è la memoria.
Il S.O. deve occuparsi di stabilire quale parte della memoria puo' essere utilizzata da una applicazione.
Deve monitorare quando la memoria puo' essere occupata e quando puo' essere rilasciata per altre applicazioni.
Visto che attualmente praticamente tutti i S.O. sono multitasking, il S.O. deve far utilizzare la memoria con efficienza, visto che si tratta di una risorsa limitata.
A volte i S.O. utilizzano la cosidetta memoria virtuale, ossia un metodo per occupare una parte del disco rigido con i dati (istruzioni ed dati veri e propri) che in realtà dovrebbero essere nella memoria RAM.
Solitamente il file presente sul disco che implementa la memoria virtuale è logicamente diviso in "pagine", così come la memoria RAM.
E' compito del S.O. gestire la lettura e la scrittura di queste pagine tra la RAM e il disco.
Questo processo è chiamato Swap.
Lo svantaggio nell'utilizzo del processo di Swapping è che la memoria virtuale è molto più lenta di quella effettiva in RAM.
Gestione delle Periferiche
E' compito del S.O controllare come devono comportarsi ed operare le varie periferiche presenti od eventualmente aggiunte in seguito come monitor, stampanti, tastiera, mouse, pendrive, modem, scanner ecc.
Solitamente esistono dei "Driver" ossia dei programmi appositamente scritti per quel sistema operativo per il controllo della specifica periferica.
Se una periferica non funziona è altamente probabile che non sia installato correttamente il giusto device driver.
Gestione della Rete
Solitamente i computer sono connessi in rete.
Il S.O. deve controllare l'accesso in rete e lo scambio corretto di informazioni tra più computer connessi in rete e tra essi e le rimanenti periferiche (es. router, oppure stampante di rete).
Deve permettere anche un controllo accurato degli accessi.
Deve permettere la condivisione in rete delle informazioni.
Deve permettere di gestire tutto ciò in una WAN (Wide Area Network), come ad esempio Internet, agendo con opportuna accuratezza e sicurezza contro eventuali accessi di malintenzionati.
Deve far lavorare più persone di una LAN (Local Area Network), come ad esempio una Intranet aziendale).
Deve gestire i protocolli di rete (ossia le regole di comunicazione) tra dispositivi diversi anche nel caso "senza fili" Wi-Fi, ossia la famiglia di protocolli IEEE 802.11x, oppure ad infrarosso oppure Bluetooth.
In un ambiente di sviluppo multimediale (es. una azienda) le reti sono particolarmente importanti perché ogni risorsa è coinvolta e partecipe solo per una parte del processo.
Utility
Normalmente i S.O. dispongono di programmi di utilità ad esempio per il controllo dei dati sul disco, per la deframmentazione, per partizionare un disco in più volumi, per il backup, dispone di screensaver, di utility per la visualizzazione di immagini e il controllo audio e della web-cam.
Gestione di dischi
Normalmente un disco deve essere formattato, e cio' avviene in tre fasi:
- definire gli indirizzamenti di tracce (A) e settori (B) -> sono gli indirizzi fisici dove il S.O. memorizza i dati che poi, successivamente, devono essere letti
- definire le unità logiche chiamate cluster (D) -> sono le più piccole unità che possono contenere dei dati. Non è possibile che un cluster contenga dati provenienti da file differenti.
- definire il file system del disco -> è come un modo di indicizzare tutti i nomi di file e delle cartelle e i corrispondenti cluster dove questi file contengono le informazioni
Per ridurre il carico di lavoro della lettura / scrittura di un hard-disk, il filesystem non alloca i settori individualmente, ma piuttosto gruppi di settori contigui, chiamati cluster.
http://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Disk-structure.svg/300px-Disk-structure.svg.png
Legenda
Struttura della superficie di un piatto:
A) Traccia
B) Settore
C) Settore di una traccia
D) Cluster, insieme di settori contigui
Per fare un esempio nel caso di settori a 512 byte, un cluster di 512 byte contiene un solo settore, mentre un cluster di 4KB contiene 8 settori.
S.O. differenti usano file system differenti. I più comuni sono FAT32, NTFS su Windows; HFS+ su Apple OS X; oppure ext3 e ext4 in ambiente Linux.
Gestione dei file
Si possono definire i file come dei contenitori di programmi e dati. Spesso le applicazioni sono costituite da un insieme di file.
Ogni file ha un nome univoco all'interno di una cartella. Ogni file ha delle proprietà che lo caratterizzano. Il file è solitamente caratterizzato da un nome (prefisso) ed una estensione.
Ad esempio il nome di file Gatto.JPG identifica una immagine di tipo JPEG (.JPG) e, probabilmente, una foto di un gatto. Ogni sistema operativo puo' seguire appropriate convenzione per indicare la tipologia di file (se testuale ASCII o binario), la sua lunghezza massima, se deve essere o no considerato differente se maiuscolo o minuscolo.
Tipi di file più comuni:
.jpg | Immagine JPEG |
.gif | Immagine GIF |
.bmp | Immagine Bitmap |
.txt | Documento di Testo |
.exe | Eseguibile in Windows |
Documento di Adobe Acrobat Reader |
All'interno di un file system, i file vengono memorizzati all'interno di cartelle, chiamate anche directory o folder.
Pertanto un file è individuato a partire dalla radice della struttura ad albero del file system del disco, da un path e dal suo nome. Il path è l'insieme delle cartelle che occorre aprire per arrivare al file partendo dalla radice.
Tutti i sistemi operativi contengono apposite utility e programmi per la gestione delle directory.
Linguaggi di programmazione
La seconda categoria di software è costituita dai linguaggi di programmazione.
Un linguaggio di programmazione è definito come un sistema di sintassi (la cosidetta "grammatica" del linguaggio) e da una semantica (ossia il "vocabolario" della parole chiave previste nel linguaggio, con il loro significato).
I linguaggi di programmazione sono stati ideati per scrivere programmi per il computer, ossia per scrivere sistemi operativi, compilatori, interpreti, traduttori ed applicativi.
Non tutti i linguaggi che sono stati ideati fin dall'inizio dell'informatica hanno la stessa potenzialità, né sono stati pensati per lo stesso uso, né hanno la stessa difficoltà di apprendimento.
Ad esempio il BASIC ha permesso di comprendere a molti i "fondamenti" della programmazione ed è stato per molti semplice da imparare.
Il linguaggio C invece è più difficile da apprendere, ma è davvero potente ed è il linguaggio di gran lunga più usato per creare Sistemi Operativi.
Ci sono stati linguaggi molto usati in ambito gestionale (COBOL), in ambito scientifico-matematico (FORTRAN), o per applicativi multimediali (ActionScript di Macromedia Flash).
Tradizionalmente i linguaggi di programmazione si dividono in linguaggi di programmazione di basso e di alto livello.
I linguaggi di programmazione di basso livello sono linguaggi riferiti ad uno specifico processore, e la loro "scrittura" richiede che il programmatore conosca i dettagli tecnici e le specifiche hardware del sistema di elaborazione e della CPU dove tale programma dovrà essere eseguito.
Negli anni '50, quando c'era un numero limitato di sistemi hardware differenti, i programmatori scrivevano i programmi direttamente in linguaggio macchina, con una lunga sequenza di '0' e di '1', nelle istruzioni/comandi direttamente eseguibili dal processore. Programmare in linguaggio macchina puo' essere un processo estremamente noioso. Per evitare cio' si passo' a scrivere i programmi con delle sequenze di lettere mnemoniche in sostituzione delle stringhe in binario. Si passo' cioè a scrivere in linguaggio assembler.
Era a quel punto necessario un traduttore, ossia un programma Assembler che convertiva le abbreviazioni scritte in linguaggio assembler in un programma scritto in binario adatto ad essere 'processato' dal computer.
Il codice scritto in Assembler era tuttavia 'machine-dependent' ossia utilizzabile senza modifiche solo nell'archietettura hardware per la quale era stato scritto.
Oggigiorno la programmazione a basso livello è quasi sempre evitata, ad eccezione dei casi in cui la particolare esigenza di velocità nel tempo di risposta in esecuzione non ne obbliga ancora all'uso.
I linguaggi di programmazione di alto livello non sono legati, solitamente, ad un hardware specifico, pertanto sono molto più flessibili e semplici da utilizzare con efficienza dal programmatore.
Solitamente tutti i linguaggi di programmazione che si usano oggi sono costituiti da un insieme di parole in inglese (istruzioni), da un insieme di operatori che complessivamente permettono di programmare con un livello di "astrazione" che ci permette di farlo disinteressandosi dell'architettura hardware sottostante.
In questo modo il programmatore si puo' concentrare sul programma piuttosto che sulla sua implementazione (ossia traduzione) in linguaggio macchina.
Inoltre lo stesso programma puo' - sostanzialmente - funzionare su un numero ampio di architetture hardware.
Esempi di linguaggi di programmazione di alto livello: Linguaggio C; Java; Pascal, C#.
Lo svantaggio di questo modo di procedere è che il programma e le sue istruzioni devono essere convertite in linguaggio macchina prima di essere eseguiti.
Esistono due modi principali per farlo: l'uso di un interprete o di un compilatore.
Un interprete converte una istruzione alla volta scritta in un linguaggio ad alto livello e la esegue procedendo poi ad intepretare ed ad eseguire la linea successiva, e così via.
Lo svantaggio di questa modalità è che se il programma viene eseguito ogni volta viene re-interpretato, e cio' fa' perdere tempo.
Un compilatore è pensato per convertire l'intero programma o insieme di programmi di un progetto software in un codice macchina, in modo da produrre un eseguibile che gira in un computer specifico.
Il file eseguibile compilato è normalmente più veloce nell'essere eseguito, ma il codice eseguibile è specifico per l'architettura hardware e non puo' essere eseguito su un'altra.
Oggigiorno esistono due modalità di programmazione più "famose" e più utilizzate: i linguaggi di programmazione orientati agli oggetti (come C+ + e Java), in cui si definiscono gli oggetti, i loro dati e i loro metodi e la programmazione visuale che permettono al programmatore di usare una interfaccia grafica per velocizzare il tempo di scrittura dei programmi, specie quelli che hanno da gestire finestre, icone, bottoni ed una generica interfaccia utente.
Microsoft .NET è un esempio di programmazione visuale orientata agli oggetti, così come MONO nell'ambiente LINUX.
Applicativi
In generale, un software applicativo, è un software che è stato progettato per svolgere un compito specifico. L'insieme di questi programmi, se usati in combinazione con un Sistema Operativo permettono di rendere un sistema di elaborazione utile.
Esempi di applicativi sono:
- database (banche dati)
- presentazioni
- gestione di progetti
- desktop publishing
Esistono applicazioni specifiche che possone essere usate per creare tipologie di file specifiche (testi, grafici, immagini, suono, video, animazioni) che sono parte di un prodotto multimediale; oppure applicazioni di authoring che contengono strumenti software che permettono di integrare i componenti e di fornire una interfaccia utente.
Testi
Gli sviluppatori di prodotti multimediali possono usare diversi tipi di software applicativi per creare ed editare dei testi. I più comuni sono i cosidetti "word processors", come OpenOffice.org Writer e Microsoft Word. La forza di questi programmi è la possibilità di 'formattare' il testo, scegliendo i differenti 'font', gli 'stili', controllare l'ortografia, cercare e sostiruire parole e frasi, importare ed esportare testo in un grande numero di formati.
Poi ci sono gli "Editor di testi", come il Notepad (o Blocco Note) di Windows, come UltraEdit, come EditPlus, permettono di creare file di testo puro, in formato ASCII, in modo che i file prodotti sono pressoché compatibili con ogni forma di piattaforma e di applicativo. Lo svantaggio degli Editor di Testi è che essi non contengono gli strumenti di formattazione avanzata che sono tipici dei word processors. Gli editor di testo sono molto utili per i programmatori che vogliono scrivere i programmi in un qualsiasi linguaggio.
Grafica
I programmi di grafica permettono di creare immagini bidimensionali (2-D) o tridimensionali (3-D), di pittura o di disegno. Gli sviluppatori di prodotti multimediali utilizzano diverse applicazioni per la grafica.
Ognuna di queste applicazioni è specializzata per un tipo particolare di immagine che si vuole creare.
I programmi di "painting" contendogno un insieme di strumenti che permettono di creare oggetti grafici così come di avere strumenti per modificare foto digitali o immagini scansionate. Hanno strumenti di filtraggio, ridimensionamento, controllo della luminosità, rotazione e per l'applicazione di effetti speciali, uso di livelli. Ad esempio si puo' usare Adobe Photoshop, Jasc Paint Shop Pro oppure GIMP (gratuito ed Open Source).
I programmi di disegno (drawing) contengono strumenti per disegnare contorni, forme, come rettangoli, oveli, curve di Bezier, poligoni. Queste forme possono essere poi raggruppate, riempite, ridimensionate. Applicazioni famose sono Adobe Illustrator oppure Corel Draw.
Molti progetti multimediali richiedono sequenze animate, applicazioni per giochi ed altre immagini tridimensionali.
Esistono 4 fasi per una creazione multimediale 3-D:
- modellazione, in cui l'artista grafico crea i contorni dell'oggetto
- definizione della superficie: in cui si applica un colore e una eventuale "texture" (texture mapping in computer grafica è un metodo per aggiungere dettaglio, una immagine di superficie o un colore ad immagini generate al computer o ad un modello 3D)
- composizione della scena, in cui gli oggetti sono arrangiati, la luce è specificata, sono aggiunti effetti speciali, il background
- rendering, è il processo che alla fine crea l'immagine tridimensionale
Il rendering è un processo che consuma molto tempo perchè il software deve essere in grado di calcolare come l'immagine deve apparire in base alla posizione dell'oggetto, materiale superficiale, luce ed altre opzioni a seconda del punto di vista.
La modifica delle immagini e la loro creazione è la parte davvero importante dello sviluppo di prodotti multimediali e gli artisti grafici devono selezionare accuratamente quale applicativo di disegno, di pittura o di grafica tridimensionale usare a seconda di quelle che sono le richieste specifiche del progetto. Esistono poi, suite grafiche che uniscono tutti questi applicativi in un'unica interfaccia.
Suono
Esistono due tipi principali di applicazioni sonore per lo sviluppo del multimedia: campionate (sampled) e sintetizzate (synthesized).
I suoni campionati vengono catturati tramite un microfono o altra sorgente analogica oppure da altre fonti "digitali" quali ad esempio cd o dvd. Questi software dispongono di diversi controlli per il formato del suono registrato che permettono di modificarlo in molti modi come ad esempio la cancellazione di parti di esso, la combinazione di diversi segmenti, il controllo del volume, l'aggiunta di effetti speciali quali eco e dissolvenze.
Le applicazioni per il suono sintetizzato usano, invece, comandi digitali per generare suoni. Tali comandi possono essere catturati da strumenti MIDI come tastiera elettronica oppure creati attraverso programmi "sequencer"; in ogni caso lo sviluppatore deve conoscere le notazioni musicali e avere talento musicale per poter generare files sonori di alta qualità.
Esempi di applicazioni sonore sono SourceForge Audacity (software libero) e Apple Garage Band.
Video
Le applicazioni video forniscono solitamente un ambiente per combinare i cosidetti "clips" ossia porzioni di filmati per sincronizzare i clip a tracce audio e per aggiungere effeti speciali e alla fine salvare il lavoro come un video digitale. Oggigiorno il grande uso di videocamere digitali e lo sviluppo di microcomputer sempre più potenti ne permette la produzione alla maggior parte degli sviluppatori.
Tali applicazioni sono basate su paradigma di un progetto che può permettere di assemblare clip, immagini, animazioni, suoni e files video digitali.
Quando il progetto video è completo deve essere poi esportato in un particolare formato compresso che ne permette l'uso su Internet o un un dvd.
I formati più comuni sono: .MOV per quick time, .AVI per Window, .RM per real video, .MPEG per i DVD.
Le applicazioni principali per gestire i video sono: ADOBE PREMIERE, APPLE FINAL CUT PRO.
Animazioni
I software per le animazioni vengono usati per creare e manipolare sequenze animate. L'animazione è la tecnica che usa una serie di immagini fisse mostrare rapidamente in sequenza per produrre l'apparenza del movimento. I software per l'animazione hanno molto semplificato il lavoro tradizionale dei disegnatori di animazioni. Ora gli oggetti vengono disegnati o importati e tramite il software si creano automaticamente una serie di immagini fisse; si crea, poi, una sequenza in movimento che dà l'illusione del movimento in cui ciascun frammento rappresenta un singolo istante della sequenza animata.
Esempi di applicazioni per la gestione delle animazioni sono MACROMEDIA DIRECTOR e MACROMEDIA FLASH.
Utilities
Si dispone di diversi programmi di utilità che effettuano dei compiti ben definiti come ad esempio programmi che permettono di catalogare e gestire le immagini, programmi per la gestione dei font e per la conversione dei formati, programmi per il video encoding o codifica, programmi per la compressione che permette di ridurre le dimensioni dei files senza pregiudicare troppo la qualità.
Software per l'Authoring
Sono programmi specificatamente progettati per la creazione di prodotti multimediali. Vengono utilizzati per assemblare elementi singoli, per sincronizzarne il contenuto, per progettare l'interfaccia utente e per gestire l'interattività con l'utente. Esistono programmi che servono soprattutto per gestire chioschi multimediali di informazione i quali non richiedono una ben definita sincronizzazione tra i singoli elementi.
Altri permettono di gestirne la sequenza con un ben definito "timeline" come se fosse un film; altri ancora permettono di utilizzare facilmente delle icone per creare delle guide avanzate, dimostratori di prodotti e simulatori.