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.</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.</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.</p> Signup and view all the answers

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

    <p>IPC_UPDATE</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.</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.</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.</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.</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.</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.</p> Signup and view all the answers

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

    <p>Pipe.</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.</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.</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.</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.</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.</p> Signup and view all the answers

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

    <p>Riduce la portabilità dell'applicazione.</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.</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.</p> Signup and view all the answers

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

    <p>Il valore (void *) -1.</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.</p> Signup and view all the answers

    Qual è la funzione della system call shmctl()?

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

    Cosa indica l'argomento cmd nella shmctl()?

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

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

    <p>IPC_RMID</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</p> Signup and view all the answers

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

    <p>0</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</p> Signup and view all the answers

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

    <p>Puntatore a una struttura shmid_ds</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</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.</p> Signup and view all the answers

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

    <p>Vengono staccati automaticamente.</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.</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.</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.</p> Signup and view all the answers

    Qual è il significato della chiamata shmat()?

    <p>Attacca il segmento di SM al processo.</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.</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.</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</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</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</p> Signup and view all the answers

    Quale semaforo viene inizialmente riservato dal lettore?

    <p>READ_SEM</p> Signup and view all the answers

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

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

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

    <p>Il semaforo dello scrittore è inizialmente disponibile</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</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</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</p> Signup and view all the answers

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

    <p>Per evitare deadlock tra i processi</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()</p> Signup and view all the answers

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

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

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

    <p>Stacca un segmento di memoria condivisa</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</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.</p> Signup and view all the answers

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

    <p>shmget()</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.</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</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.</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</p> Signup and view all the answers

    Cosa rappresenta la funzione snprintf nel codice fornito?

    <p>Copia un messaggio in un buffer limitato.</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.</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.</p> Signup and view all the answers

    Qual è la funzione della chiamata shmat()?

    <p>Attaccare un segmento di memoria condivisa al processo.</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.</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().</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.</p> Signup and view all the answers

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

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

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

    <p>Il suo ID.</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.</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.</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à.</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.</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.</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.</p> Signup and view all the answers

    Qual è l'argomento key in shmget()?

    <p>Una chiave generata da ftok() o valore IPC_PRIVATE.</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.</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.</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.</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.</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.</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.</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.</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.</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()</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</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</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</p> Signup and view all the answers

    Quale semaforo è inizialmente disponibile per il processo scrittore?

    <p>WRITE_SEM</p> Signup and view all the answers

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

    <p>Garantire accesso alternato alla memoria condivisa</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</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</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</p> Signup and view all the answers

    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

    Use Quizgecko on...
    Browser
    Browser