Anteprima
Vedrai una selezione di 14 pagine su 62
Appunti di Sistemi Operativi T Pag. 1 Appunti di Sistemi Operativi T Pag. 2
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 6
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 11
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 16
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 21
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 26
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 31
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 36
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 41
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 46
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 51
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 56
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Appunti di Sistemi Operativi T Pag. 61
1 su 62
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

COMUNICAZIONE TRA PROCESSI UNIX

Processi Unix non possono condividere memoria ma l'interazione tra essi può avvenire attraverso condivisione di file, con la conseguente complessità nei meccanismi di sincronizzazione, o attraverso strumenti di Inter Process Communication per comunicazione sulla stessa macchina (pipe e fifo) o comunicazione su nodi diversi della stessa rete (socket):

  • Pipe: canale di comunicazione tra processi. Caratteristiche della pipe:
    • Unidirezionale: accessibile tramite un estremo in scrittura e tramite l'altro in lettura
    • Molti-a-molti: più processi possono spedire/ricevere messaggi attraverso la stessa pipe, mantenendo la unidirezionalità
    • Capacità limitata: può gestire l'accodamento di un numero limitato di messaggi in modalità FIFO. Il limite del numero dei messaggi in coda è stabilito dalla dimensione della pipe stessa

Per i processi è possibile accedere alla pipe mediante le

Le stesse system call di accesso ai file, questo grazie all'omogeneità con i file di Unix. La comunicazione tra processi mediante la pipe è indiretta (effettuata senza naming esplicito e tramite una mailbox) (Fig. 28).

Comunicazione mediante pipe

Uno stesso processo può depositare (send) e prelevare (receive) messaggi nella pipe tramite i due estremi, può esserci anche una comunicazione bidirezionale ma soltanto attraverso una rigida sincronizzazione, con conseguente rallentamento e perdita dei vantaggi di questo canale. Per creare una pipe si utilizza la specifica system call pipe, essa ha la seguente struttura:

int pipe(int fd[2])

Il parametro fd[2] è il puntatore a un vettore contenente due file descriptor inizializzati dalla system call stessa in caso di successo:

  • fd[0] è il lato di lettura della pipe
  • fd[1] è il lato di scrittura della pipe

Il ritorno è '0' in caso di successo, '-1' in caso di fallimento.

La pipe, in caso di successo, alloca due nuovi elementi nella tabella dei file aperti del processo e li assegna ai rispettivi filedescriptor a fd[0] e fd[1]. Sempre grazie all'omogeneità di Unix è possibile accedere alla pipe mediante system call read, per la receive, e write, per la send. Il canale di comunicazione ha capacità limitata e necessita di sincronizzazione tra i processi per interrompere la lettura dei messaggi in caso di pipe vuota o la scrittura di messaggi in caso di pipe piena. La sincronizzazione viene effettuata in modo automatico dal canale, consentendo così a read e write di essere sospensive in determinate circostanze. È ovvio che si possano scambiare messaggi tramite una pipe solo processi appartenenti alla stessa gerarchia. Ogni processo che utilizza la pipe ne può chiudere un estremo mediante una close (solitamente, infatti, i canali che non vengono utilizzati vengono chiusi localmente da un processo), occorre

peròspecificare che un estremo risulta effettivamente chiuso solo se tutti i processi che ne hannovisibilità invocano una close. Nel caso in cui un processo P tenti la lettura da una pipe vuotae con lato di scrittura effettivamente chiuso, la read ritornerebbe ‘0’. Nel caso in cui unprocesso P tenti la scrittura da una pipe il cui lato di lettura è effettivamente chiuso, la writeritornerebbe ‘-1’ ed il segnale SIGPIPE verrebbe inviato a P per notificare una broken pipe.Qualunque shell di Unix prevede l’utilizzo di operatori di ridirezione (‘>’, ‘<’, ‘>>’) e di piping(‘|’) nel caso in cui si invochino comandi di shell e se ne vogliano modificare le impostazionidi default rispetto alle informazioni processate in ingresso o in uscita. Quindi si ha:o Ridirezione in output: con la sintassi $ Comando > F l’output del comando vienescritto nel file F, sovrascrivendone

l'eventuale contenutoo Ridirezione in append: con la sintassi $ Comando >> F l'output del comando viene scritto in coda nel file F, senza sovrascriverne il contenutoo Ridirezione in input: con la sintassi $ Comando < F l'input del comando viene acquisito dal file F. Tale tipologia di ridirezione è disponibile solo per i comandi filtro, ovvero quelli che, di default, lavorano su dati provenienti da standard inputo Piping: con la sintassi $ Comando1 | Comando2 | Comando3 l'output del Comando1 viene ridiretto nell'input del Comando2 e l'output del Comando2 viene ridiretto nell'input del Comando3. I tre comandi vengono eseguiti in maniera concorrente È possibile effettuare la ridirezione di comandi su file, ad esempio una ridirezione in output, chiudendo il file descriptor 1 (quello corrispondente allo standard output) e, successivamente, aprendo il file desiderato in modalità di lettura. Questo andrà ad inserire un

elemento nella tabella dei file aperti di processo alla prima posizione libera (quella dellostdout). Da quel momento in poi tutti i comandi che scrivono su standard output andrannoinvece a scrivere le proprie informazioni sul file scelto. Per duplicare un elemento dellainttabella dei file aperti di processo uso la system call dup, essa ha la seguente sintassi:dup(int fd). Il parametro fd è il file descriptor del file da duplicare. Il ritorno è il nuovo file descriptor del file copiato, -1 in caso di errore. La dup, in caso di successo, duplical'elemento fd della tabella dei file aperti di processo nella sua prima posizione libera (quellacon indice minimo). La pipe ha però due svantaggi:

  1. Consente la comunicazione solo tra processi in relazione di parentela
  2. Non è persistente, ovvero viene distrutta alla terminazione dei processi che lautilizzano

Fifo: canale di comunicazione tra processi analogo alla pipe. La fifo è un

Un canale unidirezionale del tipo first-in-first-out rappresentato da un file nel file system, rende la fifo persistente e a potenziale visibilità globale (a differenza della pipe). In quanto file, questo canale possiede una serie di diritti e una specifica lunghezza. Per creare una fifo utilizzo la system call mkfifo, essa ha la seguente sintassi: mkfifo(pathname, mode). Il parametro pathname è il nome della fifo, mode sono i permessi del file. Il ritorno è '0' in caso di successo, un valore negativo in caso di fallimento. Una volta creata una fifo può essere gestita come tutti i file (apertura, chiusura, eliminazione).

NONO BLOCCO DI SLIDE (4-Scheduling)

SCHEDULING DELLA CPU

Lo scheduling è quell'attività che il SO svolge per assegnare l'uso della CPU a un nuovo processo, ciò avviene attraverso lo scheduler che effettua la sua selezione all'interno della coda dei processi pronti (ready queue) secondo

Politiche specifiche di scheduling (algoritmi di scheduling). L'obiettivo principale della multiprogrammazione è ovviamente massimizzare l'uso della CPU, infatti essa è una risorsa preziosa che, in quanto tale, è opportuno che venga usata il più possibile. Come venga gestita la ready queue dipende dalla politica dello scheduler. Ogni processo durante la sua vita alterna iterativamente due fasi di burst (=raffica):

  • CPU burst: fasi in cui viene impiegata soltanto la CPU. Queste fasi terminano con la terminazione del processo o con la sua attesa di un evento
  • I/O burst: fasi in cui il processo non può utilizzare la CPU, in quanto è impegnato in operazioni di input/output da/verso dispositivi. Durante queste fasi lo scheduler riassegna la CPU ad un altro processo

In generale è possibile effettuare una classificazione dei processi in due categorie:

  • I/O bound: processi che presentano una prevalenza di attività di I/O.

Tipicamente si hanno molte fasi di CPU burst di breve durata intervallate da I/O burst di lunga durata• CPU bound: processi che presentano una prevalenza di attività di computazione.Tipicamente si hanno molte fasi di I/O burst di breve durata intervallate da CPU burst dilunga durataÈ possibile effettuare una classificazione degli algoritmi di scheduling in due categorie:• Algoritmi senza prelazione (non pre-emptive): la CPU rimane allocata al processo in runninfinché esso non si pone in attesa di un evento o termina• Algoritmi con prelazione (pre-emptive): il processo che sta utilizzando la CPU può essereprelazionato, ovvero il SO può sottrargli forzatamente la CPU per assegnarla ad un nuovoprocesso. È il caso dei sistemi time sharing.33Le politiche (algoritmi di scheduling) costituiscono l’insieme dei criteri che vengono messi in praticadallo scheduler per scegliere il processo a cui assegnare la CPU (parte decisionale),

requisiti contemporaneamente, quindi è necessario trovare un compromesso tra di essi.contemporaneamente, occorre quindi porsi diversi obiettivi a seconda del SO: nei sistemi batch si tende a massimizzare il throughput e minimizzare il turnaround, mentre nei sistemi multiprogrammati si punta a minimizzare tempo medio di risposta e tempo di attesa. ALCUNI ALGORITMI DI SCHEDULING
  • FCFS (First Come First Served): la ready queue viene gestita in modalità FIFO, ovvero i processi vengono schedulati secondo l'ordine d'arrivo nella coda. Si tratta di un algoritmo di scheduling non pre-emptive, quindi ogni volta che un processo viene schedulato esso utilizza la CPU per il tempo a lui necessario.
Pro:
  • Algoritmo fair (=equo), ovvero non può mai succedere che un processo venga ritardato considerevolmente a causa delle decisioni dello scheduler
Contro:
  • Semplicità: nel caso di processi in attesa dietro a processi CPU bound il tempo di attesa può essere molto alto
  • Effetto convoglio: se molti processi

I/O bound seguo

Dettagli
Publisher
A.A. 2019-2020
62 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher markboldro di informazioni apprese con la frequenza delle lezioni di Sistemi operativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Bologna o del prof Ciampolini Anna.