BIOS

è l'acronimo di

Basic Input Output System

Quattro parole molto banali che non rivelano affatto l'importanza del BIOS. Per capire di cosa si tratta, ancora una volta facciamo un piccolo passo indietro.

 

Nella 119 abbiamo spiegato che il programma Loader carica e fa partire un programma qualsiasi. In quella risposta si parlava di programmi sviluppati e compilati, ma la spiegazione rimane valida anche per i programmi comperati al negozio. Esiste infatti una regola universale per tutti i computer che possiamo esprimere in questi termini:

Ogni programma software viene necessariamente attivato da un altro programma il quale girava in precedenza .

Dunque i programmi formano una catena nel senso che ognuno viene attivato da un'altro. Non è invece necessario che il programma attivato debba per forza generarne un'altro, ma se parte vuol dire che un'altro programma l'ha fatto partire. Dunque è naturale domandarsi come tale catena può cominciare. In particolare il primo programma che comincia a girare quando il proprietario accende il suo computer come può funzionare? Chi lo fa partire?

Poiché il primo programma non viene attivato da nessun altro, si tratta di un programma assai speciale: è infatti il BIOS.

Quali sono le sue principali caratteristiche?

1) Si trova catalogato nella memoria ROM (o EPROM) e non nella RAM come tutti gli altri. In soldoni vuol dire che è creato e posto nella ROM in fabbrica, seguendo una tecnica diversa da tutti gli altri programmi.

2) Il microprocessore, appena il computer viene acceso, in modo automatico esegue il BIOS.

3) Il BIOS verifica che le periferiche siano correttamente collegate e non ci siano problemi hardware nell'unità centrale.

4) Il BIOS carica il sistema operativo dal disco rigido (oppure da un altro tipo di disco) e quindi lo fa partire (possiamo dire che il BIOS fà il lavoro che normalmente compie il Loader). In questo esso dà il via a quella serie di attivazioni a catena di cui dicevamo sopra.

Se l'hardware della macchina viene modificato o se sopravvengono altri tipi di problemi tali per cui il BIOS deve essere modificato, questo lavoro assai delicato deve essere eseguito da specialisti e non rientra nelle normali competenze del programmatore.

 

Indietro

125. Piu' volte ho incontrato la sigla BIOS, ma non so cosa stia a significare.

126. Javascript è una versione speciale del linguaggio Java?

La prima cosa da sfatare è che il linguaggio Javascript non ha niente a che vedere con il linguaggio Java. Il loro nome nasce soltanto per una intesa commerciale. Le cose andarono così.

Nei primi anni novanta Netscape, azienda allora leader nel settore dei browser, capì la necessità di evolvere il web dalle pagine statiche a quelle dinamiche, cioè percepì la crescente necessità di movimentare le pagine con animazioni, figure, elaborazioni. Per tale fine nel 1995 i tecnici di Netscape inventarono un linguaggio che chiamarono Livescript. Quando poco dopo la Sun mise in piedi Java, Netscape firmò un accordo di collaborazione e modificò il nome del suo prodotto in Javascript per sottolineare la sua compatibilità con Java.

Javascript è un linguaggio a marcatura (o tag) (vedi risposta 19) ed appare molto simile all'html. Anche la sua esecuzione è molto simile perché il browser legge una riga la esegue e poi passa alla successiva. Normalmente i comandi Javascript inseriti in mezzo a quelli html sono raccolti tra due tag così fatti:

<SCRIPT Language="Javascript">
...
...
...
</SCRIPT>

Questi tag si trovano in punti qualsiasi della pagina html a secondo delle necessità elaborative: calcoli, animazioni, verifiche input ecc.

Molto spesso una elaborazione viene eseguita da una applet. Tra i vari comandi Javascript ricordiamo quello che carica e lancia una applet Java.
Nell'esempio supponiamo che l'applet si chiami Pippo che la classe sia Pip e che per eseguire l'applet si voglia dare come parametro Pluto

<APPLET NAME="Pippo_applet" CODE="Pip.class" >
<PARAM NAME="jscript" VALUE="Pluto">
</PARAM>
</APPLET>
 

Questo esempio, oltre che chiarire un poco di più Javascript, fornisce un ulteriore dettaglio sulle applet trattate nella risposta 64.

 

Indietro

Fattorizzazione vuol dire scomporre una entità matematica (es. un numero, un polinomio, una matrice, un grafo) in fattori tali che il loro prodotto riproduca l'entità originaria.

La fattorizzazione dei numeri primi è al centro dell'attenzione nel settore informatico perché l'algoritmo RSA, il più geniale algoritmo crittografico fin qui scoperto, utilizza una chiave composta da due numeri primi (vedi 98). Se qualcuno scoprisse una fattorizzazione per tale chiave, farebbe saltare in aria o per lo meno metterebbe in grave crisi l'intero sistema mondiale delle trasmissioni protette per l'e-commerce, l'e-banking ed altro.

Il metodo più generale per trovare i fattori primi di un intero resta quello delle divisioni successive, ben noto nelle scuole medie. Il Teorema dei Numeri Primi asserisce che l'insieme dei numeri primi minori o uguali ad n è circa n/log n. Ciò implica che dovremmo eseguire circa 1058 divisioni per scomporre un numero di 200 cifre. Supponendo di avere un supercomputer in grado di eseguire un miliardo di divisioni al secondo impiegando numeri a 60 cifre (roba da fantascienza, almeno ad oggi), impiegheremmo 1041 (miliardi di miliardi di miliardi di miliardi) anni. Tutto questo dà garanzie sull'affidabilità dell'algoritmo RSA, ma lo scenario potrebbe mutare se invece delle brutali divisioni, un metodo sofisticato sfruttasse una qualche proprietà dei numeri primi.

Il primo a stimare l'andamento asintotico dei numeri primi fu Gauss, che valutò la densità dei numeri primi intorno ad n è dell'ordine di:

1/ log n

Da cui deriva la stima dei numeri primi minori o uguali ad n sopra riportata. Oggi ne sappiamo di più.
Sappiamo ad esempio che i numeri primi generano delle progressioni aritmetiche di lunghezza crescente. La seguente tabella riporta le prime sei serie.

Lo studio delle proprietà asintotiche dei numeri primi è oggi di grande attualità. Terence Tao, un giovane matematico che lavora presso la California University, è stato premiato al recente congresso mondiale di matematica tenutosi a Madrid (ICM2006) proprio per un contributo dato in questa direzione.

 

Indietro

127. Più volte ho sentito citare il problema della "fattorizzazione" in informatica, ed anche lei ne ha parlato. Può tornare sull'argomento? 

128. Insegno informatica da qualche anno in ITC ed apprezzo le sue spiegazioni per la grande concretezza. Ha una indicazione metodologica per la didattica della programmazione?

Il software nasce dal fatto che il computer assiste un sistema X (es. azienda, singolo professionista, macchina automatica, ufficio) nel portare avanti i suoi compiti nonostante le variazioni ambientali U che li ostacolano (vedi 95). Tali impredicibili eventi consigliano di assegnare i compiti di lavoro al computer per mezzo di un programma scritto che è molto meno rigido di una soluzione circuitale. Il chip infatti viene costruito in fabbrica dietro un lungo processo e non è modificabile, invece un programma viene compilato agilmente mediante un video terminale e per tale mezzo viene anche rapidamente modificato. 

Questa illustrazione non ha una natura 'filosofica' ma strettamente si attiene ai fatti concreti. E per il fatto concreto che il software risolve specifiche situazioni, come diretta conseguenza ne viene che di software non ce n'è uno solo ma ce ne sono tanti, cioè la tecnologia si specializza a secondo del sistema X assistito. Tanto per esemplificare, abbiamo la meccanotrica che governa i macchinari di produzione, i sistemi esperti che consigliano l'investimento finanziario, il programma Prolog che dimostra un teorema, un calcolo Fortran di algebra computazionale, una statistica Snobol su testi di greco antico. L'algoritmo di meccatronica, quello in Fortran, quello in Snobol, non hanno niente a che fare l'un con l'altro e neppure con il sistema esperto e questo a sua volta non ha nulla in comune con il software che controlla la rete e con la robotica, tanto per citare altri due filoni del software. In questo settore ci sono tante metodiche, tanti linguaggi, tanti sistemi di implementazione e manutenzione i quali seguono strade diversissime. La nostra piccola carrellata, sopra riportata, è sufficiente per fa capire che introdurre la programmazione agli studenti è una bella "gatta da pelare". Non si sa bene da che parte cominciare, quale tecnica va preferita, quale può dirsi superiore all'altra. Da qui il problema didattico che è comune a tutti e non soltanto suo.

Un primo accorgimento, ormai seguito da molti insegnanti, consiste nel non chiudersi sulla computabilità matematica perché questo equivale a restringere l'attenzione su una tematica specifica.

Un secondo accorgimento didattico è il seguente.
La più parte dei settori software sopra citati costituiscono altrettante nicchie tecniche e professionali, ma c'è un settore che emerge per la sua ampiezza e generalità. Un largo gruppo di programmi segue due tecnologie di programmazione soltanto e dimostra proprietà molto generali. La cosidetta programmazione general-purpose (meglio nota come gestionale) si basa sulla:

programmazione strutturata,
programmazione ad oggetti.

Sviluppa una grande quantità di algoritmi che però si riducono a tre prototipi principali:

il programma batch,
il programma interattivo,
il programma ad oggetti.

Dunque abbiamo un settore molto ampio e professionalmente significativo, su cui una didattica della programmazione si può solidamente basare.


Ulteriori dettagli didattici che qui non posso espandere, li trova nel:

Corso di Informatica : I Fondamenti, vol 1°

oppure ad un livello più sofisticato in:

Cultura e Tecnologia del Software

Tali volumi sono anche riportati nella testata della presente rubrica.

 

Indietro