Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio19:esercitazionib:esercitazione8

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
informatica:sol:laboratorio19:esercitazionib:esercitazione8 [10/04/2019 alle 13:14 (6 anni fa)] Massimo Torquatiinformatica:sol:laboratorio19:esercitazionib:esercitazione8 [16/04/2019 alle 05:34 (6 anni fa)] (versione attuale) Massimo Torquati
Linea 1: Linea 1:
 ====== Esercitazione 8 ====== ====== Esercitazione 8 ======
- 
  
 ===== Esercizio 1 ===== ===== Esercizio 1 =====
  
-Scrivere un programma C che appena attivato va immediatamente in background, attende per X secondi (eseguendo il programma ''/bin/sleep'') dove X e' l'argomento del programma e poi stampa il pid, il pid del padre e quindi termina+Implementare utilizzando le chiamate di sistema ''open'' ''read'' ''write'' ''close'' l'equivalente del comando Unix ''cat'':\\ 
 +<code> 
 + mycat file1 [fileN]. 
 +</code>
  
 ===== Esercizio 2 ===== ===== Esercizio 2 =====
 +
 +Scrivere un programma C che appena attivato va immediatamente in background, attende per X secondi (eseguendo il programma ''/bin/sleep'') dove X e' l'argomento del programma e poi stampa il pid, il pid del padre e quindi termina. 
 +
 +===== Esercizio 3 =====
  
 Un processo //zombie// è un processo terminato ma che ancora possiede delle risorse ('pid' e PCB) che servono al processo padre per leggere lo exit status del processo figlio. Un processo //zombie// è un processo terminato ma che ancora possiede delle risorse ('pid' e PCB) che servono al processo padre per leggere lo exit status del processo figlio.
Linea 12: Linea 18:
 Scrivere un programma che prende un intero N come argomento e crea N processi zombies. Lanciare il programma in background e visualizzare gli zombies con il comando bash ''ps -A -ostat,pid,ppid | grep Z'' Scrivere un programma che prende un intero N come argomento e crea N processi zombies. Lanciare il programma in background e visualizzare gli zombies con il comando bash ''ps -A -ostat,pid,ppid | grep Z''
  
-===== Esercizio =====+===== Esercizio =====
  
 Scrivere un programma C che prende come argomento un intero N>1. L'intero N rappresenta il numero di processi figli che devono essere creati in totale.  I processi vanno creati come segue: il processo main stampa il suo pid e crea un figlio attendendone quindi la sua terminazione, il processo figlio a sua volta stampa il suo pid e crea un altro figlio attendendone la terminazione e cosi' via fino ad ottenere N processi figli in tutto. L'output formattato che si richiede che venga stampato sullo standard output e' il seguente:  Scrivere un programma C che prende come argomento un intero N>1. L'intero N rappresenta il numero di processi figli che devono essere creati in totale.  I processi vanno creati come segue: il processo main stampa il suo pid e crea un figlio attendendone quindi la sua terminazione, il processo figlio a sua volta stampa il suo pid e crea un altro figlio attendendone la terminazione e cosi' via fino ad ottenere N processi figli in tutto. L'output formattato che si richiede che venga stampato sullo standard output e' il seguente: 
Linea 27: Linea 33:
 --- 20895: terminato con successo --- 20895: terminato con successo
 ---- 20894: terminato con successo ---- 20894: terminato con successo
 +
 </code> </code>
 +
 +===== Esercizio 5 =====
 +
 +Completare il codice seguente in modo che il programma calcoli i primi 13 numeri di Fibonacci utilizzando per ogni chiamata ''doFib'' un processo distinto.
 +
 +<code>
 +#include <stdio.h>
 +#include <stdlib.h>
 +#include <unistd.h>
 +#include <sys/wait.h>
 +
 +/* 
 + * Calcola ricorsivamente il numero di Fibonacci dell'argomento 'n'.
 + * La soluzione deve forkare un nuovo processo che esegue una sola 
 + * chiamata di 'doFib'.
 + * Se doPrint e' 1 allora la funzione lo stampa, altrimenti il
 + * numero calcolato va passato al processo padre.
 + */
 +static void doFib(int n, int doPrint);
 +
 +int main(int argc, char *argv[]) {
 +    // questo programma puo' calcolare i numeri di Fibonacci solo fino a 13.  
 +    const int NMAX=13;
 +    int arg;
 +    
 +    if(argc != 2){
 + fprintf(stderr, "Usage: %s <num>\n", argv[0]);
 + return EXIT_FAILURE;
 +    }
 +    arg = atoi(argv[1]);
 +    if(arg < 0 || arg > NMAX){
 + fprintf(stderr, "num deve essere compreso tra 0 e 13\n");
 + return EXIT_FAILURE;
 +    }   
 +    doFib(arg, 1);
 +    return 0;
 +}
 +</code>
 +
 +
  
  
  
informatica/sol/laboratorio19/esercitazionib/esercitazione8.1554902050.txt.gz · Ultima modifica: 10/04/2019 alle 13:14 (6 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki