sistemi/s02/20260304.md
... ...
@@ -0,0 +1,433 @@
1
+# Namespace
2
+
3
+I namespace isolano le risorse in modo che i processi posano vedere la propria versione del sistema.
4
+Ogni namespace isola un tipo di risorse. Es:
5
+
6
+- PID namespace → separate process trees
7
+- NET namespace → separate network interfaces and routing
8
+- MNT namespace → separate filesystem mount points
9
+- UTS namespace → separate hostname
10
+- IPC namespace → separate shared memory/message queues
11
+- USER namespace → separate user IDs
12
+
13
+differenza con os virtualizzato:
14
+
15
+- si puo fare boot (macchine virtuali)
16
+- tutte queste pseudo macchine viirtuali (namespace) condividono il kernel con l'os
17
+
18
+System call specifiche:
19
+
20
+- Clone: crea un nuovo processo, con opportune flag vengono
21
+ creati nuovi namespace e il processo creato farà parte di questi namespace (e.g. CLONE_NEWNET, CLONE_NEWPID…)
22
+- Setns: connette il processo chiamante a namespace esistenti
23
+- Unshare: muove il processo chiamante in un nuovo namespace
24
+
25
+(I namespace servono per creare container):
26
+Un container e':
27
+
28
+- Un gruppo di processi che tramite namespace “vede”:
29
+- Una immagine di file system privata
30
+- Una propria configurazione di rete
31
+- Limiti di accesso alle risorse (cgroup)
32
+- Gestito da meccanismi di amministrazione a run-time (docker, runc, containerd)
33
+
34
+## Progettazione so
35
+
36
+Definizione del problema
37
+
38
+- definire gli obiettivi del sistema che si vuole realizzare
39
+- definire i "costraint" entro cui si opera
40
+- La progettazione sarà influenzata:
41
+- al livello più basso, dal sistema hardware con cui si va ad operare
42
+- al livello più alto, dalle applicazioni che devono essere eseguite dal sistema operativo
43
+- A seconda di queste condizioni, il sistema sarà...
44
+- batch, time-shared, single-user, multi-user, distribuito, general-purpose, real-time, etc...
45
+
46
+## Scheduler, processi e thread
47
+
48
+Un sistema operativo è un gestore di risorse (processore, memoria principale e secondaria, dispositivi)
49
+
50
+Per svolgere i suoi compiti, un sistema operativo ha bisogno di strutture dati per mantenere informazioni sulle risorse gestite
51
+Queste strutture dati comprendono:
52
+
53
+- tabelle di memoria
54
+- tabelle di I/O
55
+- tabelle del file system
56
+- tabelle dei processi
57
+
58
+![20260304_2026-03-04_11-44-50](assets/imgs/20260304_2026-03-04_11-44-50.png)
59
+
60
+### Processi
61
+
62
+Qual è la manifestazione fisica di un processo?
63
+
64
+1. il codice da eseguire (segmento codice)
65
+2. i dati su cui operare (segmenti dati)
66
+3. uno stack di lavoro per la gestione di chiamate di funzione, passaggio di parametri e variabili locali
67
+4. un insieme di attributi contenenti tutte le informazioni necessarie per la gestione del processo stesso
68
+ - incluse le informazioni necessarie per descrivere i punti 1-3
69
+
70
+Questo insieme di attributi prende il nome di descrittore del processo (process control block, PCB)
71
+
72
+#### PCB
73
+
74
+I PCB e' la tabella per la gestion dei processi:
75
+
76
+- contiene i descrittori dei processi (PCB)
77
+- ogni processo ha un PCB associato
78
+
79
+E' possibile suddividere le informazioni contenute nel descrittore in tre aree:
80
+
81
+- info di identificazione di processo
82
+- info di stato di processo]
83
+- info di controllo del processo
84
+
85
+**Informazioni di identificazione di un processo**
86
+identificatore di processo (process id, o pid)
87
+
88
+- può essere semplicemente un indice all'interno di una tabella di processi
89
+- può essere un numero progressivo; in caso, è necessario un mapping tra pid e posizione del relativo descrittore
90
+- molte altre tabelle del s.o. utilizzano il process id per identificare un elemento della tabella dei processi
91
+
92
+identificatori di altri processi logicamente collegati al processo
93
+
94
+- ad esempio, pid del processo padre
95
+
96
+id dell'utente che ha richiesto l'esecuzione del processo
97
+
98
+Informazioni di stato del processo
99
+
100
+- registri generali del processore
101
+- registri speciali, come il program counter e i registri di stato
102
+
103
+Informazioni di controllo del processo:
104
+
105
+- Informazioni di scheduling
106
+ - stato del processo (in esecuzione, pronto, in attesa)
107
+ - informazioni particolari necessarie dal particolare algoritmo di schuduling utilizzato (priorità, puntatori per la gestione delle code)
108
+ - identificatore dell'evento per cui il processo è in attesa
109
+
110
+- informazioni di gestione della memoria - Informazioni di configurazione della MMU, es. puntatori alle tabelle delle pagine, etc.
111
+- informazioni di accounting
112
+ - tempo di esecuzione del processo
113
+ - tempo trascorso dall'attivazione di un processo
114
+- informazioni relative alle risorse
115
+ - risorse controllate dal processo, come file aperti, device allocati al processo
116
+- informazioni per interprocess communication (IPC)
117
+ - stato di segnali, semafori, etc.
118
+
119
+In linux la struttura dati che contiene il PCB e' la struct task
120
+
121
+### Scheduler
122
+
123
+e' la componente piu importante del kernel. Gestisce l'avvicendamento dei processi
124
+
125
+- quando viene richiamato decide quale deve essere in exec
126
+- intervien quando viene richiesta una op di I/O e quando un op di io ternima.
127
+
128
+Nota: il termine scheduler viene usato utilizzato anche in altri ambiti (es. scheduler del disco), noi ci riferiamo allo scheduler del so
129
+
130
+Schedule: è la sequenza temporale di assegnazioni delle risorse da gestire ai richiedenti
131
+Scheduling: è l'azione di calcolare uno schedule
132
+Scheduler: è la componente software che calcola lo schedule
133
+
134
+#### Mode switching e context switching
135
+
136
+Tutte le volte che avviene un interrupt il processore e' soggetto a mode switching (mod utente -> mod supervisore)
137
+
138
+Durante la gestione dell'interrupt:
139
+
140
+- vengono intraprese le opportune azioni per gestire l'evento
141
+- viene chiamato lo scheduler
142
+- se lo scheduler decide di eseguire un altro processo, il sistema e' soggetto a context switching
143
+
144
+Operazioni durante un context switching
145
+
146
+- lo stato del processo attuale viene salvato nel PCB corrispondente
147
+- lo stato del processo selezionato per l'esecuzione viene caricato dal PCB nel processore
148
+ ![20260304_2026-03-04_12-03-42](assets/imgs/20260304_2026-03-04_12-03-42.png)
149
+
150
+so salva il pcb di p1, carica il codice del pcb p2 e lo esegue. Infine p2 lancia un interrupt e si torna a p1
151
+
152
+![20260304_2026-03-04_12-07-37](assets/imgs/20260304_2026-03-04_12-07-37.png)
153
+Dentro inizialize c'e' il main
154
+
155
+Stati dei processi:
156
+
157
+- Running: il processo è in esecuzione
158
+- Waiting: il processo è in attesa di qualche evento esterno (e.g., completamento operazione di I/O); non può essere eseguito
159
+- Ready: il processo può essere eseguito, ma attualmente il processore è impegnato in altre attività
160
+
161
+![20260304_2026-03-04_12-18-25](assets/imgs/20260304_2026-03-04_12-18-25.png)
162
+
163
+utte le volte che un processo entra nel sistema, viene posto in una delle code gestite dallo scheduler
164
+
165
+![20260304_2026-03-04_12-18-52](assets/imgs/20260304_2026-03-04_12-18-52.png)
166
+![20260304_2026-03-04_12-19-41](assets/imgs/20260304_2026-03-04_12-19-41.png)
167
+
168
+#### Gerarchia di processi
169
+
170
+Nella maggior parte dei sistemi operativi i processi sono organizzati in forma gerarchica. Quando un processo crea un nuovo processo, il processo creante viene detto padre e il creato figlio. Si viene così a creare un albero di processi
171
+
172
+Motivazioni:
173
+
174
+- semplificazione del procedimento di creazione di processi
175
+- non occorre specificare esplicitamente tutti i parametri e le caratteristiche
176
+- ciò che non viene specificato, viene ereditato dal padre
177
+
178
+![20260304_2026-03-04_12-24-16](assets/imgs/20260304_2026-03-04_12-24-16.png)
179
+
180
+#### Processi e Thread
181
+
182
+La nozione di processo discussa in precedenza assume che ogni processo abbia una singola “linea di controllo”
183
+
184
+- per ogni processo, viene eseguite una singola sequenza di istruzioni
185
+- un singolo processo non può eseguire due differenti attività contemporanemente
186
+ Esempi:
187
+- scaricamento di due differenti pagine in un web browser
188
+- inserimento di nuovo testo in un word processor mentre viene eseguito il correttore ortografico
189
+
190
+Tutti i sistemi operativi moderni
191
+
192
+- supportano l’esistenza di processi multithreaded
193
+- in un processo multithreaded esistono molte “linee di controllo”, ognuna delle quali può eseguire una diversa sequenza di istruzioni
194
+
195
+Esempi:
196
+
197
+- Associando un thread ad ogni finestra aperta in un web browser, è possibile scaricare i dati in modo indipendente
198
+
199
+Un thread è l’unità base di utilizzazione della CPU
200
+
201
+Ogni thread possiede
202
+
203
+- la propria copia dello stato del processore
204
+- il proprio program counter
205
+- uno stack separato
206
+
207
+I thread appartenenti allo stesso processo condividono:
208
+
209
+- codice
210
+- dati
211
+- risorse di I/O
212
+
213
+![20260304_2026-03-04_12-45-33](assets/imgs/20260304_2026-03-04_12-45-33.png)
214
+
215
+Benefici dei thread:
216
+
217
+- condivisione di risorse
218
+ - i thread condividono lo spazio di mem e le risorse allocate degli altri thread dello stesso processo
219
+ - condividere info tra thread logicamente correlati rende piu semplice l'implementazione di certe applicazioni
220
+
221
+Es: web browser (condivisione dei param di config tra i vari thread)
222
+
223
+- Economia:
224
+ - allocare mem e risorse pepr creare nuovi processi e' costoso
225
+ - fare context switching fra diversi processi e' costoso
226
+- gestire thread e' meno costoso (es. creare un thread in solaris richiede 1/30 del tempo richiesto per creare un processo nuovo)
227
+
228
+in ogni caso, abbiamo bisogno di processi distinti per applicazioni differenti
229
+
230
+### Multithreading: implementazione
231
+
232
+Due modi:
233
+
234
+- user thread (livello utente)
235
+- kernel thread (livello kernel)
236
+
237
+Oggi vengono usati di piu i kernel thread
238
+
239
+#### User thread
240
+
241
+Gli user thread vengono supportati sopra il kernel e vengono implementati dsa una thread library a livello utente
242
+
243
+Vantaggi:
244
+
245
+- implementazione molto efficiente
246
+
247
+Svantaggi:
248
+
249
+- se il kernel e' single threaded qualsiasi user thread che effettua una chiamata a sistema bloccante (es io) causa il blocco dell'intero processo
250
+
251
+#### Kernel thread
252
+
253
+Vengono supportati direttamente dal sistema operativo
254
+
255
+Vantaggi:
256
+
257
+- poiche e' il kernel a gestire lo scheduling dei thread, se un thread segue op di io il kernel puo' selezionare un altro thread in attesa di essere eseguito
258
+
259
+Svantaggi:
260
+
261
+- implementazione piu lenta --> richiede un passaggio da livello utente a livello supervisore
262
+
263
+### Modelli di multithreading
264
+
265
+Molti sistemi usano entrambe i tipi di thread, creando vari tipi di modelli di multithreading
266
+
267
+- Many-to-One
268
+- One-to-One
269
+- Many-to-Many
270
+
271
+#### Many-to-One Multithreading
272
+
273
+Un certo numero di user thread vengono mappati su un solo kernel thread
274
+Modello generalmente adottato da s.o. che non supportano kernel thread multipli
275
+![20260304_2026-03-04_13-01-32](assets/imgs/20260304_2026-03-04_13-01-32.png)
276
+
277
+#### One-to-One Multithreading
278
+
279
+Ogni user thread viene mappato su un kernel thread
280
+Può creare problemi di scalabilità per il kernel
281
+![20260304_2026-03-04_13-02-06](assets/imgs/20260304_2026-03-04_13-02-06.png)
282
+
283
+#### Many-to-Many Multithreading
284
+
285
+Riassume i benefici di entrambe le architetture
286
+Supportato da Solaris, IRIX, Digital Unix
287
+![20260304_2026-03-04_13-02-55](assets/imgs/20260304_2026-03-04_13-02-55.png)
288
+
289
+## Scheduling
290
+
291
+Per rapp uno schedule si usano i diagrammi di Gantt
292
+
293
+![20260304_2026-03-04_13-03-46](assets/imgs/20260304_2026-03-04_13-03-46.png)
294
+in questo esempio, la risorsa (es. CPU) viene utilizzata dal processo P1 dal tempo 0 a t1, viene quindi assegnata a P2 fino al tempo t2 e quindi a P3 fino al tempo t3
295
+
296
+Eventi che possono causare un context switch:
297
+
298
+1. quando un processo passa da stato running a stato waiting (system call bloccante, operazione di I/O)
299
+2. quando un processo passa dallo stato running allo stato ready (a causa di un interrupt)
300
+3. quando un processo passa dallo stato waiting allo stato ready
301
+4. quando un processo termina
302
+
303
+### Tipi di scheduler
304
+
305
+Uno scheduler si dice non-preemptive o cooperativo
306
+
307
+- se i context switch avvengono solo nelle cond 1 e 4
308
+- il controllo della risorsa viene trasferito solo se l'assegnatario attuale lo cede volontariamente
309
+ Uno scheduler si dice preemptive se:
310
+- i context switch possono avvenire in ogni condizione
311
+- è possibile che il controllo della risorsa venga tolto all'assegnatario attuale a causa di un evento
312
+
313
+Tutti gli scheduler moderni sono preemptive.
314
+
315
+Vantaggi dello scheduling cooperativo
316
+
317
+- non richiede alcuni meccanismi hardware come ad esempio timer programmabili
318
+ Vantaggi dello scheduling preemptive
319
+- permette di utilizzare al meglio le risorse
320
+
321
+#### Criteri di scelta di uno scheduler
322
+
323
+Utilizzo della risorsa (CPU)
324
+
325
+- percentuale di tempo in cui la CPU è occupata ad eseguire processi
326
+- deve essere massimizzato
327
+ Throughput
328
+- numero di processi completati per unità di tempo
329
+- dipende dalla lunghezza dei processi
330
+- deve essere massimizzato
331
+
332
+Tempo di turnaround
333
+
334
+- tempo che intercorre dalla sottomissione di un processo alla sua terminazione
335
+- deve essere minimizzato
336
+
337
+Tempo di attesa
338
+
339
+- il tempo trascurso da un processo nella coda ready
340
+- deve essere minimizzato
341
+- Tempo di risposta
342
+- tempo che intercorre fra la sottomissione di un processo e il tempo di prima risposta
343
+- particolarmente significativo nei programmi interattivi, deve essere minimizzato
344
+
345
+Vita di un processo:
346
+![20260304_2026-03-04_13-12-29](assets/imgs/20260304_2026-03-04_13-12-29.png)
347
+
348
+Durante l'esecuzione di un processo:
349
+
350
+- si alternano periodi di attività svoltedalla CPU (CPU burst)...
351
+- ...e periodi di attività di I/O (I/O burst)
352
+ I processi:
353
+- caratterizzati da CPU burst molto lunghi si dicono CPU bound
354
+- caratterizzati da CPU burst molto brevi si dicono I/O bound
355
+
356
+Algoritmi:
357
+
358
+- First Come, First Served
359
+- Shortest-Job First
360
+ - Shortest-Next-CPU-Burst First
361
+ - Shortest-Remaining-Time-First
362
+- Round-Robin
363
+
364
+#### First Come, First Served (FCFS)
365
+
366
+Algoritmo
367
+
368
+- il processo che arriva per primo, viene servito per primo
369
+- politica senza preemption
370
+
371
+Implementazione
372
+
373
+- semplice, tramite una coda (politica FIFO)
374
+
375
+Problemi
376
+
377
+- elevati tempi medi di attesa e di turnaround
378
+- processi CPU bound ritardano i processi I/O bound
379
+
380
+Esempio:
381
+
382
+- ordine di arrivo: P1, P2, P3
383
+- lunghezza dei CPU-burst in ms: 32, 2, 2
384
+- Tempo medio di turnaround: (32+34+36)/3 = 34 ms
385
+- Tempo medio di attesa: (0+32+34)/3 = 22 ms
386
+
387
+![20260304_2026-03-04_13-18-15](assets/imgs/20260304_2026-03-04_13-18-15.png)
388
+
389
+**Supponiamo di avere**:
390
+
391
+- un processo CPU bound
392
+- un certo numero di processi I/O bound
393
+- i processi I/O bound si "mettono in coda" dietro al processo CPU bound, e in alcuni casi la ready queue si puo svuotare
394
+- Convoy effect
395
+ ![20260304_2026-03-04_13-19-35](assets/imgs/20260304_2026-03-04_13-19-35.png)
396
+
397
+#### Shortest Job First (SJF)
398
+
399
+la CPU viene assegnata al processo ready che ha la minima durata del CPU burst successivo
400
+(politica senza preemption)
401
+
402
+Esempio
403
+
404
+- Tempo medio di turnaround: (0+2+4+36)/3 = 7 ms
405
+- Tempo medio di attesa: (0+2+4)/3 = 2 ms
406
+ ![20260304_2026-03-04_13-20-59](assets/imgs/20260304_2026-03-04_13-20-59.png)
407
+
408
+L'algoritmo SJF
409
+
410
+- è ottimale rispetto al tempo di attesa, in quanto è possibile dimostrare che produce il minor tempo di attesa possibile
411
+- ma è impossibile da implementare in pratica!
412
+- è possibile solo fornire delle approssimazioni
413
+- non possiamo conoscere la lunghezza del prossimo CPU burst.... ma conosciamo la lunghezza di quelli precedenti
414
+
415
+Calcolo approssimato della durata del CPU burst:
416
+
417
+- basata su media esponenziale dei CPU burst precedenti
418
+- sia tn il tempo dell'n-esimo CPU burst e тn la corrispondente previsione; тn+1 può essere calcolato come segue:
419
+ ![20260304_2026-03-04_13-24-44](assets/imgs/20260304_2026-03-04_13-24-44.png)
420
+
421
+Media esponenziale
422
+
423
+- svolgendo la formula di ricorrenza, si ottiene da cui il nome media esponenziale
424
+ ![20260304_2026-03-04_13-25-27](assets/imgs/20260304_2026-03-04_13-25-27.png)
425
+
426
+![20260304_2026-03-04_13-25-51](assets/imgs/20260304_2026-03-04_13-25-51.png)
427
+
428
+Shortest Job First "approssimato" esiste in due versioni:
429
+
430
+1. non preemptive
431
+ - il processo corrente esegue fino al completamento del suo CPU burst
432
+2. preemptive - il processo corrente può essere messo nella coda ready, se arriva un processo con un CPU burst più breve di quanto rimane da eseguire al processo corrente
433
+ - "Shortest-Remaining-Time First"
sistemi/s02/assets/imgs/20260304_2026-03-04_11-44-50.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_11-44-50.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_12-03-42.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_12-03-42.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_12-07-37.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_12-07-37.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_12-18-25.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_12-18-25.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_12-18-52.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_12-18-52.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_12-19-41.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_12-19-41.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_12-24-16.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_12-24-16.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_12-45-33.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_12-45-33.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_13-01-32.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_13-01-32.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_13-02-06.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_13-02-06.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_13-02-55.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_13-02-55.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_13-03-46.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_13-03-46.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_13-12-29.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_13-12-29.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_13-18-15.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_13-18-15.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_13-19-35.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_13-19-35.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_13-20-59.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_13-20-59.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_13-24-44.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_13-24-44.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_13-25-27.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_13-25-27.png differ
sistemi/s02/assets/imgs/20260304_2026-03-04_13-25-51.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/20260304_2026-03-04_13-25-51.png differ