
In un calcolatore, la CPU è una e i processi che cercano di avere accesso per fare cose sono moltissimi. Cl va qualcuno che decida chi ha accesso, quando e come vada gestita questa coda. Il sistema operativo gestisce la coda della CPU per rendere il sistema efficiente e reattivo
Per leggere lo script fai click su questo testo
Nella vita di tutti i giorni usiamo, anche senza rendercene conto, due cose, in modo praticamente continuativo: dei processori e dei sistemi operativi che vengono fatti funzionare dai processori. I computer sono un esempio, lo sono gli smartphone o gli smartwatch, ormai lo sono le automobili, soprattutto quelle dotate dei sistemi di intrattenimento più avanzati.
Il sistema operativo, tra le tantissime cose che fa, si occupa di definire quando un processo viene assegnato al processore e quando gli viene tolto, con quali regole e quali modalità.
La cosa non è affatto semplice.
Questa puntata è stata realizzata grazie alle indispensabili donazioni di generosi ascoltatori
Gli abbonati
Giorgio
Ivan
Per sapere come far parte di questo elenco vi rimando al capitolo un po’ più in là nella puntata
Prima di iniziare, vi ricordo che potete contattarmi in mille modi, su Bluesky sono francesco.iltucci.com, su Mastodon sono cesco_78 su mastodon.social o pillole dibit su hackyderm.io o via mail a [email protected], trovate tutti i link comodi comodi sull’app dalla quale state ascoltando la puntata o sul sito, rispondo sempre. Il metodo migliore però è il gruppo telegram attivo durante tutta la settimana, dove si parla delle puntate e di tecnologia in generale, siamo davvero tanti, lo trovate a pilloledib.it/telegram
Prima di iniziare a partire per vedere come funziona un sistema operativo, è necessario sfatare un mito.
Noi siamo abituati, più o meno da sempre, direi da quando c’è Windows, a fare più cose contemporaneamente sul computer.
Scriviamo un testo mentre guardiamo un video, magari la stampante sta elaborando un documento e il compilatore sta lavorando in modo pesante per compilare il codice su cui abbiamo lavorato fino a 10 minuti fa.
Tutto insieme, tutto in contemporanea.
Ebbene, il processore, come l’uomo medio, la donna no, lei ha i superpoteri, può fare una cosa sola per volta.
Sarebbe da dire una cosa per core, ma noi oggi immaginiamo che il nostro computer abbia un solo core, semplifichiamo un po’.
Vi assicuro che in ogni istante di vita di un calcolatore, il suo processore sta facendo una sola cosa per volta, anche se a noi pare che ne stia facendo mille.
Il sistema operativo è addetto a definire quali sono i processi che devono essere assegnati alla CPU, quando, per quanto tempo, quando devono essere rimossi.
Immaginiamo che il processore sia uno sportello delle poste.
Tutti i processi sono le persone che devono andare allo sportello e hanno delle cose da fare.
Il sistema operativo ha il potere di gestire le persone in coda, in questo caso non ci sono i vecchi che si arrabbiano.
Quando un processo ha bisogno dello sportello si mette in coda, lo sportello si libera e il processo inizia a far lavorare lo sportellista.
Per farlo lavorare c’è una fase che si chiama context switch, dove lo sportellista deve essere messo a conoscenza di tutte le informazioni necessarie per il lavoro che deve fare, nella CPU questo equivale a caricare nei registri i dati che sono in memoria o dalle periferiche di input.
A questo punto lo sportellista fa quello che il processo chiede.
Quando ha finito, c’è un nuovo context switch perché si passa al processo successivo in coda.
Se il processo allo sportello ci mette troppo tempo, tutti gli altri processi devono aspettare troppo tempo.
La sensazione per chi sta usando il calcolatore è un rallentamento generale.
Se il processo allo sportello si addormenta mentre lavora con lo sportellista o non trova il bollettino e resta lì e non se ne va, il sistema si blocca.
Ci va un sistema per gestire queste cose.
La gestione dei processi fatta in modo che il processo tiene occupata la CPU per tutto il tempo che le serve, si dice non-preemptive.
La coda gestita in modo che ogni processo viene servito nell’ordine di arrivo si definisce FCFS, First Come, First Served.
Il sistema potrebbe chiedere a tutte le persone in coda, appena arrivano, “tu cosa devi fare e quanto ci metti?”
A questo punto mette come prime persone in coda quelle che hanno operazioni più veloci.
In questo modo il tempo di attesa medio per tutti gli altri si abbassa moltissimo, chi deve fare operazioni lunghe va al fondo e farà aspettare meno persone.
Questo sistema di gestire la coda è chiamato SJF, Shortest Job First.
E se arriva una persona che deve fare un’operazione ancora più corta di quella attualmente allo sportello?
Se l’algoritmo è non preemptive, si mette subito in coda dietro e sarà il prossimo, se l’algoritmo è preemptive, il sistema operativo può decidere di interrompere la persona allo sportello e far passare quella molto veloce appena arrivata, tanto ci mette un attimo.
Poi si può decidere che ogni persona può stare allo sportello per un tempo massimo prefissato, se la tua operazione è lunga, superato quel tempo, raccogli tutti i tuoi documenti, passi al fondo della coda, fai scorrere la coda, quando è di nuovo il tuo turno continui.
Abbiamo risolto il problema di chi ha dei lavori troppo lunghi e di chi si blocca.
Questo modo di lavorare a cerchio si chiama algoritmo Round Robin
Potrebbe succedere che arriva però una persona importante che deve passare prima.
Esistono dei modi per avere delle priorità nella gestione delle code, chi ha priorità più alta passa prima, indipendentemente dalla lunghezza del lavoro che deve fare.
Un dettaglio reale, in un sistema operativo è quasi impossibile sapere in anticipo per quanto tempo ne avrà un processo nel core di un processore, il sistema cercherà di intuire la lunghezza del lavoro di quel processo sulla serie storica.
Dare delle priorità alle persone in coda può generare dei problemi come quell’università dove, al reboot di uno dei loro mainframe si accorsero che c’era un processo a priorità molto bassa che stava aspettando, paziente, in coda, da anni.
Ci sono dei sistemi che aumentano la priorità alle persone in coda man mano che il tempo passa, per garantire loro che prima o poi saranno serviti dal processore.
Esiste anche un altro modo per bloccare un calcolatore, ma con il processore senza processi, a carico zero.
Immaginiamo che alle poste la persona A debba pagare, ma per pagare deve aspettare che la persona B prelevi. La persona B per prelevare deve aspettare che la persona C vada a ritirare la tessera bancomat. La persona C però deve aspettare che la persona A paghi, per liberare lo sportello.
Sono tutti bloccati per un’attività di un’altra persona e nessuno può fare il primo passo.
Questa cosa si chiama stallo e il computer si blocca per starvation, muore di fame.
Vi avevo detto che le cose non sono affatto semplici.
E pensate quando in tutto questo si deve mettere in mezzo che i processi devono gestire input e output, il sistema operativo deve gestire lo swap della memoria e, adesso con le CPU con più core, deve fare in modo che i processi siano pronti da mandare su un certo core, senza che a un certo punto si blocchino perché in attesa di dati di un altro processo che sta lavorando su un altro core.
Come gestiscono le code i tre sistemi operativi più conosciuti?
Windows: Assegna la priorità ai processi e poi usa una modalità preemptive, se arriva un processo con priorità più alta, fa context switch e lo esegue subito.
Linux: funziona come Windows, di base, ma usa un algoritmo di tipo CFS, Completely Fair Scheduler, cerca di mantenere un accesso equo alla CPU per tutti i processi
MacOS: Usa una coda con priorità variabili che sono assegnate a seconda dell’attuale condizione e carico del sistema.
Ovviamente lo switch tra processi assegnati alla CPU avviene ogni pochi millesimi di secondo, per questo noi abbiamo la sensazione che il computer stia facendo molte cose in contemporanea, se sommiamo che adesso le CPU hanno più core, per eseguire davvero più attività in contemporanea, ecco che abbiamo questa sensazione di multitasking reale.
Questo podcast vive perché io lo produco, lo registro e lo pubblico settimana dopo settimana o quasi. Ma continua ad andare avanti perché la soddisfazione di vedere le notifiche delle donazioni mi spinge a fare sempre nuove puntate, come ringraziamento e impegno nei vostri confronti. Se esce ogni settimana è grazie a voi.
E se donate, compilate il form, vi spedisco anche i gadget, così siamo tutti contenti.
Potete farlo con Satispay, SumUp o Paypal.
Potete partecipare anche usando i link sponsorizzati di Amazon o acquistare la connettività o uno degli altri servizi di Ehiweb, che sponsorizzo con molto piacere da tempo, un gestore di connettività come loro non lo trovate in giro.
Oltre alla connettività per casa FTTH o FTTC, hanno le SIM, posano fibra dedicata per le aziende, fanno servizio VoIP, hanno un supporto spaziale e tutti i loro dipendenti sono assunti a tempo indeterminato.
Provateli, non tornerete più indietro.
E se avete bisogno di un servizio di Hosting, andate da ThridEye, che ospita da anni il sito del podcast, ho fatto la mia scelta e anche qui il livello è altissimo, i contatti sono sul sito.
Un problema abbastanza ricorrente è avere un foglio, che sia carta, legno, alluminio o altro materiale e avere dei pezzi rettangolari da tagliare da questo foglio, di misure diverse.
L’obiettivo sarebbe quello di ottimizzare i tagli in modo da avere meno scarto possibile e farci stare più pezzi possibili.
Se abbiamo un foglio di compensato da 100x100cm e vogliamo tagliare 4 quadrati da 50cm, la cosa è facile, a parte il millimetro della lama che viene perso, ma se vogliamo tagliare 6 rettangoli di misure diverse, dobbiamo metterci lì e fare delle prove per vedere se ci stanno tutti e come disporli.
Io ho avuto un problema simile con dei contenitori in un cassetto. Ho un cassetto, dei contenitori da stampare con la stampante 3D e nessuna certezza che ci stiano tutti.
Bene, si apre cutlist optimiser, si mettono tutte le misure ed ecco la lista dei tagli da fare per farci stare tutto, se ci sta.
Sembra magia, ma non lo è
Sembra difficile da spiegare, andate sul sito e scoprirete cosa fa in due minuti, forse meno.
Tenetelo nei vostri preferiti, vi tornerà utile
Questa puntata di Pillole di Bit è giunta al termine, vi ricordo che se ne può discutere nel gruppo telegram e che tutti i link e i riferimenti li trovate sull’app di ascolto podcast o sul sito, non serve prendere appunti.
Io sono Francesco e vi do appuntamento a lunedì prossimo per una nuova puntata del podcast che, se siete iscritti al feed o con una qualunque app di ascolto vi arriva automagicamente.
Se volete partecipare alla realizzazione della puntata speciale di Pillole di Bit Stories, andate su pilloledib.it/sostienimi e fate la vostra parte, se a fine mese il cerchio delle donazioni di riempie, realizzerò la puntata speciale.
Grazie per avermi ascoltato
Ciao!
Pillole di Bit (https://www.pilloledib.it/) è un podcast indipendente realizzato da Francesco Tucci, se vuoi metterti con contatto con me puoi scegliere tra diverse piattaforme:
– Telegram
– BlueSky
– Il mio blog personale ilTucci.com
– Il mio canale telegram personale Le Cose
– Mastodon personale
– Mastodon del podcast
– la mail (se mi vuoi scrivere in modo diretto e vuoi avere più spazio per il tuo messaggio)
Rispondo sempre
Se questo podcast ti piace, puoi contribuire alla sue realizzazione!
Con una donazione diretta:
– Singola con Satispay
– Singola con SumUp
– Singola o ricorrente con Paypal
Usando i link sponsorizzati
– Con un acquisto su Amazon (accedi a questo link e metti le cose che vuoi nel carrello)
– Attivando uno dei servizi di Ehiweb
Se hai donato più di 5€ ricordati di compilare il form per ricevere i gadget!
Il sito è gentilmente hostato da ThirdEye (scrivete a domini AT thirdeye.it), un ottimo servizio che vi consiglio caldamente e il podcast è montato con gioia con PODucer, un software per Mac di Alex Raccuglia