972fc8dca3ee2485efd7aa255b71d5761073321b
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 | + |
|
| 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 | +  |
|
| 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 | + |
|
| 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 | + |
|
| 162 | + |
|
| 163 | +utte le volte che un processo entra nel sistema, viene posto in una delle code gestite dallo scheduler |
|
| 164 | + |
|
| 165 | + |
|
| 166 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 282 | + |
|
| 283 | +#### Many-to-Many Multithreading |
|
| 284 | + |
|
| 285 | +Riassume i benefici di entrambe le architetture |
|
| 286 | +Supportato da Solaris, IRIX, Digital Unix |
|
| 287 | + |
|
| 288 | + |
|
| 289 | +## Scheduling |
|
| 290 | + |
|
| 291 | +Per rapp uno schedule si usano i diagrammi di Gantt |
|
| 292 | + |
|
| 293 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | +  |
|
| 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 | +  |
|
| 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 | +  |
|
| 420 | + |
|
| 421 | +Media esponenziale |
|
| 422 | + |
|
| 423 | +- svolgendo la formula di ricorrenza, si ottiene da cui il nome media esponenziale |
|
| 424 | +  |
|
| 425 | + |
|
| 426 | + |
|
| 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 |