Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Antonino Mazzeo » 9.Esercitazione: System call per la gestione dei processi


Sommario

  • System calls
  • Alcune chiamate di sistema:
    • getpid()
    • getppid()
    • fork()
    • exec()
    • wait()
    • exit()

System calls

  • Punti d’entrata diretti attraverso cui un processo attivo può ottenere dei servizi dal kernel.
  • Un kernel di Unix ha tra 60 e 200 system calls.
  • La libreria standard del C dispone di un’interfaccia per ogni chiamata di sistema, tipica delle funzioni C.
  • Esempi di system call per la gestione dei processi:
    • Creation and deletion: fork(), exec(), wait(), exit()
    • Process signaling: kill()
    • Process control: ptrace(), nice(), sleep()

Processi in Unix

  • Ogni processo ha un’unico identificatore di processo (Process Identifier: PID), intero tra 0 e 30000, assegnatogli dal kernel all’atto della sua creazione
  • Un processo ottiene il suo pid attraverso la chiamata di sistema
    • int getpid()
  • Ogni processo ha un processo padre (eccetto il processo init) con il relativo pid
  • Un processo ottiene il pid del padre attraverso la chiamata di sistema
    • int getppid()
ID di processi speciali

ID di processi speciali


System Call fork

  • La creazione di nuovi processi è gestita mediante la chiamata di sistema
    • int fork(void)
  • Che crea una copia esatta (figlio) del processo originale (padre).
  • Padre e figlio condividono l’area testo.
  • Le aree dati globali, stack, heap e U-area sono copiate da padre e figlio.
    • Padre e figlio riprendono l’esecuzione dal punto in cui è stata eseguita la fork()
    • E’ possibile comunque distinguere il padre dal figlio utilizzando il valore, intero, restituito dalla primitiva.
  • Implementazione della fork(): Expensive!!
System Call Fork

System Call Fork


System Call wait ed exit

  • wait: consente al padre di raccogliere lo stato di terminazione dei figli e restituisce l’ID del processo figlio che è terminato.
  • Se i figli non sono ancora terminati, il kernel sospende il processo padre finché uno dei figli non è terminato.
  • Un processo termina con la chiamata di sistema exit, che passa lo stato di uscita (un intero) al kernel. Tale valore è disponibile al processo padre attraverso la chiamata di sistema wait.
System Call wait ed exit

System Call wait ed exit


System call exec

  • L’unico modo in cui un programma può essere eseguito da Unix è che il processo esistente invii una chiamata di sistema exec
    • Il nuovo programma viene eseguito nel contesto del processo chiamante, cioè il pid non cambia.
    • Fa ritorno al chiamante solo se si verifica un’errore, altrimenti il controllo passa al nuovo programma.
  • Il processo dopo l’exec
    • mantiene la stessa process structure; ha codice, dati globali, stack e heap nuovi; riferisce una nuova text structure; mantiene user area (a parte PC e informazioni legate al codice) e stack del kernel
  • L’exec è anche nota come “sostituzione di codice”.
  • Nel 99% dei casi, dopo una fork() viene eseguita una exec.

Relazioni fra processi

La capacità di creare nuovi processi è la chiave del funzionamento del timesharing in Unix.

Schema di funzionamento del Timesharing

Schema di funzionamento del Timesharing


Prossima lezione

Scheduling dei processi

I materiali di supporto della lezione

System call per la gestione dei processi

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion