Sistemi Operativi

Sistemi Operativi (13)

Mercoledì, 22 Maggio 2019 11:31

Esempio Fork/Join con due livelli figli

Scritto da

Vediamo un esercizio più articolato. Fino ad adesso abbiamo lavorato sempre con un solo livello di fork, ovvero un padre ed un figlio che inevitabilmente torna al ramo principale il proprio risultato parziale. Cosa accade se però un figlio dovesse sdoppiarsi nuovamente? Come possiamo risolvere questo problema?

Un esercizio riepilogativo complesso con più fork-join su diversi livelli. Il segreto per risolvere i diversi rami è sempre lo stesso. Il padre fa tranquillamente il suo percorso, mentre ognu figlio, che sia un singolo nodo o un intero ramo, deve tornare _exit() al relativo padre, qualunque sia il livello.

Lunedì, 13 Maggio 2019 11:11

Fork-join con grado di parallelismo 3

Scritto da

 Come possiamo eseguire in parallelo più di due operazioni visto il limite della chiamata fork() che è binaria padre/figlio? Ecco un esempio con la soluzione strategica per superare questa difficoltà.

Martedì, 26 Marzo 2019 21:00

Esercizio fork-join complesso

Scritto da

Dopo aver introdotto le principali chiamate per la gestione del fork-join, vediamo un esempio più complesso di processo con diversi figli che necessitano di join differenti.

Martedì, 19 Marzo 2019 23:12

Esercizi fork-join

Scritto da

Proviamo un altro esercizio con i costrutti fork-join. E' un esercizio sostanzialmente teorico: usiamo lo status di ritorno dal figlio per comunicare col processo padre, ma è una scelta che assolutamente non si adotta in programmi complessi con elaborazioni complesse. In questi ultimi casi, vedremo come utilizzare aree opportune di memoria condivisa.

Martedì, 19 Febbraio 2019 23:21

Il costrutto fork vs join

Scritto da

Tecnica mediante la quale possiamo suddividere un processo, come gia abbiamo fatto, e ricongiungerlo alla fine per usare i risultati calcolati.

Martedì, 19 Febbraio 2019 22:24

La chiamata waitpid()

Scritto da

Abbiamo gia visto in precedenza la chiamata wait(), come permetta ad un padre di attendere la terminazione dei suoi figli, in questo caso tutti che siano uno o più. Esiste anche una variante per cui si può forzare il padre ad attendere solo un determinato figlio di cui è noto il PID.

Martedì, 22 Gennaio 2019 22:36

La chiamata wait() in Python

Scritto da

Abbiamo visto, nelle esercitazioni precedenti, il comportamento non deterministico delle chiamate fork con l'esecuzione di figli, anche simulando codice con la chiamata time.sleep(). Il comportamento in questi casi è lasciato allo scheduler ma in molti casi, è consigliabile che il padre attenda l'esecuzione dei figli, magari per raccogliere i dati elaborati e usarli nel flusso principale.

Una piccola panoramica di esercizi semplici da svolgere con i grafi delle precedenze con grado di parallelismo assegnato o massimo.

Vediamo un esempio un po' più complesso con più fork messe in campo. Quanti processi vengono generati dal codice scritto? In allegato un diagramma disegnato sul sito draw.io con il formato xml modificabile/importabile o il png per visionarlo semplicemente.