Linux su microcomputer grandi quanto una moneta
In alcuni casi i modelli architetturali hardware classici non
rispondo pienamente ai requisiti progettuali, in tal caso si rende
necessario esplorare nuove rotte.
A titolo di esempio riporto una problematica emersa durante
la fase di disegno architetturale di un progetto recente.
Occupandomi principalmente di Intelligenza
Artificiale, specificatamente di Reti Neurali Biologiche
Sintetizzate (SBNN), nell'implementazione software di tali reti
o meglio nell'implementazione software del modello formale
SBNN relativo al sistema neuronale biologico, emergeva un insieme
di requisiti aventi un aspetto trasversale che con le dovute
semplificazioni si traduce in un forte grado di parallelismo,
di tipo sostanzialmente massivo.
Senza scendere nei dettagli un'architettura a singolo processore
non garantisce un' esecuzione massivamente concorrente. Per avere
un alto livello di parallelismo il parametro da massimizzare
e' il numero di processori, ovviamente il problema di massimizzazione
vede numerosi vincoli tra cui quello non banale relativo al costo.
Si potrebbe pensare di implementare un parallelismo software attraverso
processi concorrenti o meglio attraverso threads, tuttavia il parallelismo
ottenuto non e' massivo, essendo i processi o threads solo teoricamente
indipendenti, mentre nella pratica le dinamiche sono interdipendenti,
comportamento dovuto essenzialmente allo scheduler del sistema operativo
(almeno per i kernel non hard real time), situazione che peggiora proporzionalmente
al numero di esecuzioni concorrenti.
Il punto di ottimo di un tale problema ha una valenza semantica che
implica l'utilizzo di un opportuno processore per ogni neurone da simulare,
il che e' impensabile per gli ovvi costi. La soluzione diventa utilizzare
un numero abbastanza altro di punti di computazione, avendo su ciascun
processore pochi processi concorrenti in modo da renderli il piu'
indipendente possibile.
Ed eccoci alla soluzione: utilizzare molte macchine, piccole, con
bassi requisiti energetici e normale connettivita'. Ovviamente il tutto
basato sul sistema operativo linux. In poche parole microcomputer linux
based. Oggi la soluzione che ritengo maggiormente valida si chiama PicoTux (che purtroppo non ho
potuto utilizzare per il progetto prima citato, anche se sono state
impiegate soluzioni simili, ugualmente processori ARM).
Picotux e' il piu' piccolo computer Linux al mondo, ha dimensioni
35mm x 19mm x 19mm, il che significa che picotux e' leggermente
piu' grande di un connettore RJ45.
Il processore e' 32-bit ARM 7 Netsilicon NS7520 a 55Mhz, dispone
di 2 MB di memoria flash, 8 Mb SDRAM, una porta ethernet 10/100MB,
e una porta seriale.
Il sistema operativo e uClinux 2.4.27 Big Endian, la shell e'
busybox 1.0, il filesystem CRAMFS, Jffs2, Nfs. Dispone di WebServer
e Telnet. Compulatore GCC 3.4.4 C/C++/Fortran, Binutils 2.15.
Sul sito dedicato, www.picotux.com, e' possibile visionare tutte le
caratteristiche tecniche, oltre che vedere "il volto" della macchina.
Ultimamente e' stata rilasciata una versione maggiore, PicoTux 112,
e sembra (ripeto sembra) sia in cantiere una versione con connettivita' wireless.
I costi non sono proprio trascurabili, anzi. Tuttavia queste macchine, davvero
minuscole, si prestano ad una vasta gamma di utilizzi, vista anche la
disponibilita' di connettivita' ethernet. Ovviamente bisogna calarsi nel
contesto hardware e operativo opportuno, tanto per dire non aspettatevi di
compilare Apache e mettere il picotux in produzione :)
uCLinux e' una microdistribuzione, pensiamola piu' ad un kernel
con relative librerie e tool chains ed un numero congruo di applicazioni utente.
uClinux ha avuto origine dal kernel 2.0 per microcontrollers senza MMUs, tuttavia
oggi uClinux copre un insieme molto piu' vasto di microdispositivi, e dispone di
kernel derivati dai "fratelli maggiori" nelle versioni 2.4 e 2.6.