cerca
Sistemi Operativi - Appunti caotici
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Uni.SO-Mod3-4-Lez3 History

Hide minor edits - Show changes to markup

Added lines 42-55:

Pag 5

Produttore-Consumatore (1)

...

Produttore-Consumatore (2)

...

Pag 6

Produttore-Consumatore (3)

Utilizzo un buffer circolare (dal punto di vista logico, dato che fisicamente deve essere ovviamente realizzato in modo lineare) in cui P mette dentro uno dopo l'altro i propri messaggi e Q andrà a tirar fuori le informazioni che gli servono.

Produttore-Consumatore (4)

...

Changed line 36 from:

Condivisione di buffer(1)

to:

Condivisione di buffer(1)

Deleted lines 34-36:
Changed lines 36-41 from:
to:

Condivisione di buffer(1)

Il processo mittente scriverà le sue informazioni all'interno del buffer, informazioni che verranno poi lette dal processo ricevente. Il buffer conterrà solo le informazioni, e non quindi tutte le variabili globali, anche se ho diversi problemi.

Condivisione di buffer(2)

I problemi che sorgono sono sempre quelli relativi alla sincronizzazione per evitare inconsistenze nei dati. L'unico vantaggio è che si tratta di una zona di memoria il cui spazio è limitato, quindi le operazioni di copiatura dell'informazione sono abbastanza veloci.

Changed lines 30-32 from:

Il problema sorge quando il processo ricevente effettua una modifica dell'informazione acquisita. Il problema che sorge è appunto che il sistema operativo deve rieffetuare delle operazioni di lettura e scrittura sprecando un sacco di tempo. Queste operazioni sono relativamente veloci se la parola da copiare è corta, la situazione si aggrava se le parole di memoria aumentano (è un rapporto direttamte proporzionale, aumenta l'una aumenta anche l'altro).

to:

Il problema sorge quando il processo ricevente effettua una modifica dell'informazione acquisita. Il problema che sorge è appunto che il sistema operativo deve rieffetuare delle operazioni di lettura e scrittura sprecando un sacco di tempo. Queste operazioni sono relativamente veloci se la parola da copiare è corta, la situazione si aggrava se le parole di memoria aumentano (è un rapporto direttamte proporzionale, aumenta l'una aumenta anche l'altro). Per risolvere questo problema devo devo dimensionare accuratamente lo spazio di memoria che voglio condividere. L'idea di fondo è che piuttosto di crare uno spazio condiviso enorme (che mi porta al problema di prima), creo diversi spazi di memoria che condividerò solo più piccoli.

Realizzazione con area comune fisicamente condivisa

L'alternativa al metodo precedente è dedicare fisicamente una porzione di memoria. Per far questo devo poter garantire l'accesso, da parte dei due processi, a questa zona di memoria condivisa. Questo lo realizzo facendo rientrare l'indirizzo della memoria condivisa fra quelli a cui i processi possono accedere, dando di fatto i permessi per l'accesso. Utilizzando questo metodo risparmio un sacco di tempo evitanto accessi in lettura e scrittura da parte del sistema operativo in quanto i due processi vi possono accedere liberamente. Devo stare attento solo alle politiche di sincronizzazione degli accessi per evitare inconsistenze nei dati.

Changed lines 28-30 from:

Con questa tecnica dedico un'area di memoria temporanea

to:

Con questa tecnica dedico un'area di memoria temporanea. I due processi P e Q, che si trovano in memoria per comunicare devono appellarsi al sistema operativo, in quanto i processi hanno visibilità limitata al loro proprio spazio di indirizzamento, sempre per evitare che facciano danni permanenti. Il sistema operativo dunque copia il blocco di memoria del processo mittente contente l'informazione e lo copia in un blocco della sua memoria, la quale è temporanea. Una volta acquisito tutto il blocco dal processo mittente il sistema operativo lo copia all'interno del processo ricevente, dando così l'impressione di uno spazio di memoria condivisa. Si ricorre al sistema operativo in quanto lui svolge tutte le operazioni in modalità superuser.
Il problema sorge quando il processo ricevente effettua una modifica dell'informazione acquisita. Il problema che sorge è appunto che il sistema operativo deve rieffetuare delle operazioni di lettura e scrittura sprecando un sacco di tempo. Queste operazioni sono relativamente veloci se la parola da copiare è corta, la situazione si aggrava se le parole di memoria aumentano (è un rapporto direttamte proporzionale, aumenta l'una aumenta anche l'altro).

Changed lines 20-21 from:
to:
  • Dato che la comunicazione è diretta i due processi che vogliono comunicare devono conoscersi;
  • Devo evitare inconsistenze nei dati che voglio condividere, quindi i dati devono essere validi;
  • Devo quindi rispettare delle politiche di sincronizzazione per evitare inconsistenze nei dati;
Changed lines 27-28 from:
to:

Realizzazione con area comune copiata dal sistama operativo

Con questa tecnica dedico un'area di memoria temporanea

Added lines 1-28:

(:title Sistemi Operativi - Appunti caotici:) Torna alla pagina di Sistemi Operativi


 :: Appunti caotici ::

Lezione 3 Comunicazione con memoria condivisa

Pag 2

Condivisione di variabili globali

In figura posso vedere che ho due processi P e Q, i quali possediono nella memoria il loro stack, il loro heap ecc., ma possiedono un blocco di memoria che è condiviso da entrambi i processi. Tale condivisione viene creata affinchè i due processi possano comunicare. Con la condivisione della memoria però ho diversi problemi da risolvere, uno di questi è la possibilità di avere delle inconistenze nelle informazioni lette dal processo ricevente. Tali incosistenze si verificano a causa di un accesso da parte del processo ricevente durante la scrittura dei dei dati da parte del processo mittente, questo porta ad una lettura di informazione errata. Per risolvere questo problema devo poter inserire delle politiche di sincronizzazione degli accessi da parte dei processi.
Utilizzando questo metodo posso tollerare questi incovenienti a patto che ci sia una rigida separazione fra i due processi e in secondo luogo perchè la porzione di memoria condivisa è abbastanza limitata. Un altro motivo che mi porta ad poter tenere in considerazione questo metodo è che comunque le altre zone di memoria sono protette da tentativi di accesso, quindi non possono modificare zone importanti come quelle che contengono il codice del sistema operativo.

Problemi della condivisione di variabili globali

I problemi che possono sorgere nell'utilizzare la condivisione delle variabili globali sono:

Pag 3

Pag 4


Torna alla pagina di Sistemi Operativi