Esercizio - Domande di teoria su sistemi operativi, scheduling e multiprocessore (eserciziario, esercizi 1, 2, 64 e 121)
In questa pagina 5
Testo (eserciziario del corso di Sistemi Operativi, Ing. Informatica UniPD).
Esercizio 1 (quattro domande di teoria generale, dall'inglese): (a) Quando è appropriato che un sistema operativo rinunci all'efficienza e "sprechi" risorse? Perché un tale sistema non è davvero sprecone? (b) Qual è la difficoltà principale di chi scrive un sistema operativo per un ambiente real-time? (c) Considerate le varie definizioni di sistema operativo: un sistema operativo dovrebbe includere applicazioni come browser e programmi di posta? Si argomenti sia a favore sia contro. (d) In che modo la distinzione tra modalità kernel e utente è una forma rudimentale di protezione?
Esercizio 2. Un algoritmo di scheduling stabilisce un ordine di esecuzione. Dati processi su un processore, quanti diversi scheduling sono possibili? Formula in .
Esercizio 3 è nel file Esercizio - Implementare il banchiere e calcolarne la complessità (eserciziario, esercizio 3 e laboratorio 6).
Esercizio 64. Tre processi arrivano uno dopo l'altro (in quest'ordine ma in tempi diversi) nella coda dei pronti, con un solo burst di CPU e nessun I/O. In quale caso il tempo medio di attesa del sistema è lo stesso con FCFS e con SJF preemptive?
Esercizio 121. Una CPU quad core esegue tre processi con tempi di esecuzione (sul core dei dati) di 5, 10, 20 ms. Si dica, motivando, il tempo di esecuzione totale nel caso peggiore e nel migliore, supponendo i processi tutti CPU-bound e che non migrino dal core dopo l'inizio. Ogni processo è un flusso sequenziale non parallelizzabile.
Teoria: Sistema operativo - ruolo, struttura e system callIl sistema operativo (operating system, OS) è il software che fa da intermediario tra utenti, programmi e hardware: alloca le risorse (CPU, memoria, dischi, dispositivi), esegue i programmi e li protegge l'uno dall'altro; la sua parte sempre in esecuzione è il kernel; l'hardware offre la modalità doppia (utente/kernel, un bit di modo) e gli interrupt, e il programma chiede un servizio al kernel con una system call, una trap che passa in modalità kernel; di solito si usa un'API (libc, POSIX, Windows API) che a sua volta invoca la system call (printf chiama write); la struttura può essere monolitica (UNIX/Linux, con moduli caricabili), a microkernel (Mach, QNX), ibrida (Windows, Darwin, Android sopra un kernel Linux modificato).Sistema operativo - ruolo, struttura e system call →, Scheduling della CPU - FCFS, SJF, priorità e round robinLo scheduler della CPU sceglie tra i processi pronti quello a cui dare il core (il dispatcher esegue il cambio, con latenza di dispatch); lo scheduling è non preemptive (il processo tiene la CPU finché termina o si blocca) o preemptive (la CPU gli può essere tolta, con rischio di race condition); i criteri sono utilizzo della CPU e throughput (da massimizzare), tempo di attesa, di turnaround (completamento meno arrivo) e di risposta (da minimizzare); FCFS è semplice ma soffre dell'effetto convoglio (esempio 24, 3, 3: attesa media 17 contro 3); SJF è ottimo per l'attesa media ma richiede la lunghezza del prossimo burst, stimata con la media esponenziale tau(n+1) = alfa t(n) + (1-alfa) tau(n); SRTF è la versione preemptive (esempio con attesa media 6,5 contro 7,75); round robin dà a ciascuno un quanto q e nessuno attende più di (n-1)q; la priorità causa starvation, risolta con l'aging; code multilivello e a feedback (MLFQ) combinano le politiche.Scheduling della CPU - FCFS, SJF, priorità e round robin →, Scheduling multiprocessore e real-timeNei sistemi real-time conta la scadenza: si misurano latenza di interrupt e latenza di dispatch; i sistemi soft real-time danno priorità ai compiti critici senza garanzie, quelli hard devono rispettare le scadenze; per compiti periodici (burst t, scadenza d, periodo p, con 0 <= t <= d <= p) l'utilizzo è la somma di t/p: Rate Monotonic (priorità fissa, minore il periodo maggiore la priorità) garantisce le scadenze se l'utilizzo non supera N(2^(1/N)-1) (83% per due compiti), Earliest Deadline First (priorità dinamica, scadenza più vicina) le garantisce se l'utilizzo è sotto il 100%; la ripartizione proporzionale assegna T quote con controllo di ammissione; con più processori si hanno code comuni o private (SMP), core con più thread hardware, bilanciamento del carico (push e pull migration), affinità al processore (soft e hard), scheduling NUMA-aware; Linux usa CFS/EEVDF con domini di scheduling, Windows 32 livelli di priorità.Scheduling multiprocessore e real-time →.
Esercizio 1
(a) Quando rinunciare all'efficienza. Nei sistemi mono-utente interattivi (un PC, uno smartphone) lo scopo è massimizzare l'uso del sistema da parte dell'utente, non della CPU. Un'interfaccia grafica consuma molti cicli di CPU che un'interfaccia testuale risparmierebbe, ma migliora l'interazione. Non è spreco perché le risorse "sprecate" sono quelle che sarebbero inattive comunque, e il risultato è un servizio migliore per chi usa il sistema.
(b) Real-time. Mantenere il sistema entro vincoli temporali fissi: se un compito non è completato in tempo il sistema può guastarsi (frenata, controllo di un robot). Chi scrive il sistema deve garantire che lo scheduling e le latenze non superino mai il tempo massimo ammesso (Scheduling multiprocessore e real-timeNei sistemi real-time conta la scadenza: si misurano latenza di interrupt e latenza di dispatch; i sistemi soft real-time danno priorità ai compiti critici senza garanzie, quelli hard devono rispettare le scadenze; per compiti periodici (burst t, scadenza d, periodo p, con 0 <= t <= d <= p) l'utilizzo è la somma di t/p: Rate Monotonic (priorità fissa, minore il periodo maggiore la priorità) garantisce le scadenze se l'utilizzo non supera N(2^(1/N)-1) (83% per due compiti), Earliest Deadline First (priorità dinamica, scadenza più vicina) le garantisce se l'utilizzo è sotto il 100%; la ripartizione proporzionale assegna T quote con controllo di ammissione; con più processori si hanno code comuni o private (SMP), core con più thread hardware, bilanciamento del carico (push e pull migration), affinità al processore (soft e hard), scheduling NUMA-aware; Linux usa CFS/EEVDF con domini di scheduling, Windows 32 livelli di priorità.Scheduling multiprocessore e real-time →).
(c) Applicazioni dentro il sistema operativo? A favore: un'applicazione integrata può sfruttare funzioni del kernel e ottenere prestazioni migliori di una esterna. Contro (di solito prevalgono): le applicazioni sono applicazioni, non parte del sistema operativo (che è il kernel più i programmi di sistema); ogni vantaggio di prestazione è annullato dalle vulnerabilità che il codice applicativo porta nel kernel (un errore in un browser integrato compromette tutto); il sistema diventa gonfio e più difficile da mantenere.
(d) Protezione rudimentale. Certe istruzioni (I/O, interrupt, configurazione della memoria) funzionano solo in modalità kernel; l'accesso ai dispositivi e il controllo degli interrupt sono riservati al kernel. In modalità utente la CPU ha poche capacità di danneggiare le risorse critiche: i programmi utente possono solo chiedere servizi tramite system call, che il kernel controlla (Sistema operativo - ruolo, struttura e system callIl sistema operativo (operating system, OS) è il software che fa da intermediario tra utenti, programmi e hardware: alloca le risorse (CPU, memoria, dischi, dispositivi), esegue i programmi e li protegge l'uno dall'altro; la sua parte sempre in esecuzione è il kernel; l'hardware offre la modalità doppia (utente/kernel, un bit di modo) e gli interrupt, e il programma chiede un servizio al kernel con una system call, una trap che passa in modalità kernel; di solito si usa un'API (libc, POSIX, Windows API) che a sua volta invoca la system call (printf chiama write); la struttura può essere monolitica (UNIX/Linux, con moduli caricabili), a microkernel (Mach, QNX), ibrida (Windows, Darwin, Android sopra un kernel Linux modificato).Sistema operativo - ruolo, struttura e system call →).
Esercizio 2
Un ordine di esecuzione di processi è una permutazione: il primo può essere scelto in modi, il secondo in , ..., l'ultimo in 1. Gli scheduling possibili sono
Per : (, , , , , ). Cresce molto in fretta (): per questo si usano regole (FCFS, SJF) e non la ricerca esaustiva.
Esercizio 64
Condizione sufficiente: , cioè i burst crescono nell'ordine di arrivo. Perché:
- quando arriva, il processo in esecuzione () ha un residuo : SJF preemptive prelaziona solo se il nuovo burst è strettamente minore del residuo, quindi non interrompe ;
- lo stesso per : e , quindi nessuna prelazione;
- tra i processi in attesa, SJF sceglie il burst minore, che è sempre il più vecchio ().
Quindi la sequenza SJF preemptive è identica a quella FCFS (nessuna prelazione, stesso ordine) e le attese medie coincidono. La condizione è sufficiente, non necessaria (anche con alcune uguaglianze o con arrivi molto distanziati si ottiene la stessa sequenza).
Esempio: (arrivo 0, burst 4), (1, 5), (2, 6). In entrambi i casi: 0-4, 4-9, 9-15; attese 0, 3, 7, media .
Esercizio 121
- Caso peggiore: 35 ms. I tre processi finiscono tutti sullo stesso core e girano in sequenza: ms. (Strettamente il caso peggiore potrebbe anche essere un tempo infinito, se i processi non fossero mai schedulati: il testo chiede il caso con scheduling ragionevole.)
- Caso migliore: 20 ms. Ogni processo gira su un core diverso (ci sono 4 core per 3 processi): il tempo totale è il massimo dei tre, cioè 20 ms. Non si può scendere sotto 20 perché è un flusso sequenziale non parallelizzabile (legge di Amdahl: la parte seriale limita lo speedup).
Domande d'esame
Dati processi su una CPU, quanti scheduling sono possibili e perché? Traccia. , le permutazioni degli processi; senza prelazione. Con prelazione il numero di sequenze di esecuzione è infinito (dipende dal quanto), per questo si studiano politiche e non tutti gli ordini.
Versione ripasso
- 1a Si rinuncia all'efficienza nei sistemi mono-utente (la GUI "spreca" cicli ma migliora l'interazione): lo scopo è l'uso da parte dell'utente. 1b Real-time: rispettare vincoli temporali fissi. 1c Applicazioni nel sistema: a favore le prestazioni; contro: non sono parte del sistema, vulnerabilità nel kernel, sistema gonfio. 1d Istruzioni privilegiate, I/O e interrupt solo in modalità kernel. Rimandi: Sistema operativo - ruolo, struttura e system callIl sistema operativo (operating system, OS) è il software che fa da intermediario tra utenti, programmi e hardware: alloca le risorse (CPU, memoria, dischi, dispositivi), esegue i programmi e li protegge l'uno dall'altro; la sua parte sempre in esecuzione è il kernel; l'hardware offre la modalità doppia (utente/kernel, un bit di modo) e gli interrupt, e il programma chiede un servizio al kernel con una system call, una trap che passa in modalità kernel; di solito si usa un'API (libc, POSIX, Windows API) che a sua volta invoca la system call (printf chiama write); la struttura può essere monolitica (UNIX/Linux, con moduli caricabili), a microkernel (Mach, QNX), ibrida (Windows, Darwin, Android sopra un kernel Linux modificato).Sistema operativo - ruolo, struttura e system call →.
- 2: (permutazioni). 64: FCFS e SJF preemptive coincidono se (burst crescenti nell'ordine di arrivo: nessuna prelazione, stesso ordine); condizione sufficiente. Rimandi: Scheduling della CPU - FCFS, SJF, priorità e round robinLo scheduler della CPU sceglie tra i processi pronti quello a cui dare il core (il dispatcher esegue il cambio, con latenza di dispatch); lo scheduling è non preemptive (il processo tiene la CPU finché termina o si blocca) o preemptive (la CPU gli può essere tolta, con rischio di race condition); i criteri sono utilizzo della CPU e throughput (da massimizzare), tempo di attesa, di turnaround (completamento meno arrivo) e di risposta (da minimizzare); FCFS è semplice ma soffre dell'effetto convoglio (esempio 24, 3, 3: attesa media 17 contro 3); SJF è ottimo per l'attesa media ma richiede la lunghezza del prossimo burst, stimata con la media esponenziale tau(n+1) = alfa t(n) + (1-alfa) tau(n); SRTF è la versione preemptive (esempio con attesa media 6,5 contro 7,75); round robin dà a ciascuno un quanto q e nessuno attende più di (n-1)q; la priorità causa starvation, risolta con l'aging; code multilivello e a feedback (MLFQ) combinano le politiche.Scheduling della CPU - FCFS, SJF, priorità e round robin →.
- 121: peggiore 35 ms (stesso core in sequenza), migliore 20 ms (un core per processo, vale il massimo); i processi sono sequenziali. Rimandi: Scheduling multiprocessore e real-timeNei sistemi real-time conta la scadenza: si misurano latenza di interrupt e latenza di dispatch; i sistemi soft real-time danno priorità ai compiti critici senza garanzie, quelli hard devono rispettare le scadenze; per compiti periodici (burst t, scadenza d, periodo p, con 0 <= t <= d <= p) l'utilizzo è la somma di t/p: Rate Monotonic (priorità fissa, minore il periodo maggiore la priorità) garantisce le scadenze se l'utilizzo non supera N(2^(1/N)-1) (83% per due compiti), Earliest Deadline First (priorità dinamica, scadenza più vicina) le garantisce se l'utilizzo è sotto il 100%; la ripartizione proporzionale assegna T quote con controllo di ammissione; con più processori si hanno code comuni o private (SMP), core con più thread hardware, bilanciamento del carico (push e pull migration), affinità al processore (soft e hard), scheduling NUMA-aware; Linux usa CFS/EEVDF con domini di scheduling, Windows 32 livelli di priorità.Scheduling multiprocessore e real-time →.
- 2, esempio: : ordinamenti (, , , , , ); .
- 64, esempio: , , : sia FCFS sia SRTF danno 0-4, 4-9, 9-15; attese 0, 3, 7 (media ): nessuna prelazione perché ogni nuovo burst è del residuo in esecuzione.
- 121: con 4 core e 3 processi sequenziali il massimo ms è un limite inferiore (Amdahl: la parte seriale non si accelera); il peggiore ms è il caso con un solo core usato.
- Errori tipici: contare o per le permutazioni; dire che la condizione di 64 è necessaria; sommare i tempi nel caso migliore.