Escolar Documentos
Profissional Documentos
Cultura Documentos
Comunicazione tra processi: non può quindi avvenire in modo “diretto” (per condivisione di variabili), ma
deve sfruttare appositi meccanismi di sistema (IPC, per esempio file o socket).
Threads: sono delle sotto-attività di un processo che possono essere eseguite tutte in “parallelo” e risultano
meno onerose da gestire per il S.O. (storicamente si usava il termine LWP “Light Weight Processes”). Nascono
dalla necessità di ottimizzare al meglio il tempo di esecuzione di un processo nel caso di programmi in cui non
vi è solo una attività in esecuzione, ma in cui diverse attività in concorrenza eseguono (motivi di efficienza
dell'esecuzione). In questo caso, vi è può l'esigenza forte di fare interagire le diverse attività in esecuzione.
Carattersitche:
• è un’attività autonoma che “vive” all’interno di un processo (e quindi, tipicamente, la stessa istanza in
esecuzione di un programma, corrispondente a un processo, ospita al suo interno dei sotto-flussi di
esecuzione concorrente, corrispondenti ai thread)
• non ha uno spazio di indirizzamento riservato: tutti i thread appartenenti allo stesso processo
condividono il medesimo spazio di indirizzamento (le variabili globali in RAM).
• ha un proprio stack riservato (e quindi le sue variabili locali di una procedura sono private e non
condivise da altri thread)
• l’oggetto che crea il thread non si blocca aspettandone la fine, ma prosegue la sua esecuzione in
contemporanea.
Comunicazione tra threads: può avvenire in modo molto più semplice, tramite lo spazio di memoria
condiviso. Quindi, se ci sono variabili globali o riferimenti a aree di memoria od oggetti comuni diversi threads
possono interagire. Occorre però disciplinare l’accesso a tale area comune → necessità di opportuni
meccanismi di sincronizzazione In un liguaggio ad oggetti come Java, ovviamente, il concetto di variabile
globale non ha senso. Però più threads possono condividere riferimenti allo stesso oggetto, interagendo tramite
tale oggetto.
Differenza tra processi e threads: I processi si caratterizzano come “Collezione organizzata di insiemi di
risorse”, e queste risorse in esecuzione si dicono Thread. I thread sono quindi delle unità minime di
schedulazione per l’esecuzione da parte della CPU, in buona misura indipendenti gli uni dagli altri
Multithreading: è la proprietà che caratterizza quei SO in grado di garantire la gestione di più threads
all’interno di un processo; infatti, i SO possono gestire:
• un solo thread (es.: MS-DOS)
• un processo con più thread
• più processi utente ma un solo thread per processo (es: UNIX)
• thread multipli (es: Windows 2000, Solaris, Linux, Mach, OS/2)
SO Multithreading: Un S.O.M. è caratterizzato da due componenti di esecuzione: processi e thread;
- ai processi sono associati:
• un unico spazio di indirizzi che contiene l’immagine del processo (testo, dati, stack)
RETI DI TELECOMUNICAZIONI – II parte 2
• Scheduling personnalizzato
Svantaggi:
• Un’operazione bloccante di un thread blocca l’intero processo
• il kernel ignora l’esistenza di thread liberi di quel processo
• Il page fault di un thread blocca l’intero processo
• Non può essere sfruttato il multiprocessing
Kernel Level Threads: tutta la gestione affidata al run-time è svolta dal kernel, di conseguenza lo scheduling
viene effettuato sulla base dei thread. Es.: win2k, linux, OS/2.
Vantaggi: Pieno sfruttamento delle risorse hardware del sistema
Svantaggi: La gestione dei thread è più lenta di quella User Level poiché richiede l’intermediazione del kernel
Oggetto thread in Windows: basta sapere che i thread hanno due macrostadi: runnable e non runnable.
Approccio ibrido – Solaris: I thread sono creati a livello user sopra thread di livello kernel; gran parte delle
operazioni di scheduling e sincronizzazione tra thread sono svolte a livello utente, mentre il kernel dà un
accesso rapido alle risorse.
Problemi sui threads:
• Conflitti su variabili condivise
• File condivisi: può accadere che un thread chiuda un file mentre un altro thread lo sta leggendo
• Fork: quando viene clonato un processo, il processo figlio eredita tutti i thread del genitore?
• Gestione degli interrupt: più thread appartenenti allo stesso processo possono essere in attesa dello
stesso tipo di evento
INTER PROCESS COMMUNICATION (IPC):
Sono meccanismi per scambiare informazioni di vario tipo; alcuni di essi sono:
• signal: generati automaticamente dal sistema o inviati su richiesta di un processo o di una periferica
• pipe: per scambio stream caratteri tra processi padre/figlio: uno produce un output stream e uno lo usa
• FIFO (o named pipe): per scambio stream caratteri tra processi residenti sulla stessa macchina
• socket: per scambio dati tra processi residenti anche su macchine diverse
• shared memory, (un)lock per file condivisi
Segnali: sono interrupt software inviati al processo dal SO o da user process che possono essere ricevuti in
modo asincrono o meno; questo segnale deve essere trattato dal processo ricevente, che può ignorarlo o
catturarlo. Se lo cattura il P. deve gestire il segnale attraverso una funzione detta handler oppure, se questa non
è specificata, si usa una funzione definita dal SO come default.
Attesa di un segnale: in unix la primitiva è pid_t wait (int *stat_loc); è una funzione bloccante. Alla
terminazione del processo figlio, il SO invia sigchild al padre, che ne ricorda lo stato in stat_loc. Se il padre non
cattura la terminazione si parla di figlio zombie, mentre se il padre termina prima del figlio questi diventa
discendente di init.
Signal Posix: in posix ci sono vari segnali, alcuni definiti dal sistema (es: sigill = l’utente ha premuto del) e due
definibili per le applicazioni.
Costruzione di un handler: si usa la procedura signal, che consente di specificare un handler per il segnale
sig: void(*signal(int sig, void (*func)(int)))(int). Ritorna 0 se ha successo, –1 altrimenti. Ci sono altre funzioni a
disposizione:
• sigaction: e' una variante di signal
• sigreturn: ritorna da handler e ripulisce stack da esso
• sigprocmask: cambia l'insieme di segnali da bloccare
• sigpending: consente di esaminare segnali bloccati
• sigsuspend: aggiorna mask e sospende proc. in attesa signal
Terminazione su segnali: si invia un segnale ad un processo, usando la funzione int kill(pid_t pid, int sig):
invia il segnale sig ad il processo indicato da pid. Se pid = 0, va a tutti i processi nel gruppo sender; se pid= –1
va a tutti i processi con UID uguale al UID e EUID del sender. Ritorna 0 se ha successo, –1 altrimenti.
Alarm: serve a risvegliare ciclicamente un processo dormiente: unsigned int alarm(unsigned int sec). Dopo sec
secondi genera il segnale SIGALARM; se sec=0 annulla le precedenti chiamate ad alarm(), ritorna –1 per errori
o il numero di secondi mancanti all’allarme precedente.
Pause: manda in stato di wait un processo finchè questo non riceve una alarm.
RETI DI TELECOMUNICAZIONI – II parte 4
Pipe: int pipe(int fildes[2]). E’ un flusso di comunicazione unidirezionale, in cui fildes[0] è usato per leggere e
fildes[1] è usato per scrivere. Va creata prima della fork, torna 0 se ha successo, –1 altrimenti. Es.: int
canale[2]; pipe(canale); per scrivere: write(canale[1],buffer,counter). per leggere: read(canale[0],buffer,1).
Fifo: è simile alla Pipe, consentono la comunicazione tra processi residenti sulla stessa macchina ma non
imparentati: il file è noto ad entrambi, un processo scrive e l’altro legge.
Shared Memory: semafori per mutex, sincronizzazione. Usa le funzioni shmget, shmctl, …
File Locking: è il modo più pesante e meno efficiente, usa le funzioni lockf e flock
Socket: i due processi comunicano attraversto la rete (IP e UDP/TCP) e attraverso una porta speciale.
RETI:
• Client/Server: Rete punto-punto: Routing (instradamento)
Modello OSI:
Netware (Novell):
Application File Server, etc.
Transport NCP, SPX, Tcp
Network IPX
6 SISTEMI OPERATIVI – II parte
Data Link Ethernet, Token Ring, etc.
Fisico Ethernet, Token Ring, etc.
SNA (IBM):
Livelli OSI Livelli SNA
7 Transaction service
6 Presentation service
5 Data Flow
Management service
4 Transmiss. control
Virtual route
3
Explicit route
Trasmission group
2
Liv. Data Link
1 Liv. Fisico
Internet (IP, RFC791): ci sono una US Backbone e una Europe Backbone collegate fra di loro. A quella americana è collegata una
rete regionale, mentre a quella europea una rete nazionale, alle quali sono collegate le LAN.
SISTEMI DISTRIBUITI:
A metà degli anni quaranta inizia l’era dei calcolatori moderni: grandi, costosi e capaci di eseguire decine di
istruzioni al secondo. A partire dalla metà degli anni ottanta il sviluppo tecnologico su microprocessori e reti fa
abbassare enormemente i prezzi.
Sistemi distribuiti: sistemi ottenuti dall’aggregazione di singole CPU, sistemi di memorizzazione e periferiche,
oppure, un sistema distribuito è una collezione di computer indipendenti che appaiono all’utente come un
singolo sistema coerente. Il fatto che i computer siano indipendenti significa che sono autonomi. L’apparire
come un singolo sistema è una caratteristica del software. Nulla è detto relativamente alla locazione fisica dei
singoli computer. Hanno bisogno di software di sistema completamente diverso rispetto al passato.
Esempi:
• Un pool di PC nel laboratorio studenti non assegnati ad utenti, ma dinamicamente allocati secondo le
esigenze di calcolo.
• Un insieme di robot, singolarmente controllati da computer, che cooperano in una produzione
industriale e alla risoluzione di problemi nella produzione.
• Una banca con centinaia di filiali distribuite nel mondo che gestisce le operazioni dei clienti in maniera
trasparente rispetto a dove si trovi il loro conto corrente.
Vantaggi sui sistemi centralizzati:
• I sistemi distribuiti hanno un miglior rapporto costo/ prestazione.
• Possono fornire prestazioni assolute maggiori di qualsiasi sistema centralizzato.
• Alcune applicazioni sono intrinsecamente distribuite (es: approvvigionamento in catene di supermercati;
allineamento di sequenze; giochi, …).
• Affidabilità: se ad ogni istante il 5% delle risorse di un sistema distribuito è guasto, si ha un degrado
delle prestazioni del 5%.
• Crescita incrementale: se i bisogni di una azienda crescono, un nuovo sistema centralizzato più grande è
necessario…
Vantaggi sui Sistemi Indipendenti:
• Se si utilizzano i singoli sistemi indipendentemente il risultato non è sempre la “somma” dei singoli
risultati (es: un sistema di prenotazioni non può essere costituito da stazioni indipendenti).
• La condivisione delle risorse può riguardare strumenti costosi o unici (es: telescopi, microscopi,
periferiche…).
• Connettendo insieme un gruppo di calcolatori isolati in un sistema distribuito si migliora la
comunicazione interpersonale (es: sistemi P2P per file sharing).
• Singoli sistemi non cooperanti saranno sempre più rari.
Svantaggi:
• Disegno e implementazione del software: gestione dell’eterogeneità e trasparenza, allocazione delle
risorse, scheduling, memorizzazione…
SISTEMI OPERATIVI – II parte 7
• Affidabilità: le risorse possono appartenere ad organizzazioni differenti; la rete di comunicazione può
perdere messaggi o saturarsi.
• Protezione e privacy: la condivisione di informazioni non sempre è vantaggiosa.
Organizzazione Hardware:
Tutti i sistemi distribuiti sono costituiti da più CPU; la maniera in cui queste sono connesse e comunicano
conduce a diverse organizzazioni.
Diverse classificazioni sono state proposte negli anni, ma nessuna è stata ampiamente adottata. Tra queste la più
famosa è la tassonomia di Flynn (1972).
Le caratteristiche essenziali per Flynn sono i flussi (stream) di dati e istruzioni:
• Single Instruction Single Data (SISD) tutti i monoprocessori
• Single Instruction Multiple Data (SIMD) processori vettoriali
• Multiple Instruction Single Data (MISD) nessun computer
• Multiple Instruction Multiple Data (MIMD) tutti i sistemi distribuiti: i sistemi MIMD che
condividono la memoria sono detti multiprocessori, gli altri multicomputer.
Software:
Sistema Descrizione Scopo principale
NOS (Network Sistema operativo debolmente accoppiato per Offre servizi locali a
Operating System) multicomputer eterogenei (LAN e WAN) client remoti
DOS (Distributed Sistema operativo strettamente accoppiato per Nasconde e gestisce
Operatine System) multicomputer e multiprocessori omogenei risorse hardware
Middleware Strato di software posto sopra un NOS per implementare Fornisce trasparenza
servizi general-purpose per multicomputer eterogenei alla distribuzione
Sistemi Operativi di Rete: offre un ambiente nel quale gli utenti possono accedere alle risorse remote e
condividere file. Esempi di servizi messi a disposizione sono: accesso alle risorse con telnet o rlogin,
autenticazione centralizzata, condivisione dei file, esecuzione remota mediante chiamate a procedura remota.
8 SISTEMI OPERATIVI – II parte
In un tale ambiente un sistema operativo gestisce le singole risorse e le comunicazioni tra di esse. Il sistema
operativo dei singoli computer può essere o meno lo stesso.
Sistemi Operativi Distribuiti: il trasferimento di dati e processi è sotto il controllo del sistema operativo. La
comunicazione interprocesso avviene mediante lo stesso meccanismo sia localmente, sia in remoto. Sono
presenti meccanismi globali di protezione, gestione dei processi, accesso alla memoria secondaria. Gestiscono
sia multicomputer, sia multiprocessori:
• In un sistema operativo per multiprocessori tutte le strutture dati necessarie alla gestione dell’hardware
si trovano nella memoria condivisa e vanno protette da accessi concorrenti.
• Nei sistemi operativi per multicomputer tali strutture dati non sono facilmente condivisibili e l’unico
mezzo di comunicazione è lo scambio dei messaggi. Un utente accede alle risorse remote così come
accade per quelle locali.
Facoltà di INGEGNERIA
Corso di Laurea in
INGEGNERIA INFORMATICA
Sistemi Operativi