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
 
 
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