FabioJ ha scritto:
Grazie per aver risposto .
Approfitto subito per fare un'altra domanda .
Forse chiedo troppo pero' sono solo esercizi per capire l'argomento .
In realtà dipende se vuoi risposte accademiche, cioè come si insegna nei corsi universitari di base, o quello che accade nella realtà.
comunque... (sono un po' di corsa, magari stasera dettaglio meglio se trovo il tempo)
6. Il fenomeno della starvation (o attesa infinita) di un processo P.
Indicare se seguenti affermazioni sono vere o false, motivando la risposta:
a. è tipico delle politiche di scheduling basate su priorità statica, infatti prima
che possa essere eseguito P, potrebbero continuare a pervenire altri
processi con priorità maggiore
Più che "tipico" è "può capitare". comunque sì, un processo P può starvare per questo motivo
b. è escluso dalle politiche di scheduling basate su priorità statica, infatti
prima che possa essere eseguito P, il sistema non accetta altri processi
con priorità maggiore
In generale ciò è falso, poichè i processi vengono accodati / ordinati proprio in base alla loro priorità (come fa a non "accettare processi" ?)
c. è tipico della politica di scheduling FCFS (First-Come-First-Served)
falso, perchè questo è fair. Prima o poi la lista si svuoterà e il processo arriverà ad essere eseguito. TRANNE il caso in cui un processo non rilascia mai la CPU (esempio loop infinito, SENZA preempitive).
L'ipotesi di (c) è che quindi ogni processo termini in un tempo finito, nel qual caso la risposta è falsa.
d. è escluso dalla politica di scheduling FCFS
Non è escluso affatto da un qualsiasi algoritmo a priorità. Essenzialmente è la "preemptive" (prerilascio RR eccetera) a impedire la starvation (tralasciando la possibilità della terminazione dei processi brutale, che esiste in teoria, ma praticamente mai nella pratica), a meno che non sia abbia una stima esatta (impossibile) della durata del CPU burst (SJF), oppure un qualche meccanismo time slice (SO realtime ad esempio)
e. nessuna delle affermazioni precedenti é corretta.
Dipende dalla versione accademica o reale
7. Considerando un S.O. che supporta i thread. Indicare se le seguenti affermazioni
sono vere o false, motivando la risposta:
a. ogni processo è composto da uno o più thread
In generale è vero
b. i thread appartenenti ad un stesso processo devono dichiarare
esplicitamente quali strutture dati intendono condividere
in generale no
c. esiste un solo stack condiviso da tutti i thread di uno stesso processo
in generale no
d. è più costoso il cambio di contesto fra thread di processi diversi del
cambio di contesto fra thread dello stesso processo
in generale sì (ma qui si apre il mondo, ad esempio per sistemi multi CPU)
8. Fornire degli esempi di applicazione in cui l’approccio multithreading offre una
migliore efficienza sul’approccio di un singolo thread e vice-versa.
la questione è davvero complessa, perchè entrano in gioco 1000 altri fattori (dalla cache, al context switch, alla paginazione, a qualsiasi cosa).
In generale multithread è più efficiente quando si può adottare un metodo divide et impera, cioè l'algoritmo è facilmente parallelizzabile, cioè può operare lo stesso codice (programma) su porzioni diverse dell'input, senza che vi siano collegamenti tra di essi (cicli).
Esempio banale: trovare il massimo di un vettore di interi.
Puoi suddividere in due thread (per semplicità) ognuno dei quali opera su mezzo vettore in parallelo.
Una volta trovato il massimo dei due mezzi-vettori, in o(1) li confronterai (i due massimi) ottenendo il massimo di tutto il vettore in o(n/2)+o(1).
Ovviamente puoi estenere a un qualsiasi numero di processi <n (algoritmo degli spaghetti battuti)
---
Quando invece è meno efficiente? In generale quando i risultati dipendono dai calcoli precedenti, e quindi non puoi facilmente parallelizzare il calcolo.
Esempio banale: calcolo del fattoriale.
In questo caso i vari thread non possono facilmente procedere parallelamente, in quanto la loro computazione dipende dai thread precedenti, devono quindi "aspettare" man mano che vengano elaborati per poi procedere.
Davvero sto andando a un appuntamento e magari ho scritto boi..te... dovrò fare una verifichina.