Podcast
Questions and Answers
Qual è la funzione utilizzata per creare un processo figlio in un sistema operativo?
Qual è la funzione utilizzata per creare un processo figlio in un sistema operativo?
Cosa succede alla memoria del processo padre quando viene creato un processo figlio?
Cosa succede alla memoria del processo padre quando viene creato un processo figlio?
Quale dei seguenti comandi viene utilizzato dal processo padre per attendere che un processo figlio termini?
Quale dei seguenti comandi viene utilizzato dal processo padre per attendere che un processo figlio termini?
Qual è il compito principale della funzione execve()?
Qual è il compito principale della funzione execve()?
Signup and view all the answers
Quale affermazione è vera riguardo a un processo padre e un processo figlio?
Quale affermazione è vera riguardo a un processo padre e un processo figlio?
Signup and view all the answers
Cosa deve fare un processo padre dopo aver creato un processo figlio?
Cosa deve fare un processo padre dopo aver creato un processo figlio?
Signup and view all the answers
Qual è un risultato atteso dell'uso della funzione fork()?
Qual è un risultato atteso dell'uso della funzione fork()?
Signup and view all the answers
Qual è la differenza principale tra un processo padre e un processo figlio?
Qual è la differenza principale tra un processo padre e un processo figlio?
Signup and view all the answers
Qual è la funzione principale del segmento di dati inizializzati in un processo?
Qual è la funzione principale del segmento di dati inizializzati in un processo?
Signup and view all the answers
A cosa serve l'heap in un processo?
A cosa serve l'heap in un processo?
Signup and view all the answers
Perché i dati non inizializzati vengono memorizzati in un segmento separato?
Perché i dati non inizializzati vengono memorizzati in un segmento separato?
Signup and view all the answers
Cosa rappresenta uno stack frame in un processo?
Cosa rappresenta uno stack frame in un processo?
Signup and view all the answers
Cosa accade se una variabile globale non è esplicitamente inizializzata?
Cosa accade se una variabile globale non è esplicitamente inizializzata?
Signup and view all the answers
Qual è il risultato della funzione 'square' se l'input è 4?
Qual è il risultato della funzione 'square' se l'input è 4?
Signup and view all the answers
Qual è il valore di 'key' nel contesto del main?
Qual è il valore di 'key' nel contesto del main?
Signup and view all the answers
Qual è l'area della memoria in cui le variabili 't' e 'result' vengono allocate?
Qual è l'area della memoria in cui le variabili 't' e 'result' vengono allocate?
Signup and view all the answers
Cosa restituisce la system call fork() nel processo padre dopo una chiamata riuscita?
Cosa restituisce la system call fork() nel processo padre dopo una chiamata riuscita?
Signup and view all the answers
Dopo l'esecuzione della fork(), quali variabili possono essere modificate dai processi senza influenzare l'altro?
Dopo l'esecuzione della fork(), quali variabili possono essere modificate dai processi senza influenzare l'altro?
Signup and view all the answers
Quale affermazione è vera riguardo alla fork()?
Quale affermazione è vera riguardo alla fork()?
Signup and view all the answers
Qual è il significato del valore restituito da fork() nel nuovo processo figlio?
Qual è il significato del valore restituito da fork() nel nuovo processo figlio?
Signup and view all the answers
Quale descrizione si applica ai processi padre e figlio creati da fork()?
Quale descrizione si applica ai processi padre e figlio creati da fork()?
Signup and view all the answers
In quali condizioni una chiamata a fork() restituirà -1?
In quali condizioni una chiamata a fork() restituirà -1?
Signup and view all the answers
Cosa permette di fare il process ID restituito a un processo padre dopo la fork()?
Cosa permette di fare il process ID restituito a un processo padre dopo la fork()?
Signup and view all the answers
Quale di queste affermazioni è falsa riguardo alla fork()?
Quale di queste affermazioni è falsa riguardo alla fork()?
Signup and view all the answers
Cosa restituisce la fork() nell'ambiente del processo figlio?
Cosa restituisce la fork() nell'ambiente del processo figlio?
Signup and view all the answers
Quale syscall può essere utilizzata insieme a wait() per la gestione dei processi?
Quale syscall può essere utilizzata insieme a wait() per la gestione dei processi?
Signup and view all the answers
Che cosa causa l'indeterminatezza dell'esecuzione dopo una fork()?
Che cosa causa l'indeterminatezza dell'esecuzione dopo una fork()?
Signup and view all the answers
Quale valore deve restituire fork() per indicare un errore?
Quale valore deve restituire fork() per indicare un errore?
Signup and view all the answers
Quale variabile contiene l'ID del processo del figlio dopo una fork()?
Quale variabile contiene l'ID del processo del figlio dopo una fork()?
Signup and view all the answers
Che cosa avviene all'allocazione della variabile 'idata' dopo la fork()?
Che cosa avviene all'allocazione della variabile 'idata' dopo la fork()?
Signup and view all the answers
Quale tecnica deve essere utilizzata per garantire un ordine di esecuzione specifico tra processi?
Quale tecnica deve essere utilizzata per garantire un ordine di esecuzione specifico tra processi?
Signup and view all the answers
Cosa svolge il processo genitore nel contesto della terminazione dei processi?
Cosa svolge il processo genitore nel contesto della terminazione dei processi?
Signup and view all the answers
Qual è il risultato dell'istruzione fork() nell'illustrazione fornita?
Qual è il risultato dell'istruzione fork() nell'illustrazione fornita?
Signup and view all the answers
Dopo l'esecuzione di fork(), cosa succede alla memoria del processo genitore?
Dopo l'esecuzione di fork(), cosa succede alla memoria del processo genitore?
Signup and view all the answers
Cosa può fare il processo figlio dopo aver eseguito fork()?
Cosa può fare il processo figlio dopo aver eseguito fork()?
Signup and view all the answers
Qual è lo scopo dell'istruzione wait(&status) nel contesto della gestione dei processi?
Qual è lo scopo dell'istruzione wait(&status) nel contesto della gestione dei processi?
Signup and view all the answers
Qual è il ruolo del comando execve nel processo figlio?
Qual è il ruolo del comando execve nel processo figlio?
Signup and view all the answers
Che tipo di processo è creato da un'istruzione fork()?
Che tipo di processo è creato da un'istruzione fork()?
Signup and view all the answers
Cosa accade se un processo non utilizza wait() dopo fork()?
Cosa accade se un processo non utilizza wait() dopo fork()?
Signup and view all the answers
Cosa succede se la funzione fork() fallisce nel codice fornito?
Cosa succede se la funzione fork() fallisce nel codice fornito?
Signup and view all the answers
Qual è il valore restituito da execve() in caso di successo?
Qual è il valore restituito da execve() in caso di successo?
Signup and view all the answers
Quale delle seguenti funzioni exec() consente di specificare solo il nome del file?
Quale delle seguenti funzioni exec() consente di specificare solo il nome del file?
Signup and view all the answers
Cosa stampa il processo padre dopo aver dormito per 3 secondi?
Cosa stampa il processo padre dopo aver dormito per 3 secondi?
Signup and view all the answers
Quale di queste funzioni non è menzionata come parte delle funzioni exec()?
Quale di queste funzioni non è menzionata come parte delle funzioni exec()?
Signup and view all the answers
Quale output rappresenta l'identificativo del processo padre nel codice?
Quale output rappresenta l'identificativo del processo padre nel codice?
Signup and view all the answers
Cosa accade all'esecuzione nel caso di errore di execve()?
Cosa accade all'esecuzione nel caso di errore di execve()?
Signup and view all the answers
Quali argomenti sono passati a execve() nella funzione principale?
Quali argomenti sono passati a execve() nella funzione principale?
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, mentreexeclp()
cerca il programma richiesto nella variabile d'ambientePATH
quando ilpathname
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.
Related Documents
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.