Breve storia, principi di progetto, interfaccia del programmatore e

Il 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
Operating System Concepts
21.1
Silberschatz and Galvin1999
Breve 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 un’unica interfaccia di
programmazione verso il sistema.
Operating System Concepts
21.2
Silberschatz and Galvin1999
Storia delle versioni UNIX
Operating System Concepts
21.3
Silberschatz and Galvin1999
Vantaggi 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”.
Operating System Concepts
21.4
Silberschatz and Galvin1999
Principi di progetto di UNIX
•
•
Progettato per realizzare il time–sharing.
Possiede un’interfaccia utente (shell) semplice da usare e
standard, che può essere facilmente sostituita e personalizzata.
•
•
File system con directory a più livelli, strutturate ad albero.
•
Supporta processi multipli; un processo può creare facilmente
altri processi.
•
I file sono supportati dal kernel come sequenze di byte senza
struttura.
Sistema altamente interattivo, fornisce facilities per lo sviluppo
di programmi.
Operating System Concepts
21.5
Silberschatz and Galvin1999
Interfaccia del programmatore
Come molti sistemi operativi, UNIX consiste di due parti separate:
•
•
Kernel: tutto ciò che si trova sotto l’interfaccia delle system-call
e sopra l’hardware 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.
Operating System Concepts
21.6
Silberschatz and Galvin1999
Struttura a strati di 4.3BSD UNIX
Operating System Concepts
21.7
Silberschatz and Galvin1999
System Call
•
Le chiamate di sistema definiscono l’interfaccia del
programmatore verso UNIX.
•
L’insieme dei programmi di sistema comunemente disponibili
definisce l’interfaccia 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 dell’informazione.
Operating System Concepts
21.8
Silberschatz and Galvin1999
Manipolazione 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.
Operating System Concepts
21.9
Silberschatz and Galvin1999
Struttura delle directory in UNIX
Operating System Concepts
21.10
Silberschatz and Galvin1999
Controllo dei processi — 1
•
•
•
Un processo è un programma in esecuzione, identificato
univocamente dall’identificatore 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 l’identità al padre
– wait3 consente al padre di produrre statistiche sulla
performance dei figli
Processo zombie: processo terminato dopo il padre.
Operating System Concepts
21.11
Silberschatz and Galvin1999
System call di gestione dei processi
Operating System Concepts
21.12
Silberschatz and Galvin1999
Controllo 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 dell’utente per passarlo al
processo login.
– Login confronta l’user identifier per verificarne i diritti di
accesso al sistema.
– esegue una shell che crea sottoprocessi per ciascun
comando utente.
Operating System Concepts
21.13
Silberschatz and Galvin1999
Segnali
•
•
•
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).
L’impiego 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 l’output da esso prodotto ha
cambiato dimensioni.
– Invio di dati urgenti attraverso connessione di rete.
Operating System Concepts
21.14
Silberschatz and Galvin1999
Gruppi 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
dall’utente al terminale.
– I processi in background realizzano il loro compito senza
interagire direttamente con l’utente.
•
L’accesso al terminale è controllato da signal di gruppo di
processi.
Operating System Concepts
21.15
Silberschatz and Galvin1999
Gruppi 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 l’I/O.
– SIGTTIN o SIGTTOU “congela” un processo background
che tentasse di produrre output; se il processo viene
portato in foreground, SIGCONT indica che l’I/O richiesto
può ora essere eseguito.
– SIGSTOP congela un processo foreground.
Operating System Concepts
21.16
Silberschatz and Galvin1999
Manipolazione dell’informazione
•
•
Chiamate di sistema per impostare e restituire il valore di un timer
getitmer/setitmer o l’ora 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
Operating System Concepts
21.17
Silberschatz and Galvin1999
Routine di libreria
•
•
•
L’interfaccia 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.
Operating System Concepts
21.18
Silberschatz and Galvin1999
Interfaccia 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 dall’utente.
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.
Operating System Concepts
21.19
Silberschatz and Galvin1999
Shell e comandi
•
•
•
Shell o interprete dei comandi – il processo utente che esegue i programmi.
•
•
Il comando tipico è il nome di un file binario eseguibile.
•
•
Viene chiamata shell perché “ingloba” il kernel.
La shell indica che è pronta ad accettare un nuovo comando visualizzando un
prompt e l’utente introduce comandi su una singola linea.
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.
Operating System Concepts
21.20
Silberschatz and Galvin1999
Standard 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 dall’utente
– standard output – il processo può inviare l’output sullo
schermo dell’utente
– standard error – uscita dell’errore
Molti programmi possono anche utilizzare file (piuttosto che
un terminale) per lo standard input e lo standard output.
Redirezione dell’I/O: Le shell più comuni dispongono di una
semplice sintassi per cambiare i file aperti per l’I/O standard di
un processo.
Operating System Concepts
21.21
Silberschatz and Galvin1999
Redirezione dell’I/O standard
Comando
Significato del comando
% ls > filea
dirige l’output di ls sul file filea
% pr < filea > fileb
input da filea e output su fileb
% lpr < fileb
input da fileb
%% make program > & errs
salva sia lo standard output che lo
standard error su un file
Operating System Concepts
21.22
Silberschatz and Galvin1999
Pipeline, Filtri, e Shell Script
•
I singoli comandi possono essere “accodati” per mezzo di una
barra verticale | (pipe). In questo modo, l’output del comando a
sinistra della pipe costituisce l’input 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 dell’utente, ma non
modifica il kernel o l’interfaccia del programmatore.
X Window è un’interfaccia utente a icone molto diffusa sui
sistemi UNIX.
Operating System Concepts
21.23
Silberschatz and Galvin1999
Gestione 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.
– L’informazione contenuta nei blocchi di controllo viene
utilizzata dal kernel per controllare i processi ed effettuare
lo scheduling della CPU.
Operating System Concepts
21.24
Silberschatz and Galvin1999
Process 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.
Operating System Concepts
21.25
Silberschatz and Galvin1999
Process 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
dell’utente;
– è scrivibile dal kernel;
– mantiene informazioni sulla directory corrente e la tabella
dei file aperti.
Operating System Concepts
21.26
Silberschatz and Galvin1999
Segmento 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.
Operating System Concepts
21.27
Silberschatz and Galvin1999
Localizzazione delle parti di un processo
Operating System Concepts
21.28
Silberschatz and Galvin1999
Allocazione 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.
Operating System Concepts
21.29
Silberschatz and Galvin1999
Allocazione 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.
Operating System Concepts
21.30
Silberschatz and Galvin1999
Scheduling 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 l’attesa 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 l’indirizzo corrispondente
all’evento, e tutti i processi che si trovano in stato di sleep allo
stesso indirizzo vengono spostati nella coda ready per essere
eseguiti.
Operating System Concepts
21.31
Silberschatz and Galvin1999