Sistemi Operativi: Processi e Memoria
47 Questions
2 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 è la funzione utilizzata per creare un processo figlio in un sistema operativo?

  • clone()
  • fork() (correct)
  • execve()
  • wait()
  • Cosa succede alla memoria del processo padre quando viene creato un processo figlio?

  • Il padre e il figlio hanno accesso a memoria completamente separata.
  • Il figlio condivide direttamente la memoria con il padre.
  • La memoria del padre è copiata nel figlio. (correct)
  • La memoria del padre viene eliminata.
  • Quale dei seguenti comandi viene utilizzato dal processo padre per attendere che un processo figlio termini?

  • fork()
  • wait() (correct)
  • execve()
  • exit()
  • Qual è il compito principale della funzione execve()?

    <p>Eseguire un nuovo programma in un processo.</p> Signup and view all the answers

    Quale affermazione è vera riguardo a un processo padre e un processo figlio?

    <p>Il processo figlio può eseguire azioni indipendenti dal padre.</p> Signup and view all the answers

    Cosa deve fare un processo padre dopo aver creato un processo figlio?

    <p>Eseguire altre azioni senza attendere il figlio.</p> Signup and view all the answers

    Qual è un risultato atteso dell'uso della funzione fork()?

    <p>Si crea un nuovo processo con una copia della memoria del padre.</p> Signup and view all the answers

    Qual è la differenza principale tra un processo padre e un processo figlio?

    <p>Il processo padre viene creato per primo e ha il controllo iniziale.</p> Signup and view all the answers

    Qual è la funzione principale del segmento di dati inizializzati in un processo?

    <p>Memorizza le variabili globali e statiche che sono esplicitamente inizializzate.</p> Signup and view all the answers

    A cosa serve l'heap in un processo?

    <p>Per allocare memoria in modo dinamico durante il tempo di esecuzione.</p> Signup and view all the answers

    Perché i dati non inizializzati vengono memorizzati in un segmento separato?

    <p>Per evitare l'allocazione di spazio su disco quando il programma è salvato.</p> Signup and view all the answers

    Cosa rappresenta uno stack frame in un processo?

    <p>L'allocazione per una funzione attualmente chiamata.</p> Signup and view all the answers

    Cosa accade se una variabile globale non è esplicitamente inizializzata?

    <p>Viene inizializzata automaticamente a 0 dal sistema.</p> Signup and view all the answers

    Qual è il risultato della funzione 'square' se l'input è 4?

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

    Qual è il valore di 'key' nel contesto del main?

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

    Qual è l'area della memoria in cui le variabili 't' e 'result' vengono allocate?

    <p>Nel frammento dello stack della funzione in esecuzione.</p> Signup and view all the answers

    Cosa restituisce la system call fork() nel processo padre dopo una chiamata riuscita?

    <p>Il process ID del figlio</p> Signup and view all the answers

    Dopo l'esecuzione della fork(), quali variabili possono essere modificate dai processi senza influenzare l'altro?

    <p>Le variabili nei segmenti di stack, data e heap</p> Signup and view all the answers

    Quale affermazione è vera riguardo alla fork()?

    <p>Crea un processo figlio che è una copia del padre</p> Signup and view all the answers

    Qual è il significato del valore restituito da fork() nel nuovo processo figlio?

    <p>Restituisce 0</p> Signup and view all the answers

    Quale descrizione si applica ai processi padre e figlio creati da fork()?

    <p>Hanno stack e heap distinti</p> Signup and view all the answers

    In quali condizioni una chiamata a fork() restituirà -1?

    <p>In caso di errore nella creazione del processo</p> Signup and view all the answers

    Cosa permette di fare il process ID restituito a un processo padre dopo la fork()?

    <p>Distinguerlo da altri processi</p> Signup and view all the answers

    Quale di queste affermazioni è falsa riguardo alla fork()?

    <p>Dopo una fork(), i processi comunicano tramite memoria condivisa</p> Signup and view all the answers

    Cosa restituisce la fork() nell'ambiente del processo figlio?

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

    Quale syscall può essere utilizzata insieme a wait() per la gestione dei processi?

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

    Che cosa causa l'indeterminatezza dell'esecuzione dopo una fork()?

    <p>Il sistema operativo sceglie casualmente quale processo eseguire</p> Signup and view all the answers

    Quale valore deve restituire fork() per indicare un errore?

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

    Quale variabile contiene l'ID del processo del figlio dopo una fork()?

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

    Che cosa avviene all'allocazione della variabile 'idata' dopo la fork()?

    <p>Viene duplicata per ogni processo</p> Signup and view all the answers

    Quale tecnica deve essere utilizzata per garantire un ordine di esecuzione specifico tra processi?

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

    Cosa svolge il processo genitore nel contesto della terminazione dei processi?

    <p>Attende il completamento del processo figlio con wait</p> Signup and view all the answers

    Qual è il risultato dell'istruzione fork() nell'illustrazione fornita?

    <p>Si creano due istanze del programma A</p> Signup and view all the answers

    Dopo l'esecuzione di fork(), cosa succede alla memoria del processo genitore?

    <p>Viene copiata nel processo figlio</p> Signup and view all the answers

    Cosa può fare il processo figlio dopo aver eseguito fork()?

    <p>Eseguire un programma diverso con execve</p> Signup and view all the answers

    Qual è lo scopo dell'istruzione wait(&status) nel contesto della gestione dei processi?

    <p>Attendere che un processo specifico termini</p> Signup and view all the answers

    Qual è il ruolo del comando execve nel processo figlio?

    <p>Sostituisce l'immagine del processo figlio con un altro programma</p> Signup and view all the answers

    Che tipo di processo è creato da un'istruzione fork()?

    <p>Un processo figlio</p> Signup and view all the answers

    Cosa accade se un processo non utilizza wait() dopo fork()?

    <p>Il processo figlio può continuare a funzionare autonomamente</p> Signup and view all the answers

    Cosa succede se la funzione fork() fallisce nel codice fornito?

    <p>Il programma termina con un errore di fork.</p> Signup and view all the answers

    Qual è il valore restituito da execve() in caso di successo?

    <p>Mai restituito</p> Signup and view all the answers

    Quale delle seguenti funzioni exec() consente di specificare solo il nome del file?

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

    Cosa stampa il processo padre dopo aver dormito per 3 secondi?

    <p>--- terminazione padre ---</p> Signup and view all the answers

    Quale di queste funzioni non è menzionata come parte delle funzioni exec()?

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

    Quale output rappresenta l'identificativo del processo padre nel codice?

    <p>PID(padre): <qualcosa></p> Signup and view all the answers

    Cosa accade all'esecuzione nel caso di errore di execve()?

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

    Quali argomenti sono passati a execve() nella funzione principale?

    <p>argv, argVec, envVec</p> Signup and view all the answers

    Study Notes

    Laboratorio di Sistemi Operativi - Controllo dei Processi

    • Il laboratorio esplora argomenti relativi ai sistemi operativi, in particolare il controllo dei processi.
    • L'argomento principale è UNIX.
    • Gli argomenti del laboratorio comprendono: Introduzione a UNIX, integrazione C (operatori bitwise, precedenze, preprocessore, pacchettizzazione del codice, compilazione condizionale e utility make), controllo dei processi (segnali, pipe, code di messaggi, memoria condivisa, semafori), introduzione alla programmazione bash.
    • Le lezioni si basano su materiale del Prof. Gunetti, nonché su libri di riferimento come: The Linux Programming Interface - a Linux and UNIX System Programming Handbook di Michael Kerrisk, Advanced Programming in the UNIX® Environment di W. Richard Stevens e Stephen A. Rago.

    Process ID e Process ID Padre

    • Ogni processo possiede un Process ID (PID), un intero positivo che lo identifica univocamente nel sistema.
    • I PID sono utilizzati e restituiti da diverse chiamate di sistema.
    • La chiamata di sistema getpid() restituisce il PID del processo chiamante.
    • Ogni processo ha un genitore, ovvero il processo che lo ha creato.
    • La chiamata di sistema getppid() restituisce il PID del processo genitore.
    • L'attributo PID padre di ciascun processo rappresenta la relazione ad albero di tutti i processi nel sistema.

    Layout della Memoria di un Processo

    • La memoria allocata a ogni processo è composta da diversi segmenti.
    • Il segmento di testo contiene le istruzioni in linguaggio macchina del programma in esecuzione.
    • È un solo in lettura (read-only) per evitare modifiche accidentali.
    • È condivisibile, permettendo a più processi di condividere una stessa copia del codice.
    • Il segmento dati inizializzato contiene le variabili globali e statiche inizializzate esplicitamente. I loro valori sono letti dal file eseguibile al momento del caricamento del programma.
    • Il segmento dati non inizializzato contiene le variabili globali e statiche non inizializzate. Prima dell'esecuzione del programma, la memoria in questo segmento è inizializzata a 0.
    • Lo stack è un segmento in crescita e contrazione dinamica che contiene i frame dello stack. Ogni frame dello stack è allocato per ogni funzione attualmente in esecuzione e contiene le variabili locali, gli argomenti e il valore di ritorno della funzione.
    • L'heap è un'area dalla quale la memoria può essere allocata dinamicamente durante l'esecuzione.

    Controllo dei Processi

    • Il controllo dei processi include la creazione, l'esecuzione e la terminazione dei processi.
    • Le system call (fork(), exit(), wait(), execve()) sono richieste al sistema operativo per agire a nome del programma dell'utente.
    • fork() crea un nuovo processo (figlio) che è una copia quasi esatta del processo padre (con copie degli stack, dati, heap e segmenti di testo).
    • exit() termina un processo.
    • wait() attende la terminazione di un processo figlio (e restituisce il suo stato di terminazione).
    • execve() carica un nuovo programma nella memoria del processo, sostituendo il precedente.

    Creazione dei Processi

    • La creazione dei processi (ad esempio, usando fork()) può essere un'operazione utile per suddividere un compito, come in un server di rete che gestisce richieste dei clienti creando nuovi processi per ogni richiesta.

    Terminazione dei Processi

    • Un processo può terminare in due modi: normalmente usando _exit() o in modo anomalo, per esempio se riceve un segnale il cui default è terminare del processo.
    • exit() esegue diverse azioni prima di chiamare _exit() inclusi lo svuotamento delle variabili e la liberazione delle risorse.

    Monitoraggio dei processi

    • Il monitoraggio dei processi aiuta a comprendere lo stato e l'attività dei processi, soprattutto quando si hanno più processi contemporaneamente. La system call wait() è importante nella gestione delle richieste di terminazione dei processi.

    wait() e waitpid()

    • wait() attende la terminazione di un figlio; se nessun figlio è terminato, la chiamata si blocca (ad esempio, per attendere la terminazione di un processo figlio).
    • waitpid() è più flessibile e consente di attendere un particolare processo figlio o tutti i figli nel medesimo processo group, o un processo figlio qualsiasi.
    • A volte è utile una non blocking wait, in modo da ottenere immediatamente l'informazione che nessun figlio ha ancora terminato la propria esecuzione.

    Condizioni di Errore di System Call e exec()

    • Diversi valori di ritorno della system call (e.g., -1 o valori di errno) indicano errori durante l'esecuzione di operazioni quali la creazione o l'esecuzione di processi.
    • Esistono delle macro e delle funzioni per gestire i vari codici di errore (includendo <errno.h> e <string.h>).
    • Errore ECHILD, se un processo padre tenta di avviare un processo wait() ma non ha figli.

    Esecuzione di nuovi Programmi - exec()

    • La chiamata exec() esegue un nuovo programma, sostituendo il programma corrente.
    • Diverse funzioni di libreria (execl(), execlp(), execvp(), ecc.) forniscono diverse modalità per specificare il programma da eseguire e i suoi argomenti e ambiente.
    • La funzione execl() richiede esplicitamente una lista di parametri, mentre execlp() cerca il programma richiesto nella variabile d'ambiente PATH quando il pathname non è assoluto.

    Orfani e Zombie

    • I processi orfani sono processi figli che hanno perso il loro genitore.
    • I processi zombie sono processi figli che hanno terminato la loro esecuzione, ma il padre non ha ancora chiamato la wait() per raccogliere le informazioni sulla terminazione.
    • Il processo init adotta i processi orfani e i processi zombie, permettendo al sistema di gestire correttamente i processi.

    Studying That Suits You

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

    Quiz Team

    Description

    Questo quiz esplora le dinamiche tra processi padre e figlio nei sistemi operativi. Verranno esaminate funzioni chiave come la creazione di processi, la gestione della memoria e l'attesa del termine di un processo figlio. Metti alla prova le tue conoscenze sui comandi e le funzioni utilizzate nei sistemi operativi.

    More Like This

    Use Quizgecko on...
    Browser
    Browser