Laboratorio di Sistemi Operativi: Memoria Condivisa
93 Questions
0 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

Qual è il ruolo della chiamata shmctl() nel contesto della memoria condivisa?

  • Estendere la dimensione del segmento di memoria condivisa.
  • Modificare i permessi di un segmento di memoria condivisa.
  • Creare un nuovo segmento di memoria condivisa.
  • Cancellare il segmento di memoria condivisa. (correct)

Cosa succede se un processo tenta di cancellare un segmento di memoria condivisa?

  • La cancellazione è possibile solo se tutti i processi lo hanno staccato. (correct)
  • Il segmento viene immediatamente distrutto.
  • La cancellazione avviene automaticamente dopo un timeout.
  • Il processo viene terminato.

Cosa rappresenta l'argomento 'key' nella funzione shmget()?

  • Il valore di ritorno della funzione shmget().
  • La dimensione del segmento di memoria condivisa.
  • Un identificatore unico per il segmento di memoria condivisa. (correct)
  • Il numero di processi attaccati al segmento.

Qual è il significato del flag IPC_CREAT nella chiamata shmget()?

<p>Crea un nuovo segmento se non esiste. (A)</p> Signup and view all the answers

Cos'è l'argomento 'size' nella funzione shmget()?

<p>Un intero positivo che rappresenta la dimensione del segmento in bytes. (B)</p> Signup and view all the answers

Cosa avviene quando si utilizza la shmget() su un segmento esistente?

<p>La dimensione non ha effetto sul segmento esistente. (A)</p> Signup and view all the answers

Quale dei seguenti non è un flag che può essere utilizzato in shmget()?

<p>IPC_UPDATE (C)</p> Signup and view all the answers

Come viene gestita la dimensione di un segmento di memoria condivisa dal kernel?

<p>Deve essere un multiplo della dimensione delle pagine di sistema. (A)</p> Signup and view all the answers

Qual è la principale funzione della memoria condivisa (shared memory)?

<p>Consentire a due o più processi di condividere la stessa regione di memoria. (C)</p> Signup and view all the answers

Perché la memoria condivisa è considerata più veloce rispetto a pipe e code di messaggi?

<p>Perché i dati non devono essere copiati da un buffer. (D)</p> Signup and view all the answers

Quale delle seguenti affermazioni è vera riguardo alla gestione dei dati nella memoria condivisa?

<p>I dati sono immediatamente disponibili per tutti i processi che condividono il segmento. (A)</p> Signup and view all the answers

Qual è un vantaggio della programmazione con la memoria condivisa?

<p>Consente la comunicazione senza l'overhead di copie di dati. (D)</p> Signup and view all the answers

Quale dei seguenti è un elemento cruciale nella gestione della memoria condivisa?

<p>La sincronizzazione tra processi per evitare conflitti. (D)</p> Signup and view all the answers

Quale metodo di IPC è considerato meno veloce della memoria condivisa?

<p>Pipe. (A)</p> Signup and view all the answers

Che tipo di memoria fisica utilizza la memoria condivisa?

<p>Una porzione di memoria fisica comune a più processi. (A)</p> Signup and view all the answers

Quale delle seguenti affermazioni è falsa riguardo alla memoria condivisa?

<p>Proibisce l'accesso contemporaneo ai dati da parte di più processi. (D)</p> Signup and view all the answers

Cosa accade se si specifica IPC_CREAT e un segmento con la chiave già esiste?

<p>Viene restituito un errore EEXIST. (C)</p> Signup and view all the answers

Quale delle seguenti dichiarazioni descrive meglio la funzione shmget()?

<p>Funziona come malloc ma accessibile a più processi. (D)</p> Signup and view all the answers

Qual è il comportamento della funzione shmat() quando si passa NULL come parametro shmaddr?

<p>Il segmento viene attaccato all'indirizzo appropriato dal kernel. (A)</p> Signup and view all the answers

Cosa accade se si specifica un indirizzo non-NULL per shmaddr?

<p>Riduce la portabilità dell'applicazione. (C)</p> Signup and view all the answers

Qual è il valore di ritorno della funzione shmat() in caso di successo?

<p>Indirizzo al quale il segmento di SM è attaccato. (D)</p> Signup and view all the answers

Quale dei seguenti è VERO riguardo all'uso di shmget() con strutture?

<p>È necessario passare sizeof(struct libro) per allocare un'area per una struttura. (B)</p> Signup and view all the answers

Che cosa restituisce shmat() se si verifica un errore?

<p>Il valore (void *) -1. (B)</p> Signup and view all the answers

Quale delle seguenti affermazioni è CORRETTA riguardo alla memoria condivisa?

<p>La memoria condivisa permette a più processi di accedere allo stesso spazio di memoria. (C)</p> Signup and view all the answers

Qual è la funzione della system call shmctl()?

<p>Controllare un segmento di memoria condivisa (C)</p> Signup and view all the answers

Cosa indica l'argomento cmd nella shmctl()?

<p>L'operazione da eseguire sul segmento (B)</p> Signup and view all the answers

Quale comando viene utilizzato per marcare un segmento di memoria condivisa per la cancellazione?

<p>IPC_RMID (A)</p> Signup and view all the answers

Cosa accade quando si utilizza IPC_RMID su un segmento che è attaccato da processi?

<p>Il segmento rimane finché non viene staccato da tutti i processi (D)</p> Signup and view all the answers

Qual è il risultato della chiamata a shmctl() in caso di successo?

<p>0 (A)</p> Signup and view all the answers

Quale operazione utilizza la struttura shmid_ds associata a un segmento di memoria condivisa?

<p>Recuperare e aggiornare informazioni sul segmento (B)</p> Signup and view all the answers

Qual è l'argomento buf utilizzato nella chiamata a shmctl()?

<p>Puntatore a una struttura shmid_ds (A)</p> Signup and view all the answers

Cosa fa l'operazione IPC_SET nella chiamata a shmctl()?

<p>Aggiorna i membri della struttura shmid_ds (C)</p> Signup and view all the answers

Perché è necessario un metodo di sincronizzazione nell'uso della memoria condivisa (SM)?

<p>Per evitare che i processi eseguano aggiornamenti simultanei. (D)</p> Signup and view all the answers

Cosa succede ai segmenti di memoria condivisa quando un processo termina?

<p>Vengono staccati automaticamente. (D)</p> Signup and view all the answers

Qual è il primo passo per utilizzare la memoria condivisa?

<p>Chiamare shmget() per creare o ottenere un identificatore. (A)</p> Signup and view all the answers

Che cosa significa che un processo utilizza il segmento di SM come parte del proprio spazio di indirizzamento logico?

<p>Il processo accede al segmento come se fosse sua memoria privata. (B)</p> Signup and view all the answers

Cosa succede quando un processo chiama exec() in relazione ai segmenti di SM?

<p>I segmenti vengono staccati, non distrutti. (C)</p> Signup and view all the answers

Qual è il significato della chiamata shmat()?

<p>Attacca il segmento di SM al processo. (B)</p> Signup and view all the answers

Che cosa rappresenta uno spazio di indirizzamento logico in un processo?

<p>L'area di memoria virtuale utilizzata da quel processo. (C)</p> Signup and view all the answers

Cosa significa che un figlio creato con fork() eredita i segmenti di SM del genitore?

<p>Entrambi i processi possono accedere alle stesse informazioni nella SM. (B)</p> Signup and view all the answers

Qual è il compito principale del processo scrittore in questo contesto?

<p>Riservare i semafori per l'accesso esclusivo alla memoria condivisa (D)</p> Signup and view all the answers

Cosa accade dopo che il processo scrittore copia i dati nella memoria condivisa?

<p>Il processo lettore può accedere immediatamente alla memoria condivisa (B)</p> Signup and view all the answers

Qual è il ruolo dei semafori in questo sistema di comunicazione tra processi?

<p>Sincronizzare l'accesso alla memoria condivisa (D)</p> Signup and view all the answers

Quale semaforo viene inizialmente riservato dal lettore?

<p>READ_SEM (A)</p> Signup and view all the answers

Quale operazione il processo scrittore deve eseguire al termine della scrittura?

<p>Rilasciare il semaforo di lettura (D)</p> Signup and view all the answers

Quale delle seguenti affermazioni è vera riguardo all'inizializzazione dei semafori?

<p>Il semaforo dello scrittore è inizialmente disponibile (C)</p> Signup and view all the answers

Che tipo di operazione esegue il processo lettore dopo aver riservato il semaforo READ_SEM?

<p>Copia i dati dalla memoria condivisa a stdout (C)</p> Signup and view all the answers

Qual è la conseguenza di non gestire correttamente i semafori in questo sistema?

<p>Accesso simultaneo alla memoria condivisa (B)</p> Signup and view all the answers

Che cosa rappresenta il segmento di memoria condivisa in questo contesto?

<p>Un'area di comunicazione tra processi (C)</p> Signup and view all the answers

Perché è importante il rilascio dei semafori dopo l'uso?

<p>Per evitare deadlock tra i processi (B)</p> Signup and view all the answers

Quale operazione viene utilizzata per rendere un segmento di memoria condivisa parte della memoria virtuale di un processo?

<p>shmat() (D)</p> Signup and view all the answers

Cosa accade a un segmento di memoria condivisa quando un processo termina?

<p>Viene staccato automaticamente (C)</p> Signup and view all the answers

Qual è il risultato di una chiamata a shmdt()?

<p>Stacca un segmento di memoria condivisa (C)</p> Signup and view all the answers

Qual è lo scopo principale della memoria condivisa in un contesto di IPC?

<p>Permettere scambi rapidi di informazioni tra processi (A)</p> Signup and view all the answers

Quale affermazione descrive meglio il ruolo del lettore e dello scrittore nella memoria condivisa?

<p>Il lettore e lo scrittore collaborano per leggere e scrivere dati nel segmento di memoria condivisa. (D)</p> Signup and view all the answers

Quale funzione viene usata per creare un nuovo segmento di memoria condivisa?

<p>shmget() (B)</p> Signup and view all the answers

Qual è la funzione principale dei semafori nel contesto della memoria condivisa?

<p>Sincronizzare l'accesso al segmento di memoria condivisa tra i processi. (D)</p> Signup and view all the answers

Come si comporta la memoria condivisa quando un processo crea un figlio con fork()?

<p>Il figlio eredita i segmenti di memoria condivisa del genitore (D)</p> Signup and view all the answers

Cosa deve avvenire affinché un processo scrittore possa scrivere dati nel segmento di memoria condivisa?

<p>Deve essere utilizzato uno semaphore per garantire l'accesso esclusivo. (D)</p> Signup and view all the answers

Cosa significa che un processo usa il segmento di memoria condivisa come parte del proprio spazio di indirizzamento logico?

<p>Tratta la memoria condivisa come una porzione normale di memoria (A)</p> Signup and view all the answers

Cosa rappresenta la funzione snprintf nel codice fornito?

<p>Copia un messaggio in un buffer limitato. (D)</p> Signup and view all the answers

Quale delle seguenti operazioni deve essere eseguita per rimuovere un segmento di memoria condivisa?

<p>Utilizzare IPC_RMID nella chiamata a shmctl per marcare il segmento per la cancellazione. (A)</p> Signup and view all the answers

Cosa succede se viene utilizzato il flag SHM_RDONLY durante l'attacco di un segmento di SM?

<p>Il segmento è accessibile solo in lettura. (B)</p> Signup and view all the answers

Qual è la funzione della chiamata shmat()?

<p>Attaccare un segmento di memoria condivisa al processo. (A)</p> Signup and view all the answers

Cosa accade se un processo tenta di scrivere in un segmento di SM attaccato come read-only?

<p>Si verifica un errore di accesso. (C)</p> Signup and view all the answers

Quale valore deve avere l'argomento shmaddr nella chiamata shmdt()?

<p>Un indirizzo restituito da una precedente chiamata a shmat(). (D)</p> Signup and view all the answers

Qual è la differenza principale tra sganciamento e cancellazione di un segmento di SM?

<p>La cancellazione implica che il segmento non possa più essere accessibile. (D)</p> Signup and view all the answers

Quale comando è usato per marcare un segmento di memoria condivisa per la cancellazione?

<p>shmctl() (D)</p> Signup and view all the answers

Cosa deve essere specificato per rimuovere un segmento di SM utilizzando shmctl()?

<p>Il suo ID. (B)</p> Signup and view all the answers

Quale delle seguenti affermazioni su shmget() è corretta?

<p>Restituisce un identificatore per un segmento di memoria condivisa esistente o crea un nuovo segmento. (B)</p> Signup and view all the answers

Cosa succede se un processo richiama shmget() con un valore di size maggiore della dimensione massima consentita dal sistema?

<p>Il sistema restituisce un errore. (B)</p> Signup and view all the answers

Quale funzioni ha il flag IPC_EXCL quando utilizzato con shmget()?

<p>Prevede che il segmento venga creato solo se non esiste già. (D)</p> Signup and view all the answers

Qual è la funzione principale dell'argomento shmflg in shmget()?

<p>Specifica i permessi per il segmento di memoria condivisa. (C)</p> Signup and view all the answers

Quando si utilizza shmget() per creare un nuovo segmento, qual è il comportamento del kernel riguardo alla dimensione?

<p>Arrotonda alla dimensione successiva della pagina. (D)</p> Signup and view all the answers

Cosa sucede quando un processo che ha un segmento di memoria condivisa attaccato chiama shmctl() con IPC_RMID?

<p>Il segmento rimane intatto finché non è staccato da tutti i processi. (D)</p> Signup and view all the answers

Qual è l'argomento key in shmget()?

<p>Una chiave generata da ftok() o valore IPC_PRIVATE. (B)</p> Signup and view all the answers

Quale affermazione è vera riguardo al parametro size in shmget() quando si ottiene un segmento esistente?

<p>Non ha alcun effetto sul segmento. (A)</p> Signup and view all the answers

Qual è una delle caratteristiche principali della memoria condivisa?

<p>Permette a più processi di accedere a una stessa area di memoria fisica. (C)</p> Signup and view all the answers

In quale modo la memoria condivisa si distingue dalle pipe e dalle code di messaggi?

<p>Fornisce un accesso diretto alla memoria, riducendo il numero di copie. (B)</p> Signup and view all the answers

Qual è un vantaggio significativo dell'uso della memoria condivisa per la comunicazione tra processi?

<p>Consente una trasmissione dati più veloce. (B)</p> Signup and view all the answers

Quale tra le seguenti affermazioni è vera riguardo alla memoria condivisa?

<p>La memoria condivisa consente la lettura e la scrittura simultanea da più processi. (C)</p> Signup and view all the answers

Cosa accade quando un processo termina in relazione ai segmenti di memoria condivisa?

<p>Il segmento di memoria condivisa rimane intatto fino a quando tutti i processi terminano. (A)</p> Signup and view all the answers

Qual è il primo passo necessario per utilizzare la memoria condivisa?

<p>Definire la chiave per il segmento di memoria. (D)</p> Signup and view all the answers

Per quale motivo è importante avere un metodo di sincronizzazione nella memoria condivisa?

<p>Per evitare che i dati vengano sovrascritti accidentalmente. (B)</p> Signup and view all the answers

Quale funzione viene utilizzata per attaccare un segmento di memoria condivisa al proprio spazio di indirizzamento?

<p>shmat() (D)</p> Signup and view all the answers

Qual è il ruolo principale del processo scrittore in questo sistema di comunicazione?

<p>Copiare i dati dallo standard input alla memoria condivisa (D)</p> Signup and view all the answers

Cosa deve fare il processo lettore dopo aver riservato il semaforo READ_SEM?

<p>Copiare i dati dalla memoria condivisa allo standard output (D)</p> Signup and view all the answers

Qual è la conseguenza di un'errata gestione dei semafori in questo sistema?

<p>I dati possono essere sovrascritti in memoria condivisa (B)</p> Signup and view all the answers

Quale semaforo è inizialmente disponibile per il processo scrittore?

<p>WRITE_SEM (D)</p> Signup and view all the answers

Qual è l'effetto di inizializzare correttamente i semafori nel sistema?

<p>Garantire accesso alternato alla memoria condivisa (A)</p> Signup and view all the answers

Qual è il significato del termine 'memoria condivisa' in questo contesto?

<p>Memoria accessibile a più processi per la comunicazione (A)</p> Signup and view all the answers

Quale dei seguenti aspetti è essenziale per garantire la sincronizzazione tra il processo scrittore e quello lettore?

<p>Impiego di semafori per il controllo dell'accesso (A)</p> Signup and view all the answers

Quale delle seguenti affermazioni descrive meglio il processo lettore?

<p>Copia i dati dalla memoria condivisa allo standard output (C)</p> Signup and view all the answers

Flashcards

Memoria Condivisa (Shared Memory)

Un'area di memoria fisica condivisa da due o più processi, consentendo a questi di condividere e accedere a dati comuni.

Segmento di Memoria

Una porzione specifica dell'area di memoria condivisa.

IPC

Inter-Process Communication (Comunicazione Inter-Processi).

Processo Mittente

Il processo che scrive dati nella memoria condivisa.

Signup and view all the flashcards

Processo Ricevente

Il processo che legge dati dalla memoria condivisa.

Signup and view all the flashcards

Efficienza Memoria Condivisa

La memoria condivisa permette uno scambio di dati più veloce rispetto ad altre tecniche come pipe o code di messaggi.

Signup and view all the flashcards

Utilizzo Pratico Memoria Condivisa

Permette a più processi di condividere e aggiornare dati in modo efficiente.

Signup and view all the flashcards

Limiti Memoria Condivisa

Richiede programmazione più complessa per il controllo e la sincronizzazione dell'accesso dei processi.

Signup and view all the flashcards

Memoria Condivisa (MC)

Spazio di memoria accessibile da più processi contemporaneamente, permettendo lo scambio rapido di informazioni tra di loro.

Signup and view all the flashcards

Sincronizzazione (MC)

Meccanismi per evitare conflitti di accesso concorrente alla memoria condivisa da più processi.

Signup and view all the flashcards

Spazio di indirizzamento logico

Lo spazio di memoria virtuale visto da un singolo processo, separato dagli altri processi.

Signup and view all the flashcards

fork() (eredita)

Un processo figlio eredità i segmenti di memoria condivisa del processo padre.

Signup and view all the flashcards

exec()

Quando un processo usa exec(), distacca i segmenti di memoria condivisi.

Signup and view all the flashcards

shmget()

Crea un nuovo segmento di memoria condivisa o recupera l'ID di uno già esistente.

Signup and view all the flashcards

shmat()

Attacco di un segmento di memoria condivisa allo spazio di indirizzamento di un processo.

Signup and view all the flashcards

shmdt()

Distacco di un segmento di memoria condivisa dallo spazio di indirizzamento di un processo.

Signup and view all the flashcards

IPC_CREAT

Flag per shmget() che indica la creazione di un nuovo segmento di memoria condivisa, fallendo con errore EEXIST se un segmento con la stessa chiave già esiste.

Signup and view all the flashcards

shmget() vs malloc()

La funzione shmget() alloca memoria condivisa accessibile a più processi, simile alla malloc che alloca memoria solo per il processo corrente.

Signup and view all the flashcards

Shmget() - Tipo di dati

La shmget() accetta come parametro il tipo di dati da allocare, permettendo di prelevare spazio per tipi fondamentali, array e strutture.

Signup and view all the flashcards

shmat(): Attacca segmento di memoria

La funzione shmat() attacca un segmento di memoria condivisa allo spazio di indirizzamento di un processo, rendendolo accessibile.

Signup and view all the flashcards

shmat() - shmaddr NULL

Se shmaddr è NULL in shmat(), il kernel sceglie l'indirizzo di attacco del segmento di memoria.

Signup and view all the flashcards

shmat() - shmaddr NON NULL

Specificare un valore non-NULL per shmaddr in shmat() riduce la portabilità dell'applicazione, può causare errori e non è consigliato.

Signup and view all the flashcards

shmat() - valore di ritorno

La funzione shmat() restituisce l'indirizzo del segmento di memoria attaccato allo spazio di indirizzamento, utilizzabile come un normale puntatore C.

Signup and view all the flashcards

Memoria condivisa - trattamento

Il segmento di memoria attaccato tramite shmat() può essere gestito e utilizzato come qualsiasi altra parte della memoria virtuale del processo.

Signup and view all the flashcards

Semaphore

Un meccanismo di sincronizzazione utilizzato per controllare l'accesso ad una risorsa condivisa, come la memoria condivisa, evitando conflitti tra processi.

Signup and view all the flashcards

reserveSem(SEM_NAME)

La funzione che blocca il processo chiamante finché il semaforo con il nome SEM_NAME non diventa disponibile. Questo garantisce l'accesso esclusivo alla risorsa protetta dal semaforo.

Signup and view all the flashcards

releaseSem(SEM_NAME)

La funzione che rilascia il semaforo con il nome SEM_NAME, rendendolo disponibile per altri processi.

Signup and view all the flashcards

WRITE_SEM

Il semaforo che regola l'accesso in scrittura alla memoria condivisa. Soltanto un processo alla volta può scrivere.

Signup and view all the flashcards

READ_SEM

Il semaforo che regola l'accesso in lettura alla memoria condivisa. Soltanto un processo alla volta può leggere.

Signup and view all the flashcards

Memoria Condivisa

Un'area di memoria fisica condivisa da più processi, consentendo a questi di comunicare e accedere a dati comuni.

Signup and view all the flashcards

Processo Scrittore

Un processo che scrive dati nella memoria condivisa.

Signup and view all the flashcards

Processo Lettore

Un processo che legge dati dalla memoria condivisa.

Signup and view all the flashcards

Inter-Process Communication (IPC)

Una tecnica che permette la comunicazione tra processi diversi.

Signup and view all the flashcards

IPC_EXCL

Flag per shmget() che, se un'altra chiamata shmget() crea lo stesso segmento, genera un errore.

Signup and view all the flashcards

shmctl() - IPC_RMID

Flag per shmctl() che cancella un segmento di memoria condivisa.

Signup and view all the flashcards

shmget() - key

Parametri di shmget() che identificano in modo univoco un segmento di memoria condivisa.

Signup and view all the flashcards

IPC_RMID

Questo comando di shmctl() marca un segmento di memoria condivisa per la rimozione. Se nessun processo è attaccato al segmento, la rimozione avviene immediatamente. Altrimenti, il segmento viene rimosso dopo che tutti i processi lo hanno rilasciato.

Signup and view all the flashcards

shmctl() e unlink()

shmctl() con IPC_RMID è simile all'unlink() per i file. Dopo l'apertura di un file, possiamo 'marcarlo' per la cancellazione in seguito usando unlink(). Allo stesso modo, shmctl() con IPC_RMID 'segna' il segmento di memoria per essere cancellato.

Signup and view all the flashcards

shmat() e shmctl(IPC_RMID)

Dopo aver attaccato un segmento di memoria condivisa tramite shmat(), un'applicazione può marcarlo per la rimozione tramite shmctl(IPC_RMID) non appena tutti i processi lo hanno attaccato. Questo assicura che il segmento venga rimosso non appena tutti i processi rilasciano il segmento di memoria condivisa.

Signup and view all the flashcards

Qual è la differenza tra IPC_RMID e IPC_STAT?

IPC_RMID segna un segmento di memoria condivisa per la rimozione, mentre IPC_STAT copia informazioni sulla struttura shmid_ds, senza rimuovere il segmento.

Signup and view all the flashcards

Qual è lo scopo principale di shmctl()?

shmctl() è utilizzata per gestire i segmenti di memoria condivisa, permettendo di eseguire operazioni di controllo come la marcatura per la rimozione, la copia delle informazioni sulla struttura shmid_ds e l'aggiornamento dei suoi membri.

Signup and view all the flashcards

IPC (Comunicazione Inter-Processi)

È una tecnica che consente ai processi di comunicare tra loro.

Signup and view all the flashcards

Come funziona la Memoria Condivisa?

Un processo scrive dati nella memoria condivisa e questi diventano immediatamente disponibili agli altri processi che condividono lo stesso segmento.

Signup and view all the flashcards

Vantaggi memoria condivisa

È più veloce delle pipe e delle code di messaggi perché non richiede copie dei dati tra lo spazio utente e la memoria.

Signup and view all the flashcards

shmget() - size

La dimensione del segmento di memoria da creare o ottenere. Viene arrotondata al multiplo successivo della dimensione della pagina.

Signup and view all the flashcards

shmget() - shmflg

Flag che specificano i permessi per il segmento, se creare un nuovo segmento (IPC_CREAT) e se escludere la creazione se già esiste (IPC_EXCL).

Signup and view all the flashcards

shmctl() - IPC_STAT

Copia informazioni sullo stato del segmento di memoria condivisa, senza rimuoverlo.

Signup and view all the flashcards

shmat() - shmaddr

Indirizzo a cui il segmento di memoria condivisa viene attaccato allo spazio di indirizzamento di un processo. Se NULL, il kernel sceglie l'indirizzo.

Signup and view all the flashcards

Memoria Condivisa: Perché?

Permette a più processi di condividere e aggiornare dati in modo efficiente, senza la necessità di copie di dati tra lo spazio utente e la memoria.

Signup and view all the flashcards

shmat() - Flag SHM_RDONLY

Il flag SHM_RDONLY, passato come argomento a shmat(), specifica che il segmento di memoria condivisa deve essere attaccato in modalità di sola lettura. Ciò significa che il processo può solo leggere i dati dal segmento, ma non può modificarli.

Signup and view all the flashcards

shmdt() - Distacco

La funzione shmdt() distacca un segmento di memoria condivisa dallo spazio di indirizzamento virtuale di un processo. Questo significa che il processo non può più accedere al segmento di memoria condivisa finché non viene nuovamente attaccato tramite shmat().

Signup and view all the flashcards

shmdt() - Cancellazione?

La shmdt() stacca un segmento di memoria condivisa dal processo, ma non lo cancella completamente. La cancellazione del segmento viene eseguita separatamente tramite shmctl() con il comando IPC_RMID.

Signup and view all the flashcards

shmget() - Creazione di un nuovo segmento

La funzione shmget() crea un nuovo segmento di memoria condivisa quando il flag IPC_CREAT è impostato. Se un segmento con la stessa chiave esiste già, la funzione non genera un nuovo segmento.

Signup and view all the flashcards

Study Notes

Laboratorio di Sistemi Operativi - Memoria Condivisa

  • Il laboratorio tratta argomenti relativi ai sistemi operativi UNIX, con particolare attenzione alla memoria condivisa.

Argomenti del Laboratorio UNIX

  • Introduzione a UNIX
  • Integrazione C: operatori bitwise, precedenze, preprocessore, pacchettizzazione del codice, compilazione e utility Make.
  • Controllo dei processi
  • Segnali
  • Pipe e FIFO
  • Code di messaggi
  • Semafori
  • Memoria condivisa
  • Introduzione alla programmazione Bash

Credits

  • Il materiale delle lezioni si basa su presentazioni precedenti del Professor Gunetti.
  • Si fa riferimento al libro "The Linux Programming Interface" di Michael Kerrisk.
  • Si cita anche il libro "Advanced Programming in the UNIX Environment" di W. Richard Stevens.

Introduzione

  • La memoria condivisa (Shared Memory, SM) permette a due o più processi di condividere una stessa porzione di memoria fisica.
  • Ogni processo può leggere o scrivere dati nella memoria condivisa, rendendoli disponibili agli altri processi che la condividono.
  • La memoria condivisa fornisce una comunicazione inter-processo (IPC) più veloce rispetto ad altre tecniche come le pipe o le code di messaggi, poichè non prevede copie dei dati tra spazi di indirizzamento utente.

Uso della Memoria Condivisa (MC)

  • L'utilizzo della SM spesso necessita di metodi di sincronizzazione, poiche' non mediata dal kernel.
  • Ciò impedisce accessi simultanei alla memoria da parte di più processi, evitando problemi causati da aggiornamenti e letture simultanee.

Spazi di Indirizzamento

  • Ogni processo ha uno spazio di indirizzamento logico separato.
  • Un segmento di memoria condivisa può essere letto e/o scritto da più processi, facilitando lo scambio rapido di informazioni tra processi.
  • Il segmento di memoria condivisa è trattato come una parte dello spazio di indirizzamento logico di ogni processo, ma fisicamente è condiviso.

Uso della MC - Ciclo di Operazioni

  • 1. Chiamata shmget(): Crea un nuovo segmento o ottiene l'ID di un segmento esistente. L'argomento key è utilizzato per identificare il segmento.
  • 2. Chiamata shmat(): Collega il segmento di SM allo spazio di indirizzamento del processo. L'argomento shmid fornisce l'identificativo del segmento e shmaddr specifica l'indirizzo di mappa.
  • 3. Chiamata shmdt(): Distacca il segmento dallo spazio di indirizzamento del processo.
  • 4. Chiamata shmctl(): Cancella il segmento di SM.

Uso della MC - Creazione o Apertura di Segmenti

  • L'argomento key nella chiamata shmget() può essere IPC_PRIVATE per creare un segmento nuovo o una chiave generata da ftok().

Uso della MC - Dimensione del Segmento

  • L'argomento size in shmget() definisce la dimensione del segmento di memoria condivisa, espressa in byte. Il kernel arrotonda la dimensione all'intero multiplo della dimensione della pagina.

Uso della MC - Permessi

  • L'argomento shmflg specifica i permessi del segmento. Possono essere concatenati in OR (|). Flag comuni sono IPC_CREAT (crea il segmento se non esiste) e IPC_EXCL (fallisce se il segmento esiste già).

Uso della MC - Attacco del Segmento

  • shmaddr può essere NULL, il che implica che il kernel sceglie l'indirizzo dove inserire il segmento.
  • Specificare un indirizzo shmaddr diverso da NULL non è raccomandato, in quanto riduce la portabilità dell'applicazione.

Uso della MC - Valore di Ritorno di shmat()

  • shmat() restituisce l'indirizzo dove è stato mappato il segmento di memoria condivisa. Questo indirizzo può essere usato come puntatore nel programma.

Uso della MC - Accesso in Lettura Solo

  • Usare l'opzione SHM_RDONLY in shmflg permette di attaccare il segmento per solo lettura.Tentativi di scrittura sul segmento produrranno un errore.

Detaccando Segmenti

  • shmdt() stacca un segmento da uno spazio di indirizzamento.
  • L'argomento shmaddr specifica il segmento da staccare.
  • Usando shmdt() non si cancella il segmento, solo la connessione.

Detaccando Segmenti - Cancellazione

  • shmctl() cancella un segmento di memoria condivisa.
  • Si usa il comando IPC_RMID.

Esempio: Lettore e Scrittore

  • L'applicazione è suddivisa in due programmi: un lettore e uno scrittore.
  • Lo scrittore legge dati da stdin e li scrive nel segmento di memoria condivisa.
  • Il lettor legge i dati dal segmento e li stampa su stdout.

Esempio: Lettore e Scrittore - Sincronizzazione

  • I due programmi usano semafori per garantire che solo un processo alla volta acceda al segmento. Il binary semaphore protocol controlla chi ha precedenza nell'accesso.

Memoria Condivisa - Struttura shmid_ds

  • La struttura shmids contiene informazioni sul segmento di memoria, come i permessi, la dimensione, il PID del creatore e del processo che ha fatto l'ultima operazione.

Funzioni della system call shmctl()

  • IPC_RMID, IPC_STAT, IPC_SET per gestire i segmenti, operazioni comuni per il controllo di segmenti.

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Description

Scopri i concetti fondamentali della memoria condivisa nei sistemi operativi UNIX. Questo laboratorio esplora vari argomenti, dall'integrazione C alla programmazione Bash, fornendo una panoramica sulla gestione dei processi e della comunicazione tra essi. Preparati a mettere in pratica le tue conoscenze nel mondo dei sistemi operativi.

More Like This

Shared Memory Systems Quiz
5 questions

Shared Memory Systems Quiz

VirtuousPyrope1846 avatar
VirtuousPyrope1846
L07b - Distributed Shared Memory
115 questions
Use Quizgecko on...
Browser
Browser