Title: Il Sistema Unix
1Il Sistema Unix
- Breve storia
- Principi di progetto
- Interfaccia per il programmatore
- Interfaccia utente
- Gestione dei processi
- Gestione della memoria
- File System
- Sistema di I/O
- Comunicazione fra processi
2Breve storia
- Sviluppato inizialmente, a partire dal 1969, da
Ken Thompson e Dennis Ritchie del gruppo di
ricerca dei Bell Laboratories. Incorporò
caratteristiche di altri sistemi operativi (es.
MULTICS). - La terza versione, scritta in C, fu sviluppata ai
Bell Labs appositamente per supportare UNIX. - La più significativa delle versioni UNIX non-Bell
fu sviluppata alla University of California at
Berkeley (Berkeley Software Distributions). - 4BSD UNIX è il risultato di un finanziamento
DARPA per lo sviluppo di uno standard UNIX ad uso
governativo. - Sviluppato per il VAX, 4.3BSD è una delle
versioni più importanti e ne è stato fatto il
porting su varie piattaforme. - Vari progetti di standardizzazione hanno tentato
di consolidare le varianti di UNIX, per ottenere
ununica interfaccia di programmazione verso il
sistema.
3Storia delle versioni UNIX
4Vantaggi principali di UNIX
- Scritto in linguaggio ad alto livello.
- Distribuito sotto forma di sorgenti.
- Fornisce le primitive di un sistema operativo
potente su di una piattaforma economica. - Piccola dimensione, modulare, progetto pulito.
5Principi di progetto di UNIX
- Progettato per realizzare il timesharing.
- Possiede uninterfaccia utente (shell) semplice
da usare e standard, che può essere facilmente
sostituita e personalizzata. - File system con directory a più livelli,
strutturate ad albero. - I file sono supportati dal kernel come sequenze
di byte senza struttura. - Supporta processi multipli un processo può
creare facilmente altri processi. - Sistema altamente interattivo, fornisce
facilities per lo sviluppo di programmi.
6Interfaccia del programmatore
Come molti sistemi operativi, UNIX consiste di
due parti separate
- Kernel tutto ciò che si trova sotto
linterfaccia delle system-call e sopra
lhardware fisico. - Fornisce il file system, lo scheduling della
CPU, la gestione della memoria ed altre funzioni
di SO, tramite le chiamate di sistema. - Programmi di sistema impiegano le chiamate di
sistema, supportate dal kernel, per fornire
funzioni utili, come compilazione e manipolazione
di file.
7Struttura a strati di 4.3BSD UNIX
8System Call
- Le chiamate di sistema definiscono linterfaccia
del programmatore verso UNIX. - Linsieme dei programmi di sistema comunemente
disponibili definisce linterfaccia utente. - Le interfaccie del programmatore ed utente
definiscono il contesto che deve essere
supportato dal kernel. - Si hanno, approssimativamente, tre categorie di
chiamate di sistema in UNIX - Manipolazione di file (le stesse chiamate di
sistema supportano anche la manipolazione dei
dispositivi). - Controllo dei processi.
- Manipolazione dellinformazione.
9Manipolazione di file
- Un file è una sequenza di byte il kernel non
impone ai file nessuna struttura. - I file sono raccolti in directory, organizzate ad
albero. - Le directory sono file che contengono
informazioni su come reperire altri file. - Path name (nome di percorso) identifica un file
specificando un cammino che, attraverso la
struttura a directory, raggiunge il file. - Un path name assoluto inizia nella radice del
file system. - Un path name relativo inizia nella directory
corrente. - System call per la manipolazione di file
create, open, read, write, close, unlink, trunc.
10Struttura delle directory in UNIX
11Controllo dei processi 1
- Un processo è un programma in esecuzione,
identificato univocamente dallidentificatore di
processo (un intero). - System call per il controllo dei processi
- fork crea un nuovo processo
- execve viene impiegata dopo una fork per
rimpiazzare la memoria virtuale di uno dei due
processi (generalmente il figlio) con un nuovo
programma - exit termina un processo
- Un padre può attendere (wait) la terminazione
di un processo figlio wait fornisce il process
id (pid) del figlio terminato, così da renderne
nota lidentità al padre - wait3 consente al padre di produrre statistiche
sulla performance dei figli - Processo zombie processo terminato dopo il padre.
12System call di gestione dei processi
13Controllo dei processi 2
- I processi comunicano fra loro attraverso pipe,
code di byte che sono accessibili tramite un
descrittore di file. - Tutti i processi utente sono figli di un unico
processo, init. - init crea un processo getty, che inizializza i
parametri della linea del terminale e attende il
login name dellutente per passarlo al processo
login. - Login confronta luser identifier per verificarne
i diritti di accesso al sistema. - esegue una shell che crea sottoprocessi per
ciascun comando utente.
14Segnali
- Strumenti per gestire condizioni eccezionali.
Simili alle interruzioni software. - Il segnale di interrupt, SIGINT, viene impiegato
per interrompere un comando prima che sia
completato (in genere prodotto da un C). - Limpiego di segnali è stato recentemente esteso
e non è più relativo esclusivamente ad eventi
eccezionali. - Inizio ed interruzione di processi on demand.
- SIGWINCH informa un processo che la finestra
nella quale verrà visualizzato loutput da esso
prodotto ha cambiato dimensioni. - Invio di dati urgenti attraverso connessione di
rete.
15Gruppi di processi 1
- Un insieme di processi correlati che concorrono
alla realizzazione di un task comune. - In ogni istante, un unico gruppo di processi può
utilizzare un certo terminale di I/O. - Il processo (unico) in foreground si svolge sotto
gli occhi dallutente al terminale. - I processi in background realizzano il loro
compito senza interagire direttamente con
lutente. - Laccesso al terminale è controllato da signal di
gruppo di processi.
16Gruppi di processi 2
- Ciascun processo eredita il proprio terminale di
controllo dal processo padre. - Se il gruppo di processi associato ad un
terminale di controllo coincide con il gruppo di
un dato processo, quel processo si trova in
foreground e gli è concesso di eseguire lI/O. - SIGTTIN o SIGTTOU congela un processo
background che tentasse di produrre output se il
processo viene portato in foreground, SIGCONT
indica che lI/O richiesto può ora essere
eseguito. - SIGSTOP congela un processo foreground.
17Manipolazione dellinformazione
- Chiamate di sistema per impostare e restituire
il valore di un timer getitmer/setitmer o lora
corrente gettimeofday/settimeofday. - I processi possono richiedere
- il loro identificatore di processo getpid
- il loro identificatore di gruppo getgid
- il nome della macchina su cui sono in esecuzione
gethostname
18Routine di libreria
- Linterfaccia delle chiamate di sistema in UNIX
viene supportata ed ampliata da una notevole
collezione di routine di libreria. - I file header forniscono la definizione di
strutture dati complesse impiegate nelle chiamate
di sistema. - Librerie addizionali sono fornite per funzioni
matematiche, accesso alla rete, conversioni di
dati, ecc.
19Interfaccia utente
- Programmatori ed utenti interagiscono
prevalentemente con programmi di sistema già
esistenti Le chiamate di sistema richieste sono
incorporate nel programma e non devono essere
conosciute dallutente. - I programmi di sistema più comuni sono orientati
alla gestione di file e directory. - Directory mkdir, rmdir, cd, pwd
- File ls, cp, mv, rm
- Altri programmi sono relativi a editor (e.g.,
emacs, vi) formattatori di testo (e.g., troff,
TEX), e altro.
20Shell e comandi
- Shell o interprete dei comandi il processo
utente che esegue i programmi. - Viene chiamata shell perché ingloba il kernel.
- La shell indica che è pronta ad accettare un
nuovo comando visualizzando un prompt e lutente
introduce comandi su una singola linea. - Il comando tipico è il nome di un file binario
eseguibile. - La shell naviga attraverso il percorso di ricerca
per trovare il file relativo al comando, che
viene in seguito caricato ed eseguito. - Le directory /bin e /usr/bin sono quasi sempre
nel percorso di ricerca. - Un tipico cammino di ricerca in un sistema BSD
è ( ./home/prof/avi/bin /usr/local/bin
/usr/ucb/bin/usr/bin ) - La shell normalmente sospende la propria
esecuzione fino al termine del comando.
21Standard I/O
- La maggior parte dei processi, quando iniziano la
loro esecuzione, si aspettano di poter disporre
di tre descrittori di file aperti - standard input il processo può leggere cosa
viene scritto dallutente - standard output il processo può inviare
loutput sullo schermo dellutente - standard error uscita dellerrore
- Molti programmi possono anche utilizzare file
(piuttosto che un terminale) per lo standard
input e lo standard output. - Redirezione dellI/O Le shell più comuni
dispongono di una semplice sintassi per cambiare
i file aperti per lI/O standard di un processo.
22Redirezione dellI/O standard
- Comando Significato del comando
- ls gt filea dirige loutput di ls sul file filea
- pr lt filea gt fileb input da filea e output su
fileb - lpr lt fileb input da fileb
- make program gt errs salva sia lo standard
output che lo - standard error su un file
23Pipeline, Filtri, e Shell Script
- I singoli comandi possono essere accodati per
mezzo di una barra verticale (pipe). In questo
modo, loutput del comando a sinistra della pipe
costituisce linput per il comando alla sua
destra. ls pr lpr - Filtro un comando che passa il proprio standard
input allo standard output, compiendo qualche
elaborazione (es. pr). - Programmare una nuova shell personalizzata, con
sintassi e semantica diverse, cambia la visione
dellutente, ma non modifica il kernel o
linterfaccia del programmatore. - X Window è uninterfaccia utente a icone molto
diffusa sui sistemi UNIX.
24Gestione dei processi
- La rappresentazione dei processi è il principale
problema di progetto di un sistema operativo. - UNIX si distingue dagli altri sistemi operativi
per la semplicità con cui processi multipli
possono essere creati e manipolati. - I processi vengono raprresentati in UNIX per
mezzo di vari blocchi di controllo (control
blocks). - I blocchi di controllo associati ad un processo
vengono memorizzati nel kernel. - Linformazione contenuta nei blocchi di controllo
viene utilizzata dal kernel per controllare i
processi ed effettuare lo scheduling della CPU.
25Process Control Block 1
- Ai processi viene associata una struttura dati
elementare chiamata struttura del processo
(process structure). - identificatore di processo (unico)
- informazioni per lo scheduling (e.g., priorità)
- puntatori ad altri control block
- Lo spazio degli indirizzi virtuale di un processo
utente è suddiviso in una sezione testo (codice
del programma), una sezione dati ed uno stack. - Ogni processo che condivide la sezione testo ha
un puntatore dalla propria struttura di processo
ad una struttura di testo, che... - è sempre residente nella memoria principale
- memorizza quanti processi condividono il segmento
di testo - memorizza dove è reperibile su disco (quando
viene effettuato lo swap) la tabella delle pagine
per la sezione testo.
26Process Control Block 2
- La tabella delle pagine memorizza informazioni
per la mappatura fra la memoria virtuale del
processo e la memoria fisica - Le informazioni sul processo, necessarie solo
quando esso risiede in memoria principale, sono
mantenute nella struttura utente (o u structure)
che - è mappata a sola lettura nello spazio degli
indirizzi virtuale dellutente - è scrivibile dal kernel
- mantiene informazioni sulla directory corrente e
la tabella dei file aperti.
27Segmento dati di sistema
- Il lavoro ordinario viene normalmente eseguito in
modo utente (user mode) le system call sono
effettuate in modo sistema (system mode). - Le fasi sistema ed utente di un processo non
vengono mai eseguite simultaneamente. - Lo stack del kernel (anziché lo stack utente)
viene impiegato per un processo eseguito in modo
sistema. - Lo stack del kernel e l u structure
costituiscono insieme il segmento dati di sistema
per il processo.
28Localizzazione delle parti di un processo
29Allocazione di una nuova struttura di processo 1
- fork alloca una nuova struttura di processo per
il processo figlio e copia la struttura utente. - Viene costruita una nuova tabella delle pagine.
- Viene allocata nuova memoria per il segmento dati
e lo stack del processo figlio. - Copiando la struttura utente si conservano i
descrittori dei file aperti, gli identificatori
di utente e di gruppo, la manipolazione dei
segnali, etc. - vfork non copia i dati e lo stack al nuovo
processo il nuovo processo semplicemente
condivide la tabella delle pagine del processo
padre. - Una nuova struttura utente ed una nuova struttura
di processo vengono comunque create. - Viene comunemente utilizzata dalla shell per
eseguire un comando ed attendere il suo
completamento.
30Allocazione di una nuova struttura di processo 2
- Il processo padre impiega vfork per produrre un
processo figlio il figlio impiega execve per
cambiare il proprio spazio degli indirizzi
virtuale. - Impiegare vfork per un processo padre oneroso
equivale ad un notevole risparmio di CPU time, ma
può essere pericoloso dato che ogni cambiamento
in memoria avviene in entrambi i processi, fino a
che non viene eseguita una execve. - execve non crea un nuovo processo o struttura
utente, piuttosto il testo ed i dati del processo
(padre) vengono rimpiazzati.
31Scheduling della CPU
- Ciascun processo ha associata una propria piorità
di scheduling numeri più alti indicano priorità
più basse. - La presenza di feedback negativo nello scheduling
della CPU diminuisce il rischio che un processo
ne prenda possesso in modo esclusivo. - Tecniche di invecchiamento (aging) dei processi
vengono impiegate per impedire lattesa
indefinita (starvation). - Quando un processo decide di rilasciare la CPU,
si pone in stato di sleep per un evento. - Quando tale evento accade, il processo di sistema
che lo gestisce chiama wakeup con lindirizzo
corrispondente allevento, e tutti i processi che
si trovano in stato di sleep allo stesso
indirizzo vengono spostati nella coda ready per
essere eseguiti.