vuoi
o PayPal
tutte le volte che vuoi
Il meccanismo dell'upcall manager nella gestione dei thread
Nell'ambito dell'esecuzione dei thread, un upcall manager è un meccanismo adottato dalla libreria deithread per la loro gestione. In particolare, viene spesso utilizzato nel caso di thread che compiono operazioni bloccanti per permettere di assegnare al kernel thread che sta per essere bloccato un altro user thread mediante l'intermediazione della LWP (lightweight Processor).
Quando il thread sta per compiere l'operazione bloccante, viene creata una nuova LWP che permette l'attivazione dello schedulatore. Lo schedulatore assegna quindi al thread lato kernel che sta per andare in blocco un nuovo thread lato utente, in modo da preservare il numero di kernel thread.
La LWP viene utilizzata nei modelli molti a molti e a due livelli per mantenere il numero di kernel thread necessario allo svolgimento di un certo numero di user-thread.
Caratteristiche di una IPC a rendez-vous con buffer limitato e illimitato
Una IPC a rendez-vous con buffer limitato è un meccanismo di comunicazione tra processi che prevede la sincronizzazione tra un processo mittente e un processo destinatario. In questo tipo di IPC, è presente un buffer di dimensione limitata che permette al mittente di inviare un messaggio solo se il buffer non è pieno e al destinatario di ricevere un messaggio solo se il buffer non è vuoto.
Una IPC a rendez-vous con buffer illimitato, invece, non prevede un limite di dimensione per il buffer. In questo caso, il mittente può inviare un messaggio in qualsiasi momento e il destinatario può riceverlo senza restrizioni.
caso, il processore interrompe l'esecuzione del processo corrente e passa all'esecuzione di un altro processo pronto. Durante il context switching, vengono salvati tutti i registri e lo stato del processo corrente nel PCB, mentre vengono caricati i registri e lo stato del nuovo processo da eseguire. Questo permette al sistema operativo di gestire in modo efficiente l'esecuzione di più processi contemporaneamente, garantendo una divisione equa delle risorse del sistema.di IPC sono: 1. Sockets: Questo schema di IPC utilizza i socket di rete per la comunicazione tra processi. I vantaggi di questo schema sono la semplicità di implementazione e la possibilità di comunicare tra processi su macchine diverse. Tuttavia, i socket richiedono una connessione di rete e possono essere più lenti rispetto ad altri schemi di IPC. 2. Pipe: Le pipe sono un meccanismo di IPC che consente la comunicazione tra processi all'interno dello stesso sistema operativo. Esistono due tipi di pipe: pipe senza nome e pipe con nome. Le pipe senza nome sono adatte per la comunicazione tra processi padre e figlio, mentre le pipe con nome consentono la comunicazione tra processi indipendenti. Le pipe sono efficienti e veloci, ma possono essere utilizzate solo tra processi che condividono lo stesso sistema operativo. 3. Message Queue: Le code di messaggi sono un meccanismo di IPC che consente ai processi di inviare e ricevere messaggi in modo asincrono. I messaggi vengono inseriti in una coda e possono essere letti da uno o più processi. Le code di messaggi sono affidabili e consentono una comunicazione flessibile tra processi, ma possono essere complesse da implementare. 4. Shared Memory: La memoria condivisa è un meccanismo di IPC che consente ai processi di condividere una regione di memoria. I processi possono leggere e scrivere nella memoria condivisa per comunicare tra loro. La memoria condivisa è molto veloce ed efficiente, ma richiede una sincronizzazione accurata per evitare problemi di accesso concorrente. 5. Remote Procedure Call (RPC): La RPC è un meccanismo di IPC che consente a un processo di richiamare una procedura su un altro processo remoto. La RPC astrae la comunicazione tra processi e semplifica lo sviluppo di applicazioni distribuite. Tuttavia, la RPC può essere più complessa da implementare rispetto ad altri schemi di IPC. Ogni schema di IPC ha vantaggi e svantaggi specifici e la scelta del migliore dipende dalle esigenze dell'applicazione.IPC (Inter-Process Communication) sono meccanismi utilizzati per consentire la comunicazione tra processi. Ci sono due tipi principali di IPC: messaggi e mailbox. I messaggi sono comunicazioni dirette tra processi che utilizzano i metodi send e receive per scambiare messaggi. Lo scambio può essere simmetrico, quando il mittente specifica nel metodo sia il messaggio che il destinatario, oppure asimmetrico, quando il mittente specifica solo il messaggio e il destinatario invoca il metodo receive per ricevere il messaggio. Nella comunicazione asimmetrica, il destinatario non specifica un mittente specifico, ma può ricevere messaggi da un processo generico non meglio specificato. Con le mailbox, invece, la comunicazione è indiretta. Un processo può creare una mailbox e altri processi possono iscriversi a tale mailbox per iniziare lo scambio di messaggi. Il messaggio viene inserito nella mailbox e recapitato ai processi che condividono la stessa mailbox (al massimo due). Una mailbox può essere implementata completamente dal processo stesso o appartenere al sistema operativo, che la utilizza per varie comunicazioni. La funzione delle IPC è quella di consentire la comunicazione e lo scambio di informazioni tra processi, facilitando la cooperazione e la sincronizzazione tra di essi.Il Dispatcher si occupa di effettuare il cambio di contesto (context switching) per i processi, effettuando il salvataggio dello stato corrente del processo all'interno del PCB nel caso di rimozione del processo dalla CPU e caricando il PCB quando il processo ricomincia l'esecuzione.
Il Dispatcher è associato allo schedulatore a breve termine.
Hold e wait sono due code contenenti processi che dovranno essere successivamente eseguiti.
La coda di hold contiene tutti quei processi filtrati dal macroschedulatore, che necessitano di risorse per essere eseguiti. La coda di wait invece è una coda che riceve processi
provenienti dallo stato di running e che vengono messi in attesa poiché essi necessitano di qualche risorsa aggiuntiva oppure dell’arrivo di un messaggio o di un interrupt. Quando il motivo del wait si esaurisce i processi vengono trasferiti nella coda di ready.
Spiegare il funzionamento della chiamata di sistema fork()
e indicare in quali casi può riscontrarsi la presenza di un processo zombie o orfano.
La chiamata di sistema fork()
invocata da un processo serve per duplicare se stesso. Solitamente dopo una fork viene eseguita la chiamata exec()
che rimpiazza la copia del nuovo processo con un altro programma, si genera così un processo figlio del processo che ha chiamato la fork()
.
Un processo zombie può presentarsi quando il figlio termina la sua esecuzione prima che il padre abbia chiamato la syscall wait()
che serve per mettere in pausa il padre e attendere la terminazione del figlio.
Un processo orfano può generarsi quando il padre termina prima.
della conclusione del figlio. Se il sistema ammette processi orfani, allora il figlio continuerà la sua esecuzione ma verrà adottato dal primo processo padre init. Si chiarisca il ruolo dello schedulatore a medio termine indicandone le funzionalità. Lo schedulatore a medio termine si occupa di verificare se il sistema, e in particolare la memoria centrale, è troppo sovraccarica di processi. Se questo accade, il middle-term-scheduler provvede ad effettuare delle operazioni di swap dei processi dalla memoria centrale a quella di massa. CAPITOLO 5 Citare almeno tre aspetti che rendono vantaggioso l'utilizzo del multithreading in luogo del multiprocessing. I vantaggi del multithreading sono: - Possibilità di eseguire i task di un processo contemporaneamente su diversi processori - Facilità nella creazione dei thread rispetto a processi figli e maggiore velocità nel cambio di contesto tra thread poiché condividono le stesse risorse del processoMaggiore reattività nel caso di applicazioni interattive
Si spieghi brevemente qual è la caratteristica fondamentale del symmetric multiprocessing.
Nei sistemi a multiprocessore simmetrico, i processori condividono tutti la stessa memoria ed ognuno di essi esegue una copia del s.o. . Possono essere eseguiti molti processi contemporaneamente.
Descrivere sinteticamente i tre modelli di multithreading. Per ciascuno di essi chiarire pregi e difetti indicando quale ha maggiore impatto sulle prestazioni della macchina.
Modello molti a uno: i thread a livello utente sono mappati da un solo thread a livello kernel quindi il multithreading non è supportato. I thread vengono schedulati e viene scelto un thread tra quelli presenti. Se un thread si blocca l'intero processo si blocca e non è possibile svolgere l'esecuzione di più thread su diversi processori.
Modello uno a uno: Ogni user thread è associato ad un thread lato kernel. Se un thread si ferma
tutti glialtri possono proseguire. Non c'è schedulazione. E' posto un limite al numero di thread eseguibili poiché troppi kernel thread renderebbero il programma troppo pesante
Modello molti a molti: Un pool di thread lato utente è associato ad un pool di thread lato kernel sempre inferiore in numero. Non presenta problematiche
CAPITOLO 6
Si descriva brevemente il fenomeno della starvation nell'ambito della organizzazione della coda di ready nel ciclo di esecuzione dei processi e si dica - motivando la risposta - quale algoritmo di microschedulazione può produrre un effetto di tal genere.
Il fenomeno della starvation legato alla schedulazione dei processi, indica la possibile presenza di una attesa illimitata da parte di un processo che non verrà mai eseguito dal sistema. L'algoritmo a priorità può determinarlo poiché se un nella coda di ready vengono aggiunti dei processi sempre a priorità alta, un
processo a priorità bassa potrebbe essere sempre superato e non accedere mai alla CPU. Una soluzione è quella di aumentare la priorità di un processo in base all’invecchiamento (tempo di attesa del processo nella coda di ready). Si spieghino le differenze nel modo e nel grado con cui i seguenti algoritmi di scheduling favoriscono i processi CPU-bound:- FCFS: Nel First Come First Served i processi vengono serviti in ordine di arrivo e la CPU è assegnata a questi fin tanto che non terminano completamente l’esecuzione. I processi CPU Bound non sono favoriti rispetto agli I/O Bound, però essi terminano ogni qual volta vengono eseguiti.
- RR: L’algoritmo Round Robin è un FCFS che implementa quanti di tempo per l’esecuzione. I processi CPU Bound, che generalmente impiegano tempi maggiori per essere completati, dovranno eseguire diversi quanti di tempo per terminare.
- Multilevel feedback queues: Nelle code multilivello con feedback, i processi vengono assegnati a diverse code in base alla loro priorità. I processi CPU Bound possono essere favoriti rispetto agli I/O Bound se vengono spostati in code con priorità più alte in base all’invecchiamento.
Feedback: i processi CPU Bound subiscono generalmente una graduale degradazione della priorità verso le code più basse con priorità minore in quanto sono generalmente favoriti i processi di tipo I/O Bound.
Si specifichi il significato dei seguenti parametri chiarendo in che termini essi consentono di verificare la bontà di un algoritmo di CPU scheduling:
- Load average: Indica il carico medio sulla CPU in un dato momento
- Throughput: Indica il numero di processi che vengono completati in un intervallo di tempo definito
- Turnaround time: Tempo trascorso da quando un processo viene inizializzato a quando termina
- Tempo di attesa: Tempo di attesa di un processo nella coda di ready
- Tempo di risposta: Tempo che intercorre dalla prima richiesta alla risposta (tempo che intercorre tra la prima richiesta e l'inizio del funzionamento del processo)
Si descrivano le caratteristiche dell'algoritmo di schedulazione della CPU denominato SJF
Shortest Jobtime First (SJF) è un algoritmo di scheduling dei processi utilizzato nei sistemi operativi. Esso si basa sul principio di assegnare la CPU al processo con il tempo di esecuzione più breve.
Le principali differenze che SJF presenta rispetto ad altri algoritmi di scheduling sono:
- Previsione del tempo di esecuzione: SJF richiede una stima accurata del tempo di esecuzione di ciascun processo. Questo può essere problematico in situazioni in cui il tempo di esecuzione è variabile o difficile da prevedere.
- Tempo di attesa: SJF tende a ridurre il tempo di attesa complessivo dei processi, poiché assegna la CPU ai processi più brevi prima di quelli più lunghi. Ciò può portare a una maggiore efficienza complessiva del sistema.
- Possibilità di starvation: SJF può causare il fenomeno della starvation, in cui i processi più lunghi vengono continuamente posticipati a causa della presenza di processi più brevi. Questo può essere evitato utilizzando tecniche come il time slicing o l'utilizzo di una coda di priorità.
- Complessità dell'algoritmo: SJF richiede un'analisi accurata dei tempi di esecuzione dei processi e può richiedere un'implementazione più complessa rispetto ad altri algoritmi di scheduling.
In generale, SJF può essere vantaggioso in situazioni in cui i tempi di esecuzione dei processi sono noti o facilmente prevedibili. Tuttavia, può presentare sfide quando i tempi di esecuzione sono variabili o quando è necessario evitare il fenomeno della starvation.