Mostriamo una breve cronistoria del sistema operativo Unix.
Il sistema operativo Unix nasce nel 1969 viene sviluppato presso la Computing Science Research Division dei Bell Laboratories.
Si può affermare che i “padri” di UNIX sono K.L. Thompson e D.M. Ritchie l’inventore del linguaggio di programmazione C.
Successivamente nel 1974 viene installata presso l’Università di Berkeley una prima versione del sistema operativo UNIX, riscritta interamente in linguaggio C.
Nel 1983 viene sviluppata la versione Unix SYSTEM V apportando innovazione nell’uso efficiente della memoria. In particolare viene implementa la “memoria virtuale”.
I principali punti di forza del sistema Unix siano:
Il sistema Unix è progettato considerando:
In definitiva dopo avere installato il sistema operativo si hanno a disposizione i principali strumenti di lavoro senza necessariamente aggiungere nuovi pacchetti.
Ricostruiamo brevemente Unix dal punto di vista della macchina virtuale. Si ha a disposizione, schematicamente:
Alcuni Sistemi Operativi a pagamento
Sistemi Operativi non a pagamento
Sistemi Operativi real-time
I sistemi operativi operano su un insieme di dati chiamati
FILE
Un file può essere considerato come una collezione di caratteri che termina con un carattere di chiusura speciale detto: EOF (end-of-file).
Un file viene strutturato unità di base formate da linee che sono dette record.
Il file può essere creato mediante una operazione di lettura da una unità di input, come ad esempio la tastiera ed è generalmente considerato come risultato dell’esecuzione di un programma.
Per distinguere le diverse tipologie di file ed i programma in grado di poterli leggere ( aprire ) si può utilizzare la convenzione di identificarli attraverso dei suffissi.
Ad esempio un file pippo.txt indica un file di testo. (Altri esempi di suffissi: .pdf, .zip, .doc, .ppt, …)
I file nel sistema operativo vengono dal punto di vista Logico organizzati mediante una struttura dati.
Particolare che prende il nome di
File System
Il file system è una struttura gerarchica ad albero.
In figura viene mostrato un tipico albero, si osservi la struttura a nodi e foglie. In particolare il nodo root è gerarchicamente superiore a quello lettere. Mentre varie e lezioni hanno la stessa “altezza”.
Il file system Unix è una struttura gerarchica ad albero in cui è possibile distinguere:
Su ciascun file è possibile fare delle operazioni di lettura, scrittura o esecuzione.
Ogni file è accompagnato da una stringa che individua cosa sia possibile fare.
In particolare:
Sui File Ordinari
Operazione – Vuol dire che
LETTURA (r) – Lettura del contenuto del file
SCRITTURA (w) – Modifica del contenuto del file
ESECUZIONE (x) – Esecuzione del file
Sulle Directory
Operazione – Vuol dire che
LETTURA (r) – Visualizza nella directory
SCRITTURA (w) – Aggiunta o cancellazione di un file
Essendo Unix un S.O. multi-utente ciascun file quando viene creato dei permessi di accesso per tre categorie di utenti:
Inoltre su ciascun i file è possibile permettere o negare le operazioni di lettura, scrittura ed esecuzione attraverso una la stringa di 9 caratteri che è associata al file.
Supponiamo che su un file pluto.bin
sia un file ordinario eseguibile
ed i suoi permessi siano:
r w x r – x r – – .
La stringa di 9 caratteri assume il seguente significato:
Per esempio un file di sola lettura ha i seguenti permessi:
r – –r– –r – –
Supponiamo che ad una directory didattica siano assegnati i seguenti permessi:
r w x r – x r – – .
La stringa di 9 caratteri assume il seguente significato:
Si supponga di avere a disposizione un sistema operativo Unix e sui sia svolta la fase di Login.
L’utilizzatore del sistema che è stato riconosciuto è posizionato nell’albero del File System ad altezza prefissata che corrisponde ad una prefissata directory che viene detta:
Home Directory
Essa è risulterà il punto di accesso al sistema e non cambierà fin quando l’utente risiede nel sistema.
In figura la home directory dell’utente utilizzatore è u1
.
Esempio. Si individui una possibile procedura per l’accesso nel file system al file pippo
.
Soluzione Caso 1. E’ possibile specificare il percorso, detto path, che intercorre tra l’inizio o radice (root) del sistema indicata con il carattere / ed il file che si vuole individuare. Ovvero: /utenti/u1/prog/pippo
Caso 2. E’ possibile specificare il percorso, intercorre tra la nostra posizione attuale il file che si vuole individuare. Ovvero prog/pippo
.
Caso 3. Spostarsi nella posizione dell’albero contenente il file pippo
e fare riferimento ad esso specificando il suo nome.
Utilizzo simulato del S.O. Esempio 2
Esempio. Si individui una possibile procedura per l’accesso nel file system al file prova
e ai file pippo
Soluzione: CASO 1. Le modalità possibili sono:
PATH ASSOLUTO: /utenti/u2/prova
PATH RELATIVO: ../u2/prova (.. a directory padre)
CASO 2. I due file pippo sono univocamente determinati dai path differenti:
/utenti/u2/pippo
/utenti/u1/prog/pippo
La sintassi dei comandi in Unix deve essere formata in maniera corretta.
Un comando viene eseguito seguendo una fissato ordine in un comando del tipo:
comando = [-opzioni] [argomento] [argomento] .
comando =
al nome di un file eseguibile residente nel file system. Il file associato al comando può contenere sia un programma eseguibile del sistema operativo che uno generato dall’utente
opzioni =
rappresenta degli specifici parametri che servono a richiamare le possibilità opzionali implementate nello specifico comando
argomento =
rappresenta gli operandi su cui deve agire il comando. Tali operandi in genere sono costituiti dai nomi di file da manipolare.
Alcuni comandi
manual – Visualizza alcune pagine di documentazione del comando specificato.
password – Comando interattivo di definizione o modifica della password (è richiesto l’inserimento della nuova password per due volte affinchè la modifica sia accettata)
print work directory – Visualizza il path assoluto della directory corrente di lavoro
elenca le user id degli utenti collegati in quel momento al sistema
Esempio. Un utente mario vuole collegarsi al sistema e cambiare la sua password.
Soluzione.
In una finestra interprete di sistema (shell) comparirà
oracolo.dma.unina.it$
passwd Changing password for mario
Old password: (digitare la vecchia password)
Enter new password: (digitare la nuova password)
Verify: (digitare di nuovo la nuova password)
oracolo.dma.unina.it$
Quanto mostrato è la sequenza di istruzioni da digitare.
Esempio. Un utente mario
vuole sapere la sua directory di lavoro e chi è
collegato al sistema.
Soluzione.
In una finestra interprete di sistema (shell) comparirà
oracolo.dma.unina.it$pwd
/usr/users/mario
oracolo.dma.unina.it$
=======
oracolo.dma.unina.it$ who
tizio ttypf Mar 6 15:24 (193.204.16.30)
mario ttyq0 Mar 6 15:53 (193.167.16.17)
rossi ttyq1 Mar 6 16:03 (193.204.16.1)
Quanto mostrato è la sequenza di caratteri sulla shell.
ls path
list – richiesta di listare il contenuto di path (se path non è specificato , viene listato il contenuto della directory corrente di lavoro)
mkdir path
make directory – crea una directory come specificato dal path.
cd path
change work directory – cambia la directory corrente di lavoro in quella specificata da path
cat path
concatenate – lista il contenuto del file specificato da path sul supporto standard di output (schermo)
pg path
page – ha lo stesso significato di cat ma l’output viene fornito su più pagine, dove una pagina è lo schermo del terminale.
cp path1 path2
copy – copia il file specificato da path1 nel file specificato da path2. Se il secondo argomento è una directory, il file è copiato in questa directory con lo stesso nome.
lp –ddest file
line printer spooler – invia il file alla stampante specificata in dest.
rm path
remove – cancella il file specificato da path
rmdir path
remove directory – cancella la directory specificata da path. Una directory può essere cancellata solo se è vuota
mv path1 path2
move – muove il contenuto del file specificato da path1, nel file specificato da path2.
cc file1 file2…filen
compilatore C – viene richiamato il compilatore C, che a partire da file1 file2 … filen produce il programma eseguibile (assoluto) di nome standard a.out.
In questa diapositiva mostriamo una breve cronistoria del sistema operativo Linux.
Linus Torvalds, studente dell’università di Helsinki, inizia per hobby nel 1991 la scrittura di un’estensione del mini S.O. UNIX di nome Minix
Nel 1994 la prima versione del kernel di Linux vede la luce
Linux è sviluppato secondo la licenza GNU General Public License (GPL) e tutto il codice sorgente è distribuito gratuitamente al pubblico. Le performances e la versatilità di Linux lo hanno fatto diventare ben presto un sistema operativo di grande diffusione.
Linux ha introdotto l’idea di OpenSource:
1. Prolusione
2. Sistemi Operativi – parte prima
3. Sistemi Operativi – parte seconda
6. Il linguaggio C – parte prima
8. Il linguaggio C – funzioni e puntatori
10. Il linguaggio C – parte terza
11. La documentazione del software
12. Dati strutturati
13. Esercizi sui dati strutturati
14. Approfondimenti di C, Stringhe e file
15. Esercizi su stringhe e file
16. La ricorsione
17. Il linguaggio c++ parte prima
18. Il linguaggio C++ - parte seconda
19. Strutture dati di tipo astratto