Sono completamente all'oscuro del funzionamento interno di un sistema operativo, ma posso più o meno intuire il comportamento approssimativo di molte funzioni. Una cosa che non riesco a capire, però, è il multitasking.
In teoria, il sistema operativo gestisce il tempo, in base alla CPU per piccoli intervalli ai vari programmi in esecuzione. Ma non è chiaro come funzioni veramente .
Supponiamo che il sistema operativo voglia avviare il mio programma. Il codice macchina viene caricato da qualche parte nella RAM, a partire da un determinato indirizzo. Immagino quindi che un salto debba essere eseguito a quell'indirizzo, permettendo al mio codice di essere eseguito. Ma in questo modo, il sistema operativo non può riprendere il controllo finché non salto indietro.
Fondamentalmente, posso immaginare solo due modi per farlo funzionare, ma nessuno dei due sembra davvero adatto:
-
Il sistema operativo può leggere le istruzioni della macchina che voglio eseguire ed emularle invece di eseguirle direttamente. Sono intenzionalmente vago, dal momento che non so come funzionerebbe, ma sembra che rallenterebbe notevolmente il programma.
-
In alternativa, il sistema operativo potrebbe attendere fino a quando effettuo una chiamata di sistema. In quel momento riprende il controllo e può controllare per quanto tempo sono stato in esecuzione e fare il suo materiale timesharing. Questo potrebbe funzionare, ma sembra inaffidabile, dato che potrei fare un lungo calcolo che non comporta chiamate di sistema e bloccare tutto per un po '.
Quindi, sembra che nessuno dei due meccanismi funzionerebbe molto bene. Come viene effettivamente eseguito il multitasking?