Bladeren bron

Added first lessons of piattaforme mod1 + mod2

Federico Amedeo Izzo 9 jaren geleden
bovenliggende
commit
105e9f08b2

+ 0 - 0
Piattaforme Software per la Rete/lesson_01.md → Piattaforme Software per la Rete/MOD1/lesson_01.md


+ 111 - 0
Piattaforme Software per la Rete/MOD2/lesson_01.md

@@ -0,0 +1,111 @@
+# Piattaforme e Software per la rete
+#### William Fornaciari
+###### 9 March 2016
+## Modulo 2
+__Networking__ -> __embedded systems__ -> __Network embedded systems__
+
+## Testi adottati
+Deitel, Choffines - Operating Systems, per ripassare
+
+Mitchell Oldhamm, ... Advanced Linux Programming, scaricabile gratis.
+
+## RIpasso - Architettura di un sistema linux
+Modalità
+- Modo kernel
+- Modo utente
+    - Programmi utente
+    - Shell
+
+Hardware recente è in grado di supportare il parallelismo, 
+mentre storicamente i sistemi operativi sono pensati per la 
+condivisione delle risorse di un solo processore.
+
+Il cambiamento storico è stato dal vax780 che ha introdotto un SoC,
+- Inizialmente si è adottato un singolo core sempre più potente, fino a 2,5GHz
+- Raggiunto il limite della frequenza di clock (power wall) si cerca di aumentare le prestazioni
+aumentando il numero di core.
+
+E poi c'è il *dark silicon*
+
+Anche per quello l'evoluzione sta al momento nel creare meccanismi di memoria e di caching 
+in grado di permettere il funzionamento contemporaneo di molti core (~50)
+
+__Sistemi di gestione dinamica dele risorse__
+Come *barbecue* non gesticono i processi in modo agnostico ma danno priorità in base alle condizioni
+(es: utilizzo in batteria)
+La gestione viene fatta a livello userspace con uno strato intermedio,
+ in modo che sia indipendente dal kernel o sistema operativo.
+
+Per coordinare molti core non si usa un bus ma una Network on Chip (16 core in sù)
+
+## Funzionalità del kernel
+- Mantenere in memoria il s.o. e i programmi in spazi di indirizzamento separati 
+- Permettere il passaggio dall'esecuzione di un programma all'altro,
+ma nei sistemi a molti core la cosa è diversa (distribuzione dei thread in un pool di risorse)
+- Gestire le operazioni di I/O
+A volte nelle applicazioni embedded si scrive del codice bare-metal senza sistema operativo
+In quel caso l'I/O è gestito dal proprio software
+- Verifica dei dati di esecuzione, ad esempio in sysfs
+
+#### BoardSupportP?
+è lo strato che permette di mappare le funzioni del sistema operativo su un particolare tipo di hardware.
+
+### Esecuzione di un processo
+Il kernel sceglie il processo da mandare in esecuzione
+Quando un processo richiede un servizio di sistema tramite una SVC
+Viene fornita la funzione richiesta nel contesto del processo.
+
+### Sospensione dei processo
+Il processo può lasciare l'esecuzione
+- Per *sospensione volontaria* con cui passa allo stato di attesa 
+(Ad esempio per aspettare un evento di I/O)
+- Per *fine del quanto di tempo* 
+
+3 stati:
+- Processo in esecuzione: processo che usa il processore, tanti quanti i core
+- Processi in attesa: attende una risorsa non disponibile.
+- Processi pronti: attende di essere eseguito
+
+I processi in attesa sono differenziati da quelli pronti per evitare che un proceso singolo
+monopolizzi il processore, e faccia andare gli altri in starvation.
+
+Nei sistemi con __preemption__ si può togliere il processo in esecuzione dal processore
+Nei sistemi senza, il processo tiene il processore fino alla fine del quanto di tempo o fino a che
+si sospende volontariamente.
+
+### Gestione degli interrupt
+Le interruzioni possono essere nestate, e in quel caso non si sa quando finiranno di eseguirsi. 
+Questo può creare problemi nei sistemi embedded in cui è necessario garantire un tempo di risposta rapido.
+
+Gli interrupt possono essere __mascherabili__ quando non possono essere eseguiti altri interrupt, in 
+modo da creare una sezione atomica, non interrompibile.
+
+Ci sono interruzioni che possono essere __non mascherabili__ perchè cruciali, ad esempio spegnimento in caso di batterie scariche.
+
+### Watchdog
+Viene usato per capire se un processo è bloccato, ad esempio facendo un timer che va resettato periodicamente.
+Se il timer non viene resettato e scade, viene attivato un interrupt che accende un led ad esempio.
+Collegare il watchdog al reset del sistema non è una delle soluzioni migliori (es: applicazioni critiche)
+Il watchdog implica un hardware esterno perchè il processore in quel caso è bloccato.
+
+### Gestione del quanto di tempo
+Per il quanto di tempo viene usato uno dei timer programmabili hardware del PC (RTC)
+Facendo un quanto di tempo troppo piccolo ho un parallelismo più spinto 
+ma aumenta l'overhead per il context switching
+Il problema in questo caso è il mixed-workflow in cui è importante che il sistema rimanga interattivo
+ed è anche importante terminare i processi lunghi.
+
+### Ritorno da interrupt
+Fino a 8 anni fa il kernel linux era monolitico (non interrompibile) mentre ora è preemptable (interrompibile)
+e in questo modo è più difficile da gestire ma è più interattivo.
+
+### Memoria Virtuale (swap)
+Nei sistemi embedded non esiste, perchè serve avere un sistema predicibile.
+Anche i questo caso i processi che subiscono swap-in (ritorno in memoria da swap) finiscono 
+in uno stato in attesa, e non pronto, per evitare la starvation dei processi
+
+### Stati dei processi UNIX
+Esiste una distinzione tra Ready to run in memory e Preempted
+
+### Processo di boot
+Ultimamente in linux si sta tentando di caricare le cose non tutte insieme ma quelle essenziali prima in modo che il sistema risulti già usabile