Lo scheduler: dalla Luna al PC di tutti i giorni
Informatica

Lo scheduler: dalla Luna al PC di tutti i giorni

Vi siete mai chiesti come sia possibile che il nostro computer esegua più programmi in contemporanea?

 

Quante volte abbiamo apprezzato il multitasking dei nostri computer e smartphone magari mentre lavorando a un progetto ascoltavamo il nostro brano preferito? Vi siete mai chiesti come sia possibile che il nostro computer esegua più programmi in contemporanea?

Bene, tutto questo è possibile grazie al programma Apollo e al sistema computerizzato di guida delle navicelle spaziali (Apollo Guidance Computer*) sviluppato negli anni ’60.

Procediamo con calma…
Un programma è un insieme di istruzioni ben definite in linee di codice per cui dato un input esso restituirà un output opportuno. Queste istruzioni vengono eseguite dal processore (per semplicità assumiamo di avere un processore mono-core) una alla volta e consecutivamente una all’altra. Quindi se il processore, che è l’unità di calcolo del nostro computer, riesce a elaborare un’istruzione alla volta, com’è possibile che riesca, invece, a mantenere in esecuzione più programmi?

Ci viene in aiuto il sistema operativo. Quest’ultimo, oltre a fornire al nostro computer un ambiente “umano” con cui interagire, come l’interfaccia grafica, offre alcuni fondamentali servizi per il corretto funzionamento del sistema come l’interazione con le periferiche (joystick, stampanti…), i servizi per la connessione a internet (TCP-IP, UDP…) e infine lo scheduling dei programmi, ovvero tramite una sorta di “politica” secondo cui l’OS decide quali programmi mandare in esecuzione al processore e per quanto tempo.   Infatti, grazie a questa strategia, il processore non esegue tutto il codice di un solo programma fino alla sua fine ma tanti pezzetti di codice di tanti programmi; ovviamente il context-switch, ovvero lo scambio di codice dei vari programmi, avviene a frequenze elevatissime così che noi umani non ce ne accorgiamo.

Quindi a noi sembra che vi siano più programmi in stato di esecuzione, mentre in realtà il processore sta elaborando le istruzioni di uno solo.

Questa soluzione venne implementata con successo proprio nel computer di bordo che portò l’uomo sulla Luna. Infatti l’AGC doveva svolgere molteplici operazioni di vitale importanza in un tempo “relativamente” contemporaneo, tra le quali il calcolo/controllo della rotta, l’elaborazione dei dati provenienti dai sistemi radar e altimetrici e il controllo dello stato della navicella. La politica di scheduling adottata dai progettisti fu di tipo pre-emptive ovvero assegnava lo stesso tempo di esecuzione a tutti i programmi. Questa politica divenne, negli anni a venire, importantissima nei sistemi operativi real-time dove, in ambito industriale, sono gestiti i software che comandano i macchinari.

Oggi esistono diversi tipi di politiche di scheduling che cercano di differenziare i tempi di esecuzione tra i diversi tipi di software: per esempio il programma che legge i pacchetti di dati dalla rete internet dovrà essere eseguito più frequentemente di un programma di editor di testo che può restare in attesa di input per molto tempo. Così si cerca di creare una sorta di gerarchia tra i programmi per rendere a noi utenti un’esperienza il più possibile fluida e performante.

All’inizio dell’articolo abbiamo considerato il caso di un processore mono-core ovvero che possiede un’unica centrale di elaborazione dati in quanto era più immediato comprendere il concetto di falsa contemporaneità di esecuzione delle istruzioni. Da circa dieci anni sono stati sviluppati processori con più centrali di elaborazione, effettivamente, in questo caso il processore è in grado di eseguire istruzioni di diversi programmi in contemporanea (una serie di istruzioni per core); anche qui, però, si rendono necessarie le politiche di scheduling per sincronizzare i risultati e per scegliere l’unità di elaborazione più indicata per un determinato programma.

Ecco come una soluzione ideata quasi 60 anni fa venga, seppur con adeguate modifiche, ancora oggi utilizzata.

Non è come avere un pezzetto di Luna nel proprio pc?

*(Per gli appassionati: l’anno scorso la NASA ha pubblicato il codice sorgente su GitHub dell’AGC)

Utiliziamo cookie tecnici e di terze parti per fornire i nostri servizi e gestire le statstiche. Utilizzando il sito (quindi navigando o scrollando), accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Utilizziamo cookie tecnici per fornire i nostri servizi. Tali cookie sono essenziali per la corretta visualizzazione del sito e non possono essere disabilitati. Maggiori informazioni sulla documentazione ufficiale.

Utilizziamo cookie di terze parti per gestire i commenti, appoggiandoci alla piattaforma Disqus. Maggiori informazioni nella documentazione ufficiale.

Utilizziamo cookie di terze parti e di profilazione per gestire le statistiche, appoggiandoci alla piattaforma Google Analytics. Maggiori informazioni nella documentazione ufficiale.

L'Utente puo' disabilitare i cookie modificando le impostazioni del browser, o utilizzando strumenti di gestione online come YourOnlineChioices. Si ricorda tuttavia che disabilitare del tutto o in parte i cookie potrebbe avere un impatto negativo sulla visualizzazione e sulla fruibilita' del sito.

Chiudi