Introduzione al Laboratorio di Sistemi Operativi
41 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

Cosa restituisce la funzione mkfifo() in caso di successo?

  • NULL
  • 1
  • 0 (correct)
  • -1
  • Quale tra questi non è un permesso specificato per il nuovo FIFO?

  • S_IWOTH (correct)
  • S_IWUSR
  • S_IXGRP
  • S_IROTH
  • Qual è il significato di S_ISUID nel contesto dei permessi dei file?

  • User-execute
  • Group-write
  • Set-user-ID (correct)
  • Sticky bit
  • Come viene specificato il mode per i permessi del nuovo FIFO?

    <p>Utilizzando l'operatore OR</p> Signup and view all the answers

    Qual è il valore ottale di S_IRUSR?

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

    Cosa accade quando un lettore tenta di leggere dati da una facility vuota?

    <p>L'operazione di lettura si blocca fino a quando i dati non sono disponibili.</p> Signup and view all the answers

    Qual è l'importanza della sincronizzazione nella memoria condivisa?

    <p>Impedisce che un processo legga dati mentre un altro li modifica.</p> Signup and view all the answers

    Quale strumento è frequentemente utilizzato per la sincronizzazione nella memoria condivisa?

    <p>Semaphore.</p> Signup and view all the answers

    Quale affermazione è vera riguardo alla memoria condivisa?

    <p>I dati sono visibili a tutti i processi che condividono quel segmento.</p> Signup and view all the answers

    Cosa si intende generalmente con il termine 'interprocess communication' (IPC)?

    <p>Facilità di comunicazione tra processi sia sincronizzati che non.</p> Signup and view all the answers

    Qual è la principale funzione di un FIFO nei processi?

    <p>Sincronizzare i processi lettori e scrittori.</p> Signup and view all the answers

    Cosa accade quando un processo apre un FIFO in modalità lettura?

    <p>Il processo si blocca finché non viene aperto un FIFO in scrittura.</p> Signup and view all the answers

    Quale condizione deve essere soddisfatta affinché l'apertura di un FIFO in scrittura abbia successo?

    <p>Un altro processo deve aprire il FIFO in lettura.</p> Signup and view all the answers

    Cosa accade se l'altra estremità di un FIFO è già aperta?

    <p>L'apertura avviene immediatamente senza blocchi.</p> Signup and view all the answers

    Quale affermazione riguardo ai flag di apertura di un FIFO è corretta?

    <p>O_WRONLY si blocca finché non viene aperto in lettura.</p> Signup and view all the answers

    Qual è la funzione di popen() nel contesto di un sistema operativo?

    <p>Restituisce uno stream di file o NULL in caso di errore</p> Signup and view all the answers

    Cosa viene restituito dalla funzione pclose() in caso di successo?

    <p>Lo status di terminazione della shell figlia</p> Signup and view all the answers

    Quale dei seguenti è un aspetto negativo dell'utilizzo della funzione popen()?

    <p>Genera processi aggiuntivi che possono ridurre l'efficienza</p> Signup and view all the answers

    Quale è il corretto utilizzo della funzione popen()?

    <p>fp = popen(cmdstring, 'r')</p> Signup and view all the answers

    Qual è la principale differenza tra un FIFO e un pipe?

    <p>Un FIFO permette comunicazione tra processi non correlati</p> Signup and view all the answers

    Cosa dovrebbe essere fatto dopo aver completato le operazioni di I/O con popen()?

    <p>Utilizzare pclose() per chiudere il pipe</p> Signup and view all the answers

    Quale valore indica che si è verificato un errore nella funzione pclose()?

    <p>-1</p> Signup and view all the answers

    Cosa fa il comando 'ls' passato a popen() nel codice fornito?

    <p>Elenca i file e le directory nella cartella corrente</p> Signup and view all the answers

    Qual è la funzione principale di una FIFO nel contesto di un'applicazione client-server?

    <p>Permettere la comunicazione tra client e server</p> Signup and view all the answers

    Come viene costruito il nome della FIFO per ciascun client?

    <p>Da un template con l'ID di processo del client</p> Signup and view all the answers

    Quale delle seguenti affermazioni è vera riguardo i dati in pipe e FIFO?

    <p>I dati sono trattati come uno stream di byte senza separazioni tra i messaggi</p> Signup and view all the answers

    Cosa devono fare il mittente e il destinatario in una comunicazione che utilizza FIFO?

    <p>Stabilire un accordo su un protocollo per separare i messaggi</p> Signup and view all the answers

    Cosa deve sapere il server riguardo alla FIFO del client per rispondere correttamente?

    <p>Il percorso della FIFO specifico per quel client</p> Signup and view all the answers

    Qual è un esempio di come viene costruito un percorso FIFO per un client?

    <p>/tmp/seqnum_cl.6514</p> Signup and view all the answers

    Quale approccio può essere utilizzato per separare i messaggi in una FIFO?

    <p>Utilizzare marcatori di fine messaggio</p> Signup and view all the answers

    Cosa rappresenta l'ID di processo (PID) in relazione alla FIFO del client?

    <p>Un identificatore unico per il client</p> Signup and view all the answers

    Cosa accade se si tenta di decrementare il valore di un semaforo sotto zero?

    <p>Il kernel blocca l'operazione fino a un aumento del valore.</p> Signup and view all the answers

    Qual è la principale differenza tra un pipe e un FIFO?

    <p>I FIFO possono essere utilizzati per la comunicazione tra processi qualsiasi.</p> Signup and view all the answers

    Come fa la shell a utilizzare l'output di un processo come input per un altro?

    <p>Utilizza i pipe per collegare i processi.</p> Signup and view all the answers

    Che funzione viene utilizzata per creare un nuovo processo in un sistema operativo?

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

    Quale comando permette di contare il numero di file in una directory?

    <p>ls -al | wc -l</p> Signup and view all the answers

    Cosa rappresenta il file descriptor nel contesto di un pipe?

    <p>Un puntatore per l'input e output standard.</p> Signup and view all the answers

    Qual è la funzione di un pipe in un sistema operativo?

    <p>Collegare l'output di un processo all'input di un altro.</p> Signup and view all the answers

    Quale dei seguenti comportamenti è tipico di una nonblocking operation sul semaforo?

    <p>Ritorna con un errore se l'operazione non può essere eseguita.</p> Signup and view all the answers

    Quando i processi sono collegati tramite un pipe, quale processo ha il write end del pipe?

    <p>Il processo che scrive dati.</p> Signup and view all the answers

    Quale parte di un comando shell è collegata a stdout nel contesto di un pipe?

    <p>Il processo scrittore.</p> Signup and view all the answers

    Study Notes

    Introduzione al Laboratorio di Sistemi Operativi

    • Il laboratorio si concentra su sistemi operativi, introducendo l'IPC (Inter-Process Communication) tramite pipe e FIFO.
    • Il docente è Daniele Radicioni.

    Argomenti del Laboratorio UNIX

    • Introduzione a UNIX
    • Integrazione C: operatori bitwise, precedenze, preprocessore, pacchetto di codice, compilazione condizionale e utility make.
    • Controllo dei processi
    • Segnali
    • Pipe e FIFO
    • Code di messaggi
    • Memoria condivisa
    • Semafori
    • Introduzione alla programmazione bash

    Credits

    • Il materiale è principalmente tratto da testi come "The Linux Programming Interface" di Michael Kerrisk e "Advanced Programming in the UNIX® Environment" di W. Richard Stevens e Stephen A. Rago.

    IPC Facilities

    • Gli strumenti UNIX per comunicazione e sincronizzazione sono divisi in tre categorie funzionali:
      • Comunicazione: faciliti lo scambio di dati tra processi.
      • Sincronizzazione: faciliti la sincronizzazione delle azioni dei processi.
      • Segnali: sebbene originariamente non progettati per la sincronizzazione, in alcune situazioni possono svolgere questo ruolo.

    Data-transfer facilities

    • Byte stream: i dati scambiati (pipe, FIFO, datagram socket) sono considerati come un flusso di byte. Ogni operazione di lettura può leggere un numero arbitrario di byte. Questo modello riflette il modo tradizionale in cui i file sono rappresentati in UNIX.
    • Messaggi: i dati scambiati (code di messaggi, socket) sono sotto forma di messaggi delimitati. Ogni operazione di lettura legge un intero messaggio e non è possibile leggere parzialmente un messaggio o più messaggi in una sola operazione.

    Memoria Condivisa

    • Permette ai processi di scambiarsi informazioni mettendole in una regione di memoria condivisa.
    • E' uno strumento veloce per la comunicazione, in quanto non richiede chiamate di sistema per i trasferimenti utente-kernel.

    Semafori

    • Un semaforo è un intero mantenuto dal kernel il cui valore non può essere minore di 0.
    • I processi possono decrementare o incrementare il valore di un semaforo.
    • Se un tentativo di decremento porta un valore sotto 0, il kernel blocca l'operazione fino a che il valore del semaforo non aumenta nuovamente.
    • In alternativa è possibile richiedere un'operazione senza blocco (non-blocking), che restituisce un errore se l'operazione non può essere eseguita.

    Pipe

    • Le pipe offrono una soluzione al problema di far sì che l'output di un processo sia utilizzato come input di un altro.
    • I FIFO sono una variazione dei pipe, che consentono la comunicazione tra processi qualsiasi.

    Pipes

    • Per eseguire comandi come ls -al | wc -l, la shell crea due processi (uno per ls e uno per wc).
    • L'output di ls (fd=1) è connesso all'input di wc (fd=0) tramite il pipe.
    • I processi non sono a conoscenza della pipe; leggono/scrivono da/su descrittori di file standard.

    I pipe sono stream di byte

    • Un pipe è un flusso di byte. Non si fa riferimento a un concetto di messaggio o delimitazione.
    • Il processo di lettura può leggere blocchi di qualsiasi dimensione, ignorando le dimensioni dei blocchi scritti dal processo di scrittura.
    • I dati passano in sequenza, e non è possibile accedere ai dati in modo non sequenziale tramite Iseek().

    Lettura da pipe

    • I tentativi di lettura su un pipe vuoto rimangono bloccati fino a quando non viene scritto almeno un byte nel pipe.
    • Quando la fine della scrittura (write end) è chiusa, il processo di lettura riceve un end-of-file (EOF) codice.
    • I pipe sono unidirezionali; i dati possono viaggiare solo in una direzione.

    Capacità limitata

    • I pipe sono buffer in memoria con capacità massima.
    • Se il buffer è pieno, le scritture successive si bloccano fino a che il buffer non viene svuotato dal processo di lettura.
    • Le applicazioni non hanno bisogno di conoscere la capacità del buffer.

    La funzione pipe()

    • La chiamata di sistema pipe() crea un nuovo pipe e fornisce due file descriptor: uno per la lettura (filedes[0]) e uno per la scrittura (filedes[1]).

    Comunicazione tra processi non imparentati

    • I pipe possono essere utilizzati per la comunicazione fra processi non imparentati (ad es., client e server) utilizzando FIFO.
    • I FIFO hanno un nome nel file system e sono aperti come file.
    • Ciò consentirà comunicazioni tra tutti i processi.

    Chiusura descrittori

    • I descrittori di file inutilizzati devono essere chiusi per evitare comportamenti errati o blocchi.

    FIFO

    • I FIFO sono simili ai pipe, ma hanno un nome nel file system.
    • Possono essere utilizzati per la comunicazione tra processi non imparentati.

    Utilizzo di FIFO

    • Quando un FIFO è aperto, è possibile usare le system call read() e write() come con i pipe.
    • I dati vengono letti nello stesso ordine in cui sono stati scritti.

    Creazione di FIFO

    • La funzione mkfifo() crea un nuovo FIFO specificato dal path e da un mode (permessi).

    Sincronizzazione con FIFO

    • L'apertura di un FIFO in modalità lettura blocca fino a quando non è aperto un FIFO in modalità scrittura.
    • L'apertura di un FIFO in modalità scrittura blocca fino a quando non è aperto un FIFO in modalità lettura.

    Application client-server

    • Il server assegna numeri sequenziali univoci ai client.
    • I client inviano le richieste al server usando un singolo FIFO server.
    • Il nome del FIFO server è definito nel file di intestazione del protocollo.

    Protocolli

    • I dati in pipe e FIFO sono stream di byte, i confini tra i multipli messaggi non sono preservati.
    • Il mittente e il ricevitore devono accordarsi su una convenzione per separare i messaggi.
    • Questo può essere un carattere delimitatore (es. newline).

    Server

    • Crea il proprio well-known FIFO.
    • Apre il FIFO in modalità lettura finché un client non lo apre in scrittura.
    • Apre il FIFO in modalità scrittura (senza bloccare).
    • Crea un ciclo che legge e risponde alle richieste dei client.
    • Costruisce, tramite il nome client FIFO, il path del cliente ed apre il FIFO per la risposta.
    • Abbandona la richiesta del client se c'è un errore durante l'apertura del FIFO.

    Client

    • Crea un FIFO.
    • Costruisce un messaggio contenente l'ID del processo client e la lunghezza della sequenza desiderata.
    • Apre il FIFO server e invia il messaggio.
    • Apre il proprio FIFO e legge e stampa la risposta del server.

    Esempio di utilizzo su shell

    • Viene mostrato un esempio di utilizzo di comandi unix su shell per dimostrare come i FIFO vengono utilizzati con i pipe.

    Studying That Suits You

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

    Quiz Team

    Related Documents

    Description

    Questo laboratorio esplora i sistemi operativi, in particolare l'IPC attraverso pipe e FIFO. Gli studenti impareranno a gestire l'integrazione C e a controllare i processi in ambiente UNIX. Il corso utilizzerà testi di riferimento autorevoli per fornire una base solida nella programmazione di sistemi operativi.

    More Like This

    Use Quizgecko on...
    Browser
    Browser