Anteprima
Vedrai una selezione di 4 pagine su 12
Appunti di Sistemi operativi Pag. 1 Appunti di Sistemi operativi Pag. 2
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Appunti di Sistemi operativi Pag. 6
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Appunti di Sistemi operativi Pag. 11
1 su 12
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

SCHED coda di eventi fifo e il multitasking collaborativo.

• SCHED RR: usato per i processi che sono realtime. Implementa il multi-tasking non collaborativo con il round robin

• OTHER: usato per i processi normali.

SCHED 3.3 Race Condition

In un sistema multitasching, in particolare in un sistema multithreading, è molto comune che più thread abbiano la necessità di accedere alla stessa risorsa (ad esempio una variabile condivisa). In questi casi però bisogna stare attenti alla race condition, ovvero a situazioni nelle quali più thread accedono alla stessa risorsa in maniera concorrente. Se non vengono adeguatamente disciplinati gli accessi, si possono avere comportamenti anomali o fuorvianti. Codice che sia immune ai problemi delle race condition si dice che è thread-safe. Per scrivere codice thread-safe, è necessario usare un costrutto di sincronizzazione. Alcuni dei più comuni sono:

• lock

• spinlock

• semafori

• monitor

• test & set

3.3.1

Quando un thread ha bisogno di accedere ad una risorsa che è disciplinata da un lock, controlla che quella risorsa sia libera. Se è libera, il thread ne assume il controllo e blocca il lock. Se la risorsa non è libera (un altro thread ha assunto il lock) entra in stato di wait, finché la risorsa non viene liberata e il thread risvegliato. Se più thread sono in stato di wait non è garantito l'ordine con cui vengono risvegliati.

In alcuni casi abbiamo un thread che produce elementi e un thread che consuma elementi. In questo caso è molto utile avere una blocking queue per gestire le race condition. La blocking queue è una coda di elementi che mette in comunicazione i due thread. Il thread che produce gli elementi li aggiunge alla coda e il thread che li consuma li prende dalla coda. Si chiama coda bloccante perché in caso la coda sia piena, il thread che deve aggiungere elementi si ferma finché la coda non si libera, mentre se la coda è vuota, il

  1. Il thread A possiede la risorsa X e richiede la risorsa Y
  2. Il thread B possiede la risorsa Y e richiede la risorsa X
  3. Entrambi i thread sono in stato di wait, in attesa che l'altra risorsa venga rilasciata
  4. Non ci sono altri thread che possono rilasciare le risorse richieste dai due thread bloccati
Questo crea una situazione di stallo, in cui i due thread rimangono bloccati indefinitamente, senza poter procedere. Per evitare il deadlock, è necessario adottare delle strategie di gestione delle risorse e dei lock, come ad esempio l'acquisizione dei lock in un ordine predefinito o l'utilizzo di timeout per il rilascio delle risorse.Utilizzare il tag

per formattare il testo in paragrafi:

Le risorse sono protette da meccanismi di mutua esclusione2. Un thread può acquisire il controllo di alcune risorse senza avere il controllo su tutte le risorse che gli servono per poter finire l’esecuzione3. Ad un thread non può essere sottratto il controllo di una risorsa, una volta che lo ha acquisito4. Si verifica un ciclo nel grafo di allocazione delle risorse (cioè un grafo che ha come nodi le risorse e i thread e i cui archi uscenti dalle risorse ed entranti nei thread indicano che la risorsa è allocata a quel thread, mentre viceversa i cui archi uscenti dai thread ed entranti nelle risorse indicano che il thread necessita di quella risorsa, senza averne ancora il controllo)

Per risolvere il deadlock si applicano quattro srategie principali:

  • deadlock prevention
  • deadlock avoidance
  • deadlock detection
  • deadlock recovery

Della prima strategia noi abbiamo visto solo due tecniche:

  • Far acquisire le risorse a un thread tutte contemporaneamente
  • ...

Imporre un ordinamento delle risorse e acquisirle in modo strettamente ordinato

3.5 Problema di scrittori e lettori

Il problema degli scrittori e dei lettori è un problema tipico della programmazione multithreading, in cui alcuni thread vogliono scrivere su una risorsa condivisa mentre altri thread vogliono leggere su quella risorsa. Il concetto è che mentre uno scrittore può scrivere se e solo se non ci sono altri lettori o scrittori che occupano la risorsa, i lettori possono leggere anche più di uno alla volta. Bisogna stare attenti a problemi come la starvation.

3.6 Barrier

Per sincronizzare l'esecuzione dei thread si può usare il costrutto barrier, che blocca l'esecuzione di un thread finché tutti gli altri non hanno finito la loro esecuzione.

64 Command line

La command line interface è uno strumento molto potente e utile nella gestione del sistema operativo e nell'esecuzione di molti rapidi compiti. La shell è l'ambiente dentro il quale questi comandi

Vengono eseguiti. La shell è a sua volta eseguita da un emulatore di terminale. La shell di default in linux è bash.

Alcune particolarità di bash sono:

  • poter usare apici e doppi apici per le stringhe, tenendo conto che con i doppi apici si espandono le variabili
  • le variabili d'ambiente sono variabili speciali che indicano diverse cose del sistema operativo; in particolare la variabile PATH contiene una serie di path a cartelle che contengono i file eseguibili quando si esegue un comando.
  • per ogni programma in linux esistono 4 canali standard di input/output:
    • argv: (input) argomenti passati da linea di comando
    • stdin: (input) standard input (0)
    • stdout: (output) standard output (1)
    • stderr: (output) standard error (2)
  • si può redirezionare l'input e l'output con > e < (e le varie varianti per stderr e per appendere anziché sostituire
  • si possono concatenare più comandi passando lo stdout del primo

comestdin del secondo semplicemente con —.– se aggiungiamo anche xargs allora anziché allo stdin passiamo comeargv lo stdout del primo comando• in linux ogni risorsa (ad es. file e cartelle) ha un proprietario (owner) eun gruppo.• i permessi sono divisi in lettura/scrittura/esecuzione e si possono dare inmaniera indipendente a proprietario, gruppo e altri.

5 Perlperl da 0:- linguaggio di scripting interpretato - non tipizzato - 3 tipi di dato espliciti:+ scalare (inizia per dollaro ($)) + array (inizia per chiocciola (@)) + arrayassociativo (inizia per percentuale (%)) - tutte le istruzioni finiscono per ; - i filefiniscono per pl - attraverso l’argomento di linea di comando -e si può eseguireperl direttamente da terminale - attraverso l’argomento di linea di comando-n si può eseguire perl per ogni riga presente in stdin - i commenti iniziano7per cancelletto (#), anche se non sempre questo viene interpretato come iniziocommento - stringhe: + tra

apici (”) vengono stampate senza interpretare il contenuto delle variabili all’interno

tra doppi apici (””) vengono stampate interpretando il contenuto delle variabili all’interno

si possono concatenare con il punto (.)

- array:

  • non hanno una dimensione prestabilita
  • si possono inizializzare:
    • da una lista di elementi separati da virgola (,) e racchiusi tra parentesi tonde (())
    • da un range di elementi, indicando il primo e l’ultimo separati da due punti (..)
    • da una serie di elementi uguali con l’operatore di ripetizione (x)
  • per accedere ad un elemento dell’array si indica l’indice tra parentesi quadre ([]):
    • l’indice può anche essere negativo
    • attenzione! quando si accede ad un elemento, se quell’elemento non è esso stesso un array, si deve precedere il nome dell’array con dollaro ($); infatti la variabile che otteniamo è uno scalare
    • posso anche accedere ad un sottoarray specificando un array di indici

o un range di indici + stampando un array si stampano tutti gli ele-menti separati da spazio + si può usare la funzione join per unire gli elementidi un array in una stringa, separati da un separatore da noi indicato + si puòusare split per dividere la stringa in un carattere separatore, ottenendo un ar-ray + concatenando un vettore ad una stringa otteniamo la sua dimensione +con dollaro-cancelletto ($#) prendo l’ultimo elemento dell’array specificato +con la keyword scalar ottengo la size dell’array + posso aggiungere in testa e incoda all’array con unshift e push rispettivamente + posso rimuovere in testa e incoda all’array con shift e pop rispettivamente - la variabile chiocciola-underscore) contiene gli argv: + per prendere un argv specifico uso dollaro ($) seguito(@ $dall’indice dell’argomento - la variabile è particolare in perl: + si usa in unforeach per prendere l’elemento attuale della struttura su cui sto ciclando +

se$omettiamo il valore di un parametro in una funzione, viene usato automatica-mente - esistono i vari costrutti di controllo come negli altri linguaggi - esistonoanche gli operatori aritmetici e gli operatori logici (con e senza cortocircuito) -espressioni regolari: + sono racchiuse tra slash (//) + sono usate sia per vederese una stringa matcha con un pattern, sia per recuperare gruppi di caratteriin una stringa + con l’operatore uguale-tilde (= ) si confronta una stringa conun’espressione regolare. Restituisce true se la stringa matcha, false altrimenti+ nelle espressioni regolari: . punto (.) indica qualsiasi carattere . backslash ((ˆ)) è il carattere di escape . cappuccio indica l’inizio della stringa . dollaro ($)indica la fine della stringa . star (*) indica che il carattere o il gruppo prece-dente può essere ripetuto 0 o più volte . più (+) indica che il carattere o ilgruppo precedente può essere ripetuto 1 o più volte . ? indica che il

indica un qualsiasi carattere non numerico.
Dettagli
Publisher
A.A. 2022-2023
12 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher DavideT55 di informazioni apprese con la frequenza delle lezioni di Sistemi operativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università della Calabria o del prof Ianni Giovambattista.