Come lavorano insieme l’hardware e il software del computer?

In strati.

Pensate a un vecchio film della seconda guerra mondiale (o anche prima), dove il capitano, in piedi sul ponte, dà un ordine: "Fate rotta per le Hawaii". Il suo primo in comando trasmette l'ordine agli altri ufficiali del ponte che dovranno fare la loro parte per eseguire quel comando generale.

Uno di questi ufficiali del ponte prende un telefono e grida un comando alla sala macchine, "Avanti, mezza potenza! (o qualunque sia la nomenclatura appropriata della Marina, mi dispiace; non sarò mai un buon romanziere di storie della Marina!).

L'ingegnere capo di sotto riaggancia il telefono, poi si gira verso i suoi subordinati, guardando ognuno a turno: "Caricate più carbone nelle caldaie 1 e 2! Accendere la caldaia 3! Regolare la pressione del vapore! Controlla il blah-blah-blah!".

Ognuno di questi sub-ingegneri gestisce poi i suoi subordinati per far fare quelle cose. Il tizio che ha ricevuto l'ordine "Caricate più carbone nelle caldaie 1 e 2!" corre lungo la linea verso ognuna di queste caldaie, controlla il tasso di combustione attuale, e ordina ai lacchè di iniziare a spalare carbone, fino a raggiungere la pressione del vapore X. L'altro tizio prende la sua squadra e inizia ad alimentare il motore numero 3. E così via.

Il capitano non ha bisogno di sapere che ci vogliono 15 pale di carbone per ottenere un aumento del 10% della pressione del vapore sulle caldaie 1 & 2, ma che la caldaia 3 è un modello più nuovo ed efficiente che ha bisogno solo di 12 pale, o anche che la caldaia # 3 è rimasta ferma al minimo e ha bisogno di un grande calcio nel sedere per andare insieme a # 1 & 2. Ci sono strati di astrazione, che proteggono il capitano da un livello di dettaglio che è irrilevante per fare il suo lavoro (a meno che qualcosa vada storto e necessiti di considerazione a livello di comando).

Ogni piccolo clic su un pulsante o trascinamento della finestra avvia una raffica di comandi e risposte. Quando trascini una finestra da una parte all'altra dello schermo, il sistema operativo inizia a ridipingere quella finestra un po' alla volta mentre tieni premuto il pulsante sinistro e muovi il mouse, mentre ridipinge anche i dati grafici che erano sotto la finestra, perché sta tenendo traccia di ciò che è in tutte le finestre, sta dicendo all'altra applicazione responsabile di quella finestra sottostante "Ehi, non sei coperto da un'altra finestra, ora sei visibile, ho bisogno che tu ridipinga la tua finestra - dammi quei dati grafici e io li invierò - solo i pezzi che sono ora visibili - all'hardware grafico."

Il sistema operativo emette quindi una serie di comandi, che filtrano in un insieme più ampio di sotto-comandi ad un "driver di dispositivo" per prendere quei dati grafici, e organizzarli in un modo che la scheda grafica può gestire. La scheda grafica prende quel comando e quei dati, fa qualche elaborazione su di essi (forse avete qualche effetto drop-shadow intorno ai bordi delle finestre per dare quell'aspetto 3D), e poi sposta quei dati aggiornati al circuito che emette i dati video sul vostro monitor.

La vostra finestra si muove, e ciò che era sotto la finestra viene rivelato.

C'è l'hardware, ci sono i device-driver, c'è spesso un 'livello di astrazione dell'hardware' che cerca di far sì che la maggior parte dell'hardware all'interno di certe categorie sia presentato in modo uniforme al sistema operativo, in modo che il sistema operativo possa emettere la stessa serie di comandi indipendentemente dalle differenze tra una marca e un modello di scheda grafica e un altro, e c'è il sistema operativo che arbitra l'accesso a tutto l'hardware, in modo che si possano eseguire più applicazioni sullo stesso hardware e che vadano tutte d'accordo, condividendo quelle risorse limitate.

Strati. Livelli di astrazione.