Browse Source

Added lesson 3 and lesson 5 template

Federico Amedeo Izzo 9 years ago
parent
commit
ab292c6717

+ 98 - 0
Piattaforme Software per la Rete/MOD2/lesson_03.md

@@ -0,0 +1,98 @@
+# Piattaforme e Software per la rete - lezione 3
+#### William Fornaciari
+###### 23 March 2016
+## Cosa sono i thread
+I thread sono nati per alleggerire il parallelismo su macchine lente
+Non sempre i thread sono vantaggiosi, se usati troppo sono svantaggiosi 
+rispetto ai processi tradizionali.
+Un processo contiene
+- Risorse
+- Contesto di esecuzione
+
+I thread dello stesso processo condividono tutte le risorse aperte,
+con le dovute problematiche di concorrenza e sincronizzazione.
+Per questo sono stati introdotti i meccanismi di mutex tipici dei
+processi, anche per i thread.
+L'esempio classico sono i server, in cui posso creare tanti thread e 
+all'occorrenza risvegliarli, inoltre su sistemi multicore posso dividere
+i thread sui vari core, per gestire il carico.
+
+### Vantaggi
+L'overhead di creazione/distruzione di thread era di un fattore 10 rispetto ai
+processi nei primi sistemi linux che lo implementavano.
+
+Capostipite dei thread sono i solaris thread, che venivano usati da Solaris (girava su SPARC)
+Su windows sono venuti sfruttati bene da windows NT.
+I threads vennero introdotti da una libreria thread scritta da uno studente di Berkley
+e consistevano in una esecuzione di diverse funzioni in modo trasparente al kernel.
+
+Quindi i thread possono essere sia *kernel* che *utente*
+
+### Team model
+Utile per partizionare un applicazione
+Si utilizza un thread diverso per ogni funzione, ad esempio si dedica
+un thread alla sola interazione utente, in modo da avere una maggiore
+reattività agli input.
+
+La prima applicazione dei thread è stata un foglio elettronico,
+in cui abbiamo un thread per input, uno per video e uno per il calcolo.
+
+Non è detto che un problema si riesca a mappare bene su un'architettura multicore,
+ad esempio perchè la complessità dei thread è sbilanciata,
+es: thread input o display sono molto più leggeri del thread computing.
+__Vantaggio principale__ è dare reattività all'esperienza utente.
+
+### Architettura a dispatcher
+Un thread detto *dispatcher* riceve richieste di servizio e le invia 
+ai vari thread.
+Si mappa molto bene su architetture a cluster, in cui abbiamo un core principale(dispatcher)
+e dei worker core con memoria condivisa a cui viene inviato il lavoro.
+Questa architettura presenta dei vantaggi per il risparmio energetico
+perchè posso tenere spenti i worker core finchè non arriva del lavoro da assegnargli.
+
+### Architettura a pipeline
+Costituito da elementi con ingresso e uscita (es: bash pipe)
+In questo caso il secondo elemento ha un buffer di dati in ingresso e può elaborare
+senza dover scrivere/leggere da memoria.
+Vantaggiosa per effettuare delle ricerche, in quanto non serve elaborare 
+tutti i dati per trovare un risultato.
+
+### User thread package
+Viene implementato uno strato di supporto runtime a livello utente per gestire i thread
+Il supporto si occupa dello scheduling dei thread attivi di un processo.
+Simile a co-routine nella programmazione.
+__Difficile__ sfruttare i sistemi multicore
+__Facile__ da implementare
+
+### Kernel thread package
+Se un thread è bloccato non blocca l'intero processo come nel caso utente.
+Serve implementare delle specifiche chiamate di sistema e modificare il kernel.
+
+### Relazione tra thread e processi
+- Many-to-one: un solo processo gestisce tutti i thread
+- One-to-one: user-level thread viene mappato su kernel thread
+
+### Comunicazione e sincronizzazione
+Le principali soluzioni per far comunicare i thread sono:
+- __Semafori:__ Contatore che viene incrementato e decrementato, 
+i processi possono essere eseguiti quando è non negativo 
+- __Mutex:__ Versione binaria del semaforo
+- __Condition Variable:__ 
+- __Monitor e scambio messaggi__
+
+## Parallelismo
+*  __Processo__ realizza il concetto di macchina virutale e ha un forte *isolamento*
+* __Thread__ utile per processi leggeri, in caso di errore può far fallire gli altri 
+thread dello stesso processo o il processo stesso.
+I thread inoltre sono molto efficienti nel parallelismo e concorrenza rispetto ai processi.
+
+__Concorrenza__ nel caso di parallelismo reale può portare ad eseguire insieme i due processi
+In un sistema monoprocessore i due processi verranno eseguiti sequenzialmente ma non si sa in quale ordine
+
+__POSIX__ è un modo per standardizzare le interfacce dei sistemi operativi, per migliorare
+la *portabilità* del codice.
+
+### Scheduling for uniprocessor systems
+__RIPASSARE__
+Il carico dei processi di solito avviene a *burst*, seguiti dall'attesa per l'I/O
+Lo scheduler *preemptive* è più difficile da gestire rispetto ad uno normale

+ 4 - 0
Piattaforme Software per la Rete/MOD2/lesson_05.md

@@ -0,0 +1,4 @@
+# Piattaforme e Software per la rete - lezione 5
+#### William Fornaciari
+###### 31 March 2016
+## Modulo 2