Torna alla pagina di Sistemi Operativi
:: Appunti caotici ::
Lezione 3 Sospensione e riattivazione dei processi
...
Nel codice di un processo I/O-bound abbiamo molte operazioni di input/output intervallate da poche istruzioni legate al processore; viceversa nei processi CPU-bound (in un caso limite potrei anche non avere mai un'operazione di I/O).
Sono ovviamente delle casistiche estreme, poi esistono le vie di mezzo.
L'obiettivo è ovviamente consentire la turnazione dei processi sul processore, massimizzandone lo sfruttamento.
Se ho un processo CPU-bound dovrò effettuare meno turnazioni, in quanto per sua stessa natura darà tanto da fare al processore. Per garantirne invece un discreto utilizzo anche con processi I/O-bound, dovrei eseguirne più di uno. Tutto sta quindi nel "dosaggio" dei processi lanciati, data la loro incidenza sull'omogeneità della loro evoluzione parallela.
Metodologia:
Bisogna operare una distinzione tra:
Il processo in esecuzione può essere sospeso in modo implicito (effettuato automaticamente dall'ambiente operativo) o esplicito (è il processo che richiama volontariamente l'operazione di rilascio del processore).
Modo implicito:
Modo esplicito:
Tutte le volte che avverranno uno di questi tre casi, il processore verrà SEMPRE rilasciato su quel punto del processo (che viene dunque sospeso).
La sospensione in questi casi è sincrona con l'evoluzione della computazione in procedure del sistema operativo; avviene infatti sempre su una funzione del sistema operativo (non dell'applicazione), quindi con il processo in esecuzione nella modalità supervisor, non utente.
La tecnica del Time Sharing è stata introdotta per dare l'illusione al processo di di possedere il processore tutto per se. Quest'illusione è creta tramite la turnazione dei processi sul processore facendo credere quindi di far evolvere contemporaneamente le computazioni desiderate. Il problema sorge sui processi CPU-bound i quali non rilasciano di frequente il processore, facendo perdere di conseguenza tale illusione. Una soluzione valida è di forzare il rilascio del processore (pre-emption).
...
Il realtime clock è il dispositivo fisico che scandisce il tempo generando periodicamente una interruzione che segnala che è passato un certo intervallo di tempo. E' sostanzialmente un chip sulla scheda madre, contenente un cristallo che viene fatto oscillare in modo estremamente stabile con segnali elettrici.
Il periodo di oscillazione è segnalato nel manuale del calcolatore, e in qualche caso è anche programmabile.
Se il periodo RTC è troppo breve vado incontro a un sovraccarico di gestione dell'interruzione, perché avrei richieste di rilascio incredibilmente frequenti. Quindi moltiplico tale periodo per un fattore k, in modo che solo un'interruzione ogni k viene considerata come termine del quanto di tempo, e quindi solo questa scatenerà la rimozione del processo in esecuzione (con una pre-emption)
In sistemi time-sharing, oltre alle politiche di sospensione dei processi viste prima se ne aggiunge una quarta, ovvero sospensione quando scade il quanto di tempo. E' anch'essa implicita, è asincrona (perché è fuori dal controllo del programmatore) e garantisce che ci sia un'equa distribuzione dei tempi di calcolo.
...
...
...
...
...