lesson_01.md 5.1 KB

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