“Hai provato a spegnere e riaccendere?”

È l'azione più consigliata quando un dispositivo non funziona: nella sua banalità è spesso risolutiva, eppure è sottovalutata

David, il protagonista di 2001: Odissea nello spazio prova a disattivare il computer HAL 9000 (Metro-Goldwyn-Mayer)
David, il protagonista di 2001: Odissea nello spazio prova a disattivare il computer HAL 9000 (Metro-Goldwyn-Mayer)

All’inizio del 2023 la sonda IBEX inviata nello spazio per analizzare la regione più esterna del Sistema solare smise di comunicare con la Terra e ai tecnici della NASA non rimase che una soluzione: spegnere e riaccendere. Il comando per effettuare il reset funzionò e permise a IBEX di riprendere la propria attività, confermando ancora una volta l’utilità di spegnere e riaccendere i dispositivi quando smettono di funzionare come dovrebbero non solo in orbita, ma anche qui sulla Terra.

Spegnere e riaccendere è quasi sempre il primo consiglio che i servizi di assistenza informatica danno ai loro clienti, ed è di solito anche la prima cosa che dicono i figli ai propri genitori in difficoltà nel fare qualcosa con i loro smartphone o computer. Per chi ha un minimo di dimestichezza con i dispositivi elettronici, è il suggerimento più banale e spesso efficace che si possa dare, mentre per chi ha scarsa familiarità con i computer suona quasi come una pratica esoterica: forse perché agli occhi dei meno esperti un oggetto così sofisticato e dal funzionamento misterioso non può aggiustarsi con una mossa tanto semplice.

Eppure, spegnere e riaccendere funziona in moltissimi casi e non solo per i dispositivi che abbiamo in tasca o sulla scrivania. Treni, forni, automobili, monitor per ospedali, aeroplani e – come abbiamo visto – sonde spaziali hanno al loro interno computer più o meno evoluti a seconda dei casi, con programmi che li fanno funzionare grazie alle istruzioni contenute nel loro codice. Che siano semplici e rudimentali o estremamente complicati, possono tutti contenere al loro interno errori o lacune di programmazione che in alcune circostanze causano malfunzionamenti. Talvolta i problemi si risolvono da soli, per esempio con la chiusura del programma che li ha causati, ma in altri casi continuano a rallentare il computer facendogli svolgere del lavoro inutile e occupando grandi porzioni della memoria temporanea (RAM), sulla quale si trova parte dei processi attivi.

Le cause di un malfunzionamento di un programma che si estende a tutto il sistema operativo (come Windows o macOS) del dispositivo possono essere molteplici e diverse tra loro, ma è importante ricordare che nella sua essenza un programma è un insieme più o meno elaborato di regole che partono dal concetto di se succede questo allora fai quello (con i sistemi di intelligenza artificiale le cose sono un po’ diverse). Nel caso in cui ci sia qualche errore nella sequenza dei compiti che deve svolgere un programma, si può avere per esempio un “memory leak” (letteralmente “perdita di memoria”), con un consumo anomalo di memoria che non viene liberata al termine dell’esecuzione di un processo.

Dopo un certo periodo di tempo, la memoria disponibile si esaurisce e si ha un fallimento del programma o del sistema. Un tempo il problema si manifestava in modo immediato perché al termine della RAM disponibile non c’erano molte possibilità di intervenire, il dispositivo non rispondeva proprio, mentre oggi molti sistemi operativi utilizzano un sistema per trasferire di continuo parte della RAM nella memoria fissa, in modo da liberarla e usarla per altri processi. I dispositivi più rudimentali non sono dotati di questi sistemi e fanno maggiore affidamento sulla memoria temporanea, uno dei motivi per cui tornano a funzionare solo quando si fa spegni/riaccendi ripristinando le condizioni iniziali, quando la memoria non era satura.

Per farsi un’idea di come si possa verificare un memory leak viene spesso proposto l’esempio di un programma progettato per far funzionare un ascensore, il cui codice prevede queste azioni:

• se viene premuto un tasto per un determinato piano -> recupera un po’ di memoria per tenere nota del numero del piano e inserisci il numero del piano in memoria;
• se sei già al piano richiesto -> non ci sono azioni da fare, quindi termina il programma;
• se non sei già al piano richiesto -> vai al piano indicato in memoria;
• se sei arrivato al piano richiesto -> vuota la memoria usata per ricordare il piano.

In questo esempio il memory leak si verifica se viene premuto il tasto per il piano a cui già si trova l’ascensore, perché nelle istruzioni non è previsto che la memoria venga vuotata: il codice dice di non fare nulla, perché si è già al piano, ma non è richiesto il comando per rimuovere la memorizzazione del piano. Un memory leak di questo tipo non avrebbe un effetto immediato, perché probabilmente l’ascensore avrebbe memoria a sufficienza per gestire più richieste per il piano a cui già si trova prima di non avere più spazio, ma prima o poi quella condizione si verificherebbe e impedirebbe all’ascensore di funzionare normalmente. In quel caso, per vuotare la memoria e ripristinare le funzionalità sarebbe quindi necessario spegnere e riaccendere il sistema, in modo da eliminare le informazioni in memoria e renderla di nuovo disponibile.

L’esempio dell’ascensore è naturalmente una semplificazione estrema dei processi e delle condizioni molto più complesse che portano a un memory leak, ma aiuta a farsi un’idea su quali possano essere i benefici di un riavvio di un sistema. Naturalmente in questo caso spegnere e riaccendere ripristina le normali funzioni dell’ascensore, ma non risolve a monte il problema dovuto all’errore di programmazione che potrà quindi ripetersi nuovamente dopo un po’ di tempo. Per risolverlo si dovrà intervenire sul codice, aggiungendo l’istruzione corretta per far vuotare la memoria quando l’ascensore verifica di trovarsi già al piano richiesto.

Qualcosa di analogo, anche qui con maggiori complessità, avviene anche con gli smartphone e i computer che ormai fanno funzionare il mondo. È per questo che periodicamente i loro sistemi operativi e programmi vengono aggiornati: gli aggiornamenti più riconoscibili aggiungono nuove funzionalità, quelli meno evidenti risolvono i problemi di programmazione o progettazione che man mano vengono scoperti o da chi li sviluppa o da chi li utilizza (o spesso dai programmi stessi, che inviano automaticamente dati quando si bloccano, dai quali si possono poi trarre informazioni per sistemarli).

Le cause di un malfunzionamento possono essere moltissime, variano da dispositivo a dispositivo e non sempre è sufficiente spegnere e riaccendere. File compromessi o problemi fisici ai componenti possono impedire il ripristino delle funzionalità e richiedono interventi di altro tipo. Insomma, spegni e riaccendi non è la soluzione a tutti i problemi informatici, ma è quasi sempre la prima cosa da provare.