Introduzione al Calcolatore

I computer (termine tradotto talvolta in italiano con le parole calcolatore o elaboratore elettronico) pervadono ormai ogni nostra attività lavorativa, sociale e ludica: si stima che il 10% della popolazione mondiale usi il computer per accedere a Internet e che in Italia 10-16 milioni di persone utilizzino Internet quotidianamente sul lavoro, a scuola o a casa.

La loro diffusione attuale è il frutto di una costante evoluzione della tecnologia (da valvole termoioniche, a transistor, a circuiti integrati) che ne ha reso possibile l'utilizzo da parte di un pubblico sempre più ampio e non necessariamente specializzato.

  • Mainframe: I primi computer occupavano stanze intere ed erano costosissimi.

  • Minicomputer: Negli anni '60, in particolare da Digital e da HP, vennero introdotti elaboratori di dimensioni paragonabili ad un armadio e dal costo ridotto (accessibile a piccole aziende e singoli dipartimenti di ricerca).

  • Microcomputer: All'inizio degli anni '70 l'introduzione del primo microprocessore, l'Intel 4004, rese disponibili computer alla portata di una singola persona (destinati soprattutto agli esperti, perché di difficile utilizzo).

  • Home computer: Gli home computer (anni '80) erano macchine a costo contenuto e di utilizzo prevalentemente domestico (come il Commodore 64 e lo ZX Spectrum). Basati su processori a 8 bit, sfruttavano cassette audio come memorie di massa.

  • Personal computer: I Personal Computer si distinguono da un Home Computer per le maggiori risorse hardware e software a disposizione. Dato che il termine nacque con la diffusione dei computer PC IBM, oggi spesso si intende un computer da essi derivato, ma il termine andrebbe riferito a macchine con sistemi operativi e tipi di microprocessori del tutto diversi, come quelli della APPLE.

Malgrado le differenze, tutti i computer hanno in comune almeno le seguenti caratteristiche:
(... e gli utenti)
Programmi applicativi
es. Word, Netscape
Il Sistema Operativo (S.O.)
es. WindowsXP, Linux
La parte Hardware (Hw)
es. processore, memoria



Architettura del calcolatore

  1. Video (Display)
  2. Scheda madre (Motherboard)
  3. CPU (Microprocessore)
  4. RAM (Memoria Primaria)
  5. Schede di espansione (grafica, rete, etc.)
  6. Alimentatore
  7. CD/DVD Drive
  8. HD (Memoria secondaria)
  9. Tastiera
  10. Mouse

Le componenti hardware interagiscono scambiandosi segnali elettrici. Come può un essere umano riuscire a controllarne il funzionamento in maniera agevole?
Grazie ai Sistemi Operativi!




Il Sistema Operativo

Un S.O. è un particolare programma che agisce da intermediario fra utente e hardware di un computer
  • Il S.O. è responsabile del controllo e gestione dell'hardware che costituisce un computer e quindi di tutte le operazioni di base
  • Il S.O. dovrebbe permettere di utilizzare le componenti hardware nel modo più efficiente e efficace possibile
  • Il suo scopo è di fornire un ambiente nel quale gli utenti siano in grado di eseguire applicazioni
  • Il S.O. gestisce l'accesso degli utenti al sistema e tutti i processi in esecuzione
  • I S.O. moderni devono rendere possibile e conveniente l'utilizzo di un computer anche a utenti non esperti, facilitando l'interazione attraverso le periferiche disponibili
Esempi di Sistemi Operativi sono:
MS DOS, Windows (95, 98, 2000, NT, XP, Vista), Mac OS, OS/2, UNIX, Linux

Ognuno di questi S.O. fornisce all'utente un modo diverso di lavorare, di interagire con le componenti hardware, di realizzare i propri lavori, hobby e progetti scientifici e artistici




Da UNIX...

  • Sviluppato alla fine degli anni sessanta presso i laboratori Bell (Bell Labs) della AT&T introducendo una serie di principi tuttora ritenuti universalmente validi:
    • ogni funzionalità offerta deve fare una sola cosa e bene
    • indipendenza dall'hardware
    • favorire l'uso dell'output di un programma come input di un altro
    • S.O. visto anche come ambiente di supporto alla programmazione

  • Multiutente e multitasking: più utenti possono collegarsi al sistema e eseguire task/processi contemporaneamente (con un meccanismo detto timesharing)

  • UNIX è il primo S.O. a essere (ri)scritto (nel 1973) in un linguaggio ad alto livello, il C (mutuamente influenzato da UNIX) invece che in Assembly, disgregando la diffusa convinzione che solo con linguaggi di basso livello si potesse garantire un livello accettabile di efficienza

  • Diffuso rapidamente in ambito accademico grazie a licenze gratuite dei Bell Labs (fine anni '70)

  • Esistono numerosi dialetti, per tutte le macchine (da personal computer a mainframe), con stesse funzionalità di base e buona compatibilità



... a Linux

Nel 1992, lo studente ! finlandese Linus Torvalds ha sviluppato (il kernel di) Linux, una versione open source di UNIX per PC Intel 386, utilizzando strumenti della Free Software Foundation.


Digressione...
  • Il software proprietario ha restrizioni sul suo utilizzo, sulla sua modifica, riproduzione o ridistribuzione, solitamente imposti da un proprietario. Queste restrizioni vengono ottenute tramite mezzi tecnici (rilasciare solo il codice eseguibile del software invece del sorgente) o legali (licenze, copyright e brevetti che ne vietano la ridistribuzione, la copia, la modifica, l'uso su più macchine, il reverse engineering...).

  • Il software proprietario disponibile gratuitamente viene chiamato freeware

  • Il software shareware è invece disponibile gratuitamente ma solo per un periodo di prova.

  • Alcuni esempi di software proprietario sono
    Microsoft Windows, RealPlayer, Mac OS, Winzip, Adobe Photoshop

  • Nel 1984 Richard M. Stallman fonda la Free Software Foundation. Un software libero è rilasciato con una licenza d'uso (a differenza ad esempio del software di pubblico dominio) che però garantisca a chiunque le quattro libertà fondamentali: utilizzarlo, studiarlo, modificarlo e ridistribuirlo migliorato (in modo tale che tutta la comunità ne tragga beneficio).

  • La filosofia alla base del software libero è che la condivisione del sapere non permette a un gruppo ristretto di persone di sfruttare la conoscenza (in questo caso tecnologica) per acquisire una posizione di potere.

  • Strumento fondamentale (introdotto da Stallman e Eben Moglen) risultò la licenza GPL (GNU General Public License): ogni prodotto software derivato da codice sotto GPL può essere distribuito solo con la stessa licenza.

  • Nel 1998 nasce il Movimento Open Source che riesce a sdoganare il concetto di software libero in campo aziendale, evitando implicazioni ideologiche (per esempio, nel software open source pur avendo a disposizione il codice sorgente, potrebbe esserne vietata la redistribuzione o la modifica)

Linux è oggi disponibile per tutte le piattaforme e i processori più diffusi... e adesso è anche facile da installare e da aggiornare!




UNIX in generale

  • Tutte le informazioni sono organizzate in file: documenti, sorgenti di programmi, applicazioni, immagini, ...
  • File System gerarchico: file (archivio) e directory (cartelle)
  • Due modalità di interazione con l'utente, con vantaggi complementari:

    • grafica, come sotto Windows (intuitiva, possibile anche per novizi, invita all'esplorazione...)

    • testuale, tramite shell interattiva (richiede maggiore conoscenza del sistema, più potente...)

  • Sia la shell che l'interfaccia grafica (basata su X-Windows) forniscono, in modo diverso, le stesse funzionalità:

    • accedere al sistema
    • spostarsi nel file system
    • creare / modificare / eliminare file
    • eseguire applicazioni



Il file system

  • Un file è un contenitore di informazioni: un documento, un programma, i dati di un esperimento, una fotografia..., ma anche un dispositivo di input/output, una zona di memoria interna,... (in UNIX anche operazioni come accesso a periferiche o comunicazioni tra processi avvengono tramite file speciali)

  • Una directory è un file che contiene altri file.

  • Ogni file ha un nome, che può contenere lettere, numeri, e i caratteri "." (punto) e "_" (sottolineatura o underscore) [meglio evitare gli spazi!!!]
    Spesso il nome di un file ha un suffisso o estensione, che ne indica il tipo (main.c indica un programma C, letter.txt indica un file di solo testo...)

  • UNIX è case-sensitive: una lettera minuscola e la corrispondente maiuscola sono diverse!!!
    Ad esempio, possiamo avere nella stessa directory i file piPPo e Pippo

  • I file sono organizzati in una struttura chiamata file system, rappresentabile come un albero (come analogia considerate un albero genealogico):
    • Una struttura con tre elementi: radice, nodi, archi (relazioni tra nodi)
    • La radice dell'albero è la directory /, detta root
    • I nodi sono file (i nodi interni sono directory)
    • Gli archi descrivono la struttura gerarchica (relazione padre-figlio)

Esempio di struttura di un file system UNIX




Directory importanti e Pathname

Alcune directory importanti:
  • Della root directory (indicata con /) abbiamo già parlato.

  • I file di ogni utente UNIX sono memorizzati in una directory del file system chiamata la home directory o home dell'utente (indicata con ~).

  • In ogni istante, ogni utente collegato al sistema si trova concettualmente posizionato in un ben preciso nodo del file system (detto directory corrente e indicato con .), da cui può spostarsi tramite opportuni comandi

  • La directory immediatamente sopra quella corrente è detta directory padre e indicata con ..

Nota: questa convenzione NON si generalizza aumentando il numero di .. per raggiungere la directory padre della directory padre e così via!

I percorsi (o path) sono rappresentati testualmente inserendo un simbolo / tra ogni padre e figlio (senza spazi). Per esempio:

/usr/       /usr/bin       /usr/bin/emacs

Un pathname specifica la precisa locazione di un file all'interno del file system.

  • pathname assoluto: dice come raggiungere un file partendo dalla radice del file system (quindi comincia sempre con /). Per esempio:
    /usr/bin/emacs

  • pathname relativo: dice come raggiungere un file partendo dalla directory corrente. Per esempio:
    ../../X11/man se la directory corrente è /usr/bin/emacs

  • Due file in directory diverse dello stesso albero possono avere lo stesso nome. Possiamo distinguerli usando il loro pathname assoluto, che li identifica in modo univoco nel file system:

      /usr/bin
      /bin/
      /usr/X11/bin/
      



La shell (conchiglia)

La shell è un interprete di comandi: legge ciascuna linea di comando, ne interpreta le diverse componenti e la esegue

  • Ogni sistema UNIX mette a disposizione vari tipi di shell. Le shell più diffuse sono: (sh, bash, csh, tcsh): il default per voi è bash

  • Da IceWM (l'interfaccia grafica che vi consigliamo di usare abitualmente) si lancia come una qualunque applicazione (cercate l'icona con la finestrina da terminale...)

  • La shell è un interprete di comandi che ripetutamente:

    • stampa un prompt
    • legge un comando scritto dall'utente e terminato con enter/return/invio
    • esegue il comando o segnala un errore se non è in grado di completarlo

  • I comandi possibili sono moltissimi, ma ne bastano pochi per cominciare...



Perché usare una shell testuale?

  • Potenza e semplicità: I comandi UNIX sono progettati per risolvere problemi specifici. Sono semplici (senza menu e opzioni nascoste) e proprio per questo potenti (es. grep parola filename)

  • Velocità e flessibilità: è più veloce scrivere pochi caratteri da tastiera piuttosto che cercare un programma opportuno e usare le operazioni che fornisce sulla base delle proprie specifiche esigenze

  • Accessibilità: permette di accedere efficientemente ad un sistema in remoto (es. ssh machine)




Sintassi dei comandi UNIX

La sintassi tipica dei comandi UNIX è la seguente:
comando  <opzioni>   <argomenti>

Opzioni:

  • Sono facoltative e influiscono sul funzionamento del comando
  • Consistono generalmente di un hyphen (il simbolo di trattino -) seguito da una sola lettera (es. ls -l). Possono avere un argomento (es. dvips -o p.ps p.dvi). Spesso più opzioni possono essere raggruppate insieme dopo un solo trattino (es. ls -al )
Argomenti:
  • Si possono avere più argomenti o anche nessuno
  • Alcuni argomenti sono opzionali. Se non specificati assumono valori di default



I comandi UNIX: Esempi

  • nessun argomento: il comando date mostra ora e data corrente
    date

  • un solo argomento: il comando cd cambia la directory corrente in quella specificata dal suo argomento
    cd ../emacs

  • un'opzione ed un argomento: il comando wc conta il numero di parole, caratteri, righe in un file di testo, in base all'opzione specificata
    wc -w elenco.txt conta le parole nel file elenco.txt
    wc -c elenco.txt conta i caratteri nel file elenco.txt
    wc -l elenco.txt conta le linee nel file elenco.txt

  • numero arbitrario di argomenti: il comando cat concatena e mostra sullo schermo il contenuto dei file passati come argomento
    cat orarioLIP.txt orarioLMM.txt orarioFP.txt orarioAM.txt

  • più opzioni ed un argomento di default: lista dettagliata (l,long) di tutti (a,all) i file, con dimensione (s,size). L'argomento di default è la directory corrente
    ls -als

Alcune informazioni utili
Per avere informazioni su di un comando e vederne tutte le opzioni possibili, provare l'opzione --help, oppure i comandi man o info (ad esempio, "ls --help", "man ls", "info ls")
La shell fa una completion automatica: se si scrive l'inizio di un comando o di un file e si batte TAB, la shell completa il nome per quanto possibile.



La directory corrente e comandi di navigazione

La linea di comando è concettualmente posizionata in una directory, la directory corrente (che all'inizio di ogni sessione è la home dell'utente collegato), nella quale vengono eseguiti i comandi.

Per fare riferimento a files o directory, oltre al path assoluto si può usare il path relativo, che parte dalla directory corrente.

Comando Significato
dirs stampa la directory corrente [working directory]
pwd stampa il pathname assoluto della director corrente
cd la home diventa la directory corrente
cd <nuovaDir> <nuovaDir> diventa la directory corrente
ls stampa il contenuto della directory corrente
ls <directory> stampa il contenuto di <directory>
ls -l stampa anche informazioni aggiuntive (diritti, dimensione...)
ls -a stampa anche files/directory che iniziano per "."

Esempio: visitando una home
Comando Significato
-> pwd stampa il pathname assoluto della directory corrente
-> ls lista la directory corrente
-> cd .. la direcory padre diventa la directory corrente
-> ls -sh mydocs lista la directory mydocs con opzioni size e human readable
-> cd la home diventa la directory corrente




Creare, cancellare, copiare e spostare file

Per creare un file si possono usare moltissimi comandi: il più semplice è touch. In generale, tutti i comandi che modificano un file lo creano se esso non esiste già.

Comandi per creare e cancellare file e directory
Comando Significato
touch <file> cambia l'orario di accesso e di modifica di <file>; se non esiste, lo crea
mkdir <dir> crea la directory <dir>
rmdir <dir> cancella la directory <dir>, ma solo se è vuota.
rm <f1> ... <fn> cancella i files <f1> ... <fn>
rm -r <dir> cancella la directory <dir> con il suo contenuto
rm -i ... cancella l'argomento chiedendo conferma
rm -f ... cancella l'argomento senza chiedere conferma

Comandi per spostare e copiare file e directory
cp <source> <dest> copia il file o directory <source> in <dest>
cp <f1> ... <fn> <dir> copia <f1> ... <fn> nella directory <dir>
cp -r <dir1> <dir2> copia <dir1> e tutto il suo contenuto in <dir2>
cp -i ... copia chiedendo conferma prima di sovrascrivere
cp -f ... copia senza chiedere conferma prima di sovrascrivere
mv <source> <dest> copia <source> in <dest> e rimuove <source>
mv <f1> ... <fn> <dir> sposta <f1> ... <fn> nella directory <dir>
mv -i ... muove chiedendo conferma prima di sovrascrivere
mv -f ... muove senza chiedere conferma prima di sovrascrivere




OpenOffice

Per creare/modificare file di vari formati sotto UNIX si possono usare opportune applicazioni. In particolare, oltre ai classici editor di file di testo (come emacs, vi e pico), sulle macchine del CdC è disponibile la suite OpenOffice, che offre funzionalità analoghe a Office sotto Windows (attenzione: la compatibilità è buona, ma non perfetta).

Office OpenOffice
Office Suite ooffice
Word oowriter
Excel oocalc
PowerPoint ooimpress




Emacs

Emacs è un editor di testo molto utilizzato sotto UNIX, che offre moltissime funzionalità: si tratta di un vero e proprio ambiente di sviluppo integrato, non grafico.

Per lanciare Emacs ed editare il file primofile, basta eseguire nella shell il comando

    -> emacs primofile &
La "e commerciale" (&) serve a lanciare Emacs in background, in modo da non bloccare l'esecuzione della shell.

Alcune cose da sapere (e sperimentare) su Emacs:

  • Emacs fa un backup del file chiamandolo primofile~.

  • Quando si modifica un file con Emacs, in realtà si modifica una copia del file tenuta da Emacs in un buffer (nell'esempio, un file chiamato #primofile#). Le modifiche vanno salvate per renderle permanenti.

  • Emacs permette di lavorare su più file alla volta. Non c'è bisogno di mandare in esecuzione più copie di Emacs. Il menu Buffer permette di passare da un file all'altro.

  • Se i caratteri della finestra di edit vi sembrano troppo piccoli per riuscire a lavorarci, lanciare Emacs col comando emacs -fn 10x20

  • Si può interagire con Emacs usando il mouse e i menu, oppure con opportune combinazioni di tasti. Un'introduzione all'uso di Emacs (con i tasti!!!) si trova nell'Emacs Tutorial, che si può invocare con C-h t oppure dal menu Help