Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio16:esercitazionib:esercitazione9

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
informatica:sol:laboratorio16:esercitazionib:esercitazione9 [20/04/2016 alle 11:00 (9 anni fa)] – [Esercizio 3: Produttore e consumatore con pipe] Susanna Pelagattiinformatica:sol:laboratorio16:esercitazionib:esercitazione9 [20/04/2016 alle 11:01 (9 anni fa)] (versione attuale) Susanna Pelagatti
Linea 17: Linea 17:
  
  
-==== Esercizio 4: who_sort_cat ====+===== Esercizio 4: who_sort_cat =====
    
 Scrivere un programma C che utilizzando //pipe senza nome// e la duplicazione di descrittori implementa il pipeline di shell Scrivere un programma C che utilizzando //pipe senza nome// e la duplicazione di descrittori implementa il pipeline di shell
Linea 28: Linea 28:
  
  
-==== Esercizio 5: Un server ed un client ====+===== Esercizio 5: Un server ed un client =====
 Realizzare un processo server ed un processo client. I due processi intergiscono utilizzando due pipe con nome: //clientserver// e //clientp//. Il server crea la pipe clientserver (se non esiste), la apre e si mette in attesa di messaggi da parte del client.  Ogni messaggio è costituito da un double. Per ogni messaggio ricevuto ''x'', il server calcola ''x*x'' e invia il risultato su //clientp//. La sequenza di messaggi termina quando il client chiude la pipe //clientserver//. Le pipe devono essere rimosse dal file system alla terminazione dei due processi. Realizzare un processo server ed un processo client. I due processi intergiscono utilizzando due pipe con nome: //clientserver// e //clientp//. Il server crea la pipe clientserver (se non esiste), la apre e si mette in attesa di messaggi da parte del client.  Ogni messaggio è costituito da un double. Per ogni messaggio ricevuto ''x'', il server calcola ''x*x'' e invia il risultato su //clientp//. La sequenza di messaggi termina quando il client chiude la pipe //clientserver//. Le pipe devono essere rimosse dal file system alla terminazione dei due processi.
  
-==== Esercizio 6: Un server e molti client ====+===== Esercizio 6: Un server e molti client =====
 Realizzare un processo server che rimane sempre attivo in attesa di richieste da parte di un insieme (possibilmente vuoto) di processi client. Ogni client richiede al server la trasformazione di tutti i caratteri minuscoli di una stringa in caratteri maiuscoli (es ''tigre'' -->''TIGRE'') con un messaggio su una pipe dal nome fissato: //clientserver//. In questo caso i messaggi sulla pipe //clientserver// sono scritti da processi client diversi. Ogni client prima di inviare una richiesta crea una pipe di ascolto dal nome unico (eg. usando il PID) e codifica tale nome nel messaggio inviato al server.  Realizzare un processo server che rimane sempre attivo in attesa di richieste da parte di un insieme (possibilmente vuoto) di processi client. Ogni client richiede al server la trasformazione di tutti i caratteri minuscoli di una stringa in caratteri maiuscoli (es ''tigre'' -->''TIGRE'') con un messaggio su una pipe dal nome fissato: //clientserver//. In questo caso i messaggi sulla pipe //clientserver// sono scritti da processi client diversi. Ogni client prima di inviare una richiesta crea una pipe di ascolto dal nome unico (eg. usando il PID) e codifica tale nome nel messaggio inviato al server. 
 All sua attivazione il server crea la pipe clientserver (se non esiste), la apre e si mette in attesa di messaggi da parte dei client.  Ogni messaggio è costituito da una stringa e dal nome della pipe di risposta //clientpid//. Per ogni messaggio ricevuto il server estrae la stringa, trasforma le minuscole in maiuscole e invia il risultato su //clientpid//. Il server deve rimanere sempre attivo, anche alla terminazione di tutti i processi client.\\ All sua attivazione il server crea la pipe clientserver (se non esiste), la apre e si mette in attesa di messaggi da parte dei client.  Ogni messaggio è costituito da una stringa e dal nome della pipe di risposta //clientpid//. Per ogni messaggio ricevuto il server estrae la stringa, trasforma le minuscole in maiuscole e invia il risultato su //clientpid//. Il server deve rimanere sempre attivo, anche alla terminazione di tutti i processi client.\\
Linea 38: Linea 38:
  
  
-==== Esercizio 7: Un server e molti client (multithreaded con socket) ====+===== Esercizio 7: Un server e molti client (multithreaded con socket) =====
  
 Creare un server che utilizzi le socket AF_UNIX e piu' thread concorrenti per gestire un numero di client. Ogni client all'avvio decide quanti messeggi inviare (casualmente fra 1 e N_MSG_MAX). Tutti i messaggi inviati contengono il PID del processo client che li invia. Il srever stampa tutti i messaggi ricevuti sullo standard output.  Creare un server che utilizzi le socket AF_UNIX e piu' thread concorrenti per gestire un numero di client. Ogni client all'avvio decide quanti messeggi inviare (casualmente fra 1 e N_MSG_MAX). Tutti i messaggi inviati contengono il PID del processo client che li invia. Il srever stampa tutti i messaggi ricevuti sullo standard output. 
Linea 46: Linea 46:
 **Elaborazione:** Invece di attivare un thread worker per ogni client attivare un pool di worker all'inizio e schedulare le richieste arrivate sul pool in modo da bilanciare il carico dei vari worker. **Elaborazione:** Invece di attivare un thread worker per ogni client attivare un pool di worker all'inizio e schedulare le richieste arrivate sul pool in modo da bilanciare il carico dei vari worker.
  
-==== Esercizio 8: Un server e molti client (single thread) ====+===== Esercizio 8: Un server e molti client (single thread) =====
 Realizzare un server ed un client analoghi a quelli dell'esercizio 5 senza usare i therad. Utilizzare la //select// per risolvere il non determinismo fra l'accettazione di nuove connessioni e la lettura dei messaggi dai client gia' connessi. Realizzare un server ed un client analoghi a quelli dell'esercizio 5 senza usare i therad. Utilizzare la //select// per risolvere il non determinismo fra l'accettazione di nuove connessioni e la lettura dei messaggi dai client gia' connessi.
  
-==== Esercizio 9: Big and little endians ====+===== Esercizio 9: Big and little endians =====
 Scrivere un programma che converte il numero esadecimale 0x3A4C rappresentato su due byte in //network byte order// e stampa il valore dei due byte da quello di indirizzo minore. Riconvertire il risultato in //host byte order// e stampare ancora i due byte a partire da quello di indirizzo minore. Scrivere un programma che converte il numero esadecimale 0x3A4C rappresentato su due byte in //network byte order// e stampa il valore dei due byte da quello di indirizzo minore. Riconvertire il risultato in //host byte order// e stampare ancora i due byte a partire da quello di indirizzo minore.
  
  
-==== Esercizio 10: Get HTTP ====+===== Esercizio 10: Get HTTP =====
 Scrivere un programma C che scarica la home page dal server ''131.114.3.24'' inviando una richiesta Scrivere un programma C che scarica la home page dal server ''131.114.3.24'' inviando una richiesta
 <code> <code>
informatica/sol/laboratorio16/esercitazionib/esercitazione9.1461150004.txt.gz · Ultima modifica: 20/04/2016 alle 11:00 (9 anni fa) da Susanna Pelagatti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki