Richiesta Aiuto domande su Sistemi Operativi

di il
3 risposte

Richiesta Aiuto domande su Sistemi Operativi

Buongiorno .

Chiedo a qualcuno esperto di Sistemi Operativi di aiutarmi a rispondere a qualche domanda .

3. Può un singolo processore non avere processi nella coda dei processi pronti?
Che cosa può accadere in tale situazione?


4. Considerando la gerarchia dei processi nel SO Unix, se un processo padre
muore, che cosa dovrebbe accadere ai processi figli e vice versa? (cioè che cosa
accade ad un processo padre quando un suo processo figlio muore)?


Ringrazio chi può aiutarmi anche semplicemente indicarmi un link dove posso trovare queste informazioni.

3 Risposte

  • Re: Richiesta Aiuto domande su Sistemi Operativi

    FabioJ ha scritto:


    Buongiorno .

    Chiedo a qualcuno esperto di Sistemi Operativi di aiutarmi a rispondere a qualche domanda .

    3. Può un singolo processore non avere processi nella coda dei processi pronti?
    Che cosa può accadere in tale situazione?
    Certo. Tipicamente c'è il processo fittizio idle
    4. Considerando la gerarchia dei processi nel SO Unix, se un processo padre
    muore, che cosa dovrebbe accadere ai processi figli e vice versa? (cioè che cosa
    accade ad un processo padre quando un suo processo figlio muore)?
    Al padre un bel niente succede.
  • Re: Richiesta Aiuto domande su Sistemi Operativi

    Grazie per aver risposto .

    Approfitto subito per fare un'altra domanda .

    Forse chiedo troppo pero' sono solo esercizi per capire l'argomento .



    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

    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

    c. è tipico della politica di scheduling FCFS (First-Come-First-Served)

    d. è escluso dalla politica di scheduling FCFS
    e. nessuna delle affermazioni precedenti é corretta.

    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

    b. i thread appartenenti ad un stesso processo devono dichiarare
    esplicitamente quali strutture dati intendono condividere

    c. esiste un solo stack condiviso da tutti i thread di uno stesso processo

    d. è più costoso il cambio di contesto fra thread di processi diversi del
    cambio di contesto fra thread dello stesso processo

    8. Fornire degli esempi di applicazione in cui l’approccio multithreading offre una
    migliore efficienza sul’approccio di un singolo thread e vice-versa.

    ringrazio gli angeli del web
  • Re: Richiesta Aiuto domande su Sistemi Operativi

    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.
Devi accedere o registrarti per scrivere nel forum
3 risposte