IndicePresentazione dell'edizione italiana xxiPrefazione xxiiiParte I - Panoramica 1Capitolo 1 - Introduzione 31.1 Che cosa fanno i sistemi operativi? 3 1.1.1 Il punto di vista dell'utente 4 1.1.2 Il punto di vista del computer 5 1.1.3 Definizione di sistema operativo 6 1.1.4 Scopi di un sistema operativo 61.2 Sistemi mainframe 7 1.2.1 Sistemi a lotti 7 1.2.2 Sistemi multiprogrammati 8 1.2.3 Sistemi time-sharing 101.3 Sistemi desktop 111.4 Sistemi multiprocessore 121.5 Sistemi distribuiti 14 1.5.1 Reti di computer 14 1.5.2 Sistemi client-server 15 1.5.3 Sistemi punto-a-punto 16 1.5.4 Sistemi operativi distribuiti 161.6 Sistemi cluster 171.7 Sistemi in tempo reale 181.8 Sistemi palmari 191.9 Migrazione delle caratteristiche 201.10 Ambienti di elaborazione 21 1.10.1 Elaborazione tradizionale 21 1.10.2 Elaborazione basata sul Web 22 1.10.3 Elaborazione embedded 22 1.10.4 Elaborazione multimediale 231.11 Riassunto 23 Esercizi 24 Note bibliografiche 25Capitolo 2 - Architettura del computer 272.1 Funzionamento del computer 272.2 Struttura dell'input/output 29 2.2.1 Interruzioni di input/output 30 2.2.2 Trasferimenti in DMA 322.3 Struttura della memoria 33 2.3.1 Memoria centrale 34 2.3.2 Dischi magnetici 35 2.3.3 Nastri magnetici 372.4 Gerarchia di memorizzazione 37 2.4.1 Caching 39 2.4.2 Coerenza/consistenza 402.5 Protezione hardware 41 2.5.1 Funzionamento in modalità differenziate 41 2.5.2 Protezione dell' I/O 43 2.5.3 Protezione della memoria 44 2.5.4 Protezione della CPU 452.6 Struttura di rete 47 2.6.1 Reti locali 47 2.6.2 Reti geografiche 482.7 Riassunto 50 Esercizi 51 Note bibliografiche 52Capitolo 3 - Struttura dei sistemi operativi 533.1 Componenti del sistema operativo 53 3.1.1 La gestione dei processi 54 3.1.2 La gestione della memoria centrale 55 3.1.3 La gestione dei file 55 3.1.4 La gestione dell'input/output 56 3.1.5 La gestione delle unità di memorizzazione secondarie 56 3.1.6 Le reti informatiche 57 3.1.7 Il sistema di protezione 58 3.1.8 L'interprete dei comandi 583.2 Servizi del sistema operativo 593.3 Chiamate di sistema 60 3.3.1 Il controllo del processo 63 3.3.2 La gestione dei file 66 3.3.3 La gestione dei dispositivi 67 3.3.4 La gestione delle informazioni di sistema 67 3.3.5 Le comunicazioni 673.4 Programmi di sistema 683.5 Struttura del sistema 71 3.5.1 Una struttura semplice 71 3.5.2 La struttura stratificata 73 3.5.3 I microkernel 74 3.5.4 La struttura modulare 763.6 Macchine virtuali 77 3.6.1 Implementazione 78 3.6.2 Vantaggi 79 3.6.3 Esempi 803.7 Java 80 3.7.1 Il linguaggio di programmazione 81 3.7.2 L'interfaccia per i programmi applicativi 81 3.7.3 Java Virtual Machine 81 3.7.4 L'ambiente di sviluppo per Java 83 3.7.5 Sistemi operativi in linguaggio Java 833.8 Progettazione e implementazione di un sistema operativo 84 3.8.1 Obiettivi del progetto 84 3.8.2 Meccanismi e politiche 85 3.8.3 Implementazione 863.9 Generazione del sistema operativo 873.10 Avvio del sistema operativo 883.11 Riassunto 89 Esercizi 90 Note bibliografiche 91Parte II - Gestione dei processi 93Capitolo 4 - I processi 954.1 Il concetto di processo 95 4.1.1 I processi 96 4.1.2 Lo stato dei processi 96 4.1.3 Il blocco di controllo del processo 97 4.1.4 I thread 994.2 Schedulazione dei processi 99 4.2.1 Le code di schedulazione 99 4.2.2 Gli schedulatori 101 4.2.3 Il cambio di contesto 1024.3 Operazioni sui processi 103 4.3.1 Creazione dei processi 103 4.3.2 Terminazione dei processi 1064.4 Processi cooperanti 1074.5 Comunicazione tra processi 109 4.5.1 Lo scambio di messaggi 110 4.5.2 La denominazione dei processi 110 4.5.3 La sincronizzazione 112 4.5.4 La bufferizzazione 113 4.5.5 Esempio di produttore-consumatore 113 4.5.6 Un esempio: Mach 115 4.5.7 Un esempio: Windows XP 1164.6 La comunicazione in sistemi client-server 117 4.6.1 I socket 117 4.6.2 La chiamata di procedura remota 120 4.6.3 La chiamata di metodo remoto 1234.7 Riassunto 128 Esercizi 129 Note bibliografiche 130Capitolo 5 - I thread 1315.1 Generalità 131 5.1.1 Motivazioni 131 5.1.2 Benefici 133 5.1.3 Thread nello spazio utente e nello spazio kernel 133 5.1.4 Le librerie di thread 1335.2 Modelli multithread 134 5.2.1 Il modello molti-a-uno 134 5.2.2 Il modello uno-a-uno 135 5.2.3 Il modello molti-a-molti 1355.3 Problematiche relative ai thread 136 5.3.1 Le chiamate di sistema fork() ed exec() 136 5.3.2 Cancellazione 137 5.3.3 La gestione dei segnali 137 5.3.4 Gruppi di thread 139 5.3.5 Dati specifici dei thread 139 5.3.6 Attivazione dello schedulatore 1405.4 Pthread 1415.5 I thread di Windows XP 1435.6 I thread di Linux 1445.7 I thread di Java 144 5.7.1 Creazione di un thread 145 5.7.2 Gli stati di un thread 147 5.7.3 Ricongiunzione di thread 147 5.7.4 Cancellazione dei thread 148 5.7.5 Dati specifici del thread 149 5.7.6 La JVM e il sistema operativo ospite 149 5.7.7 Esempio di soluzione multithread 1515.8 Riassunto 151 Esercizi 153 Note bibliografiche 154Capitolo 6 - Schedulazione della CPU 1556.1 Concetti di base 155 6.1.1 Il ciclo di picco di CPU e di I/0 156 6.1.2 Lo schedulatore della CPU 157 6.1.3 Schedulazione con sospensione dell'esecuzione dei processi 157 6.1.4 Caricamento del processo sulla CPU 1596.2 Criteri di schedulazione 1596.3 Gli algoritmi di schedulazione 160 6.3.1 Schedulazione First-Come, First-Served 160 6.3.2 Schedulazione Shortest-Job-First 161 6.3.3 Schedulazione a priorità 164 6.3.4 Schedulazione Round-Robin 166 6.3.5 Schedulazione con coda a più livelli 168 6.3.6 Schedulazione con coda a più livelli con retroazione 1706.4 Schedulazione per sistemi multiprocessore 1716.5 Schedulazione per sistemi in tempo reale 1726.6 Schedulazione dei thread 175 6.6.1 Visibilità della competizione 175 6.6.2 Schedulazione di Pthread 1766.7 Esempi di sistemi operativi 177 6.7.1 Esempio: la schedulazione in Solaris 177 6.7.2 Esempio: la schedulazione in Windows XP 180 6.7.3 Esempio: la schedulazione in Linux 1826.8 Schedulazione dei thread in Java 1836.8.1 Priorità dei thread 1846.9 Valutazione degli algoritmi di schedulazione 185 6.9.1 Modellazione deterministica 185 6.9.2 Modelli a reti di code 187 6.9.3 Simulazioni 188 6.9.4 Implementazione 1896.10 Riassunto 190 Esercizi 191 Note bibliografiche 193Capitolo 7 - Sincronizzazione dei processi 1957.1 Il problema della sincronizzazione 1957.2 Il problema della sezione critica 1977.3 Soluzioni per due processi 198 7.3.1 Algoritmo 1 199 7.3.2 Algoritmo 2 200 7.3.3 Algoritmo 3 2017.4 Hardware per la sincronizzazione 2027.5 Semafori 205 7.5.1 Impiego 205 7.5.2 Implementazione 206 7.5.3 Stalli e starvation 2087.6 Problemi classici di sincronizzazione 209 7.6.1 Il problema del buffer limitato 209 7.6.2 Il problema dei lettori-scrittori 212 7.6.3 Il problema del pranzo dei filosofi 2157.7 Monitor 2177.8 La sincronizzazione in Java 221 7.8.1 Buffer limitato 221 7.8.2 Notifiche multiple 226 7.8.3 Il problema dei lettori-scrittori 228 7.8.4 Sincronizzazione del blocco 230 7.8.5 Semafori Java 231 7.8.6 Regole di sincronizzazione 231 7.8.7 I monitor in Java 232 7.8.8 Gestione della InterruptedException 2327.9 Esempi di sincronizzazione 234 7.9.1 La sincronizzazione in Solaris 234 7.9.2 La sincronizzazione in Windows XP 235 7.9.3 La sincronizzazione in Linux 236 7.9.4 La sincronizzazione in Pthread 2367.10 Transazioni atomiche 237 7.10.1 Modello del sistema 237 7.10.2 Recupero basato sui log 238 7.10.3 Punti di verifica 239 7.10.4 Transazioni atomiche concorrenti 240 7.11 Riassunto 245 Esercizi 246 Note bibliografiche 250Capitolo 8 - Lo stallo (deadlock) 2538.1 Il modello delle risorse di sistema e dei processi 2538.2 Caratterizzazione del deadlock 255 8.2.1 Condizioni per il verificarsi del deadlock 255 8.2.2 Grafo di allocazione delle risorse 2558.3 Metodi di gestione dei deadlock 2598.4 Prevenire il deadlock 263 8.4.1 Mutua esclusione 263 8.4.2 Possesso ed attesa 263 8.4.3 Nessun rilascio anticipato 264 8.4.4 Attesa circolare 2658.5 Evitare il deadlock 266 8.5.1 Lo stato sicuro 267 8.5.2 Algoritmo del grafo di allocazione delle risorse 268 8.5.3 L'algoritmo del banchiere 2698.6 Rilevazione del deadlock 272 8.6.1 Singola istanza di ogni tipo di risorsa 273 8.6.2 Istanze multiple di un tipo di risorsa 273 8.6.3 Uso dell'algoritmo di rilevazione 2758.7 Ripristino dal deadlock 276 8.7.1 Termine del processo 276 8.7.2 Rilascio anticipato delle risorse 2778.8 Riassunto 277 Esercizi 278 Note bibliografiche 282Parte III - Gestione della memoria 283Capitolo 9 - Gestione della memoria centrale 2859.1 Concetti generali 285 9.1.1 Collegamento degli indirizzi 286 9.1.2 Spazio di indirizzamento logico e spazio di indirizzamento fisico 287 9.1.3 Caricamento dinamico 289 9.1.4 Collegamento dinamico e librerie condivise 289 9.1.5 Overlay 2909.2 Swapping 2929.3 Allocazione contigua di memoria 294 9.3.1 Protezione della memoria centrale 295 9.3.2 Allocazione della memoria centrale 296 9.3.3 Frammentazione 2979.4 Paginazione 298 9.4.1 Metodo base 299 9.4.2 Supporto hardware 303 9.4.3 Protezione 306 9.4.4 Struttura della tabella delle pagine 307 9.4.5 Pagine condivise 3129.5 Segmentazione 314 9.5.1 Metodo base 314 9.5.2 Hardware 315 9.5.3 Protezione e condivisione 316 9.5.4 Frammentazione 3199.6 Segmentazione con paginazione 3209.7 Riassunto 322 Esercizi 324 Note bibliografiche 326Capitolo 10 - La memoria virtuale 32710.1 Ambiente 32710.2 Richiesta di paginazione 331 10.2.1 Concetti fondamentali 332 10.2.2 Prestazioni della richiesta di paginazione 33510.3 Copia durante la scrittura 33810.4 Sostituzione della pagina 339 10.4.1 Sostituzione di base della pagina 340 10.4.2 Sostituzione FIFO della pagina 343 10.4.3 Sostituzione ottimale della pagina 345 10.4.4 Sostituzione LRU della pagina 345 10.4.5 Sostituzione della pagina con approssimazione dell'algoritmo LRU 348 10.4.6 Sostituzione della pagina basata sul conteggio 350 10.4.7 Algoritmi per l'uso del buffer delle pagine 350 10.4.8 Le applicazioni e la sostituzione della pagina 35110.5 Allocazione dei frame 352 10.5.1 Numero minimo di frame 352 10.5.2 Algoritmi di allocazione 353 10.5.3 Confronto tra le allocazioni con sostituzioni locale e globale 35410.6 Thrashing 355 10.6.1 Cause del thrashing 355 10.6.2 Il modello working set 358 10.6.3 Frequenza delle mancanze di pagina 35910.7 File mappati in memoria 360 10.7.1 File mappati in memoria in Java 36110.8 Altre considerazioni 363 10.8.1 Prepaginazione 363 10.8.2 La dimensione della pagina 364 10.8.3 Estensione della TLB 365 10.8.4 Tabella delle pagine invertita 366 10.8.5 Struttura del programma 366 10.8.6 Blocco dei dispositivi di I/O 368 10.8.7 Elaborazione in tempo reale 36910.9 Esempi di sistemi operativi 370 10.9.1 Windows XP 370 10.9.2 Solaris 37110.10 Riassunto 372 Esercizi 373 Note bibliografiche 377Capitolo 11 - L'interfaccia del file system 37911.1 Il concetto di file 379 11.1.1 Attributi del file 380 11.1.2 Operazioni sui file 381 11.1.3 Tipi di file 385 11.1.4 Struttura del file 387 11.1.5 Struttura interna dei file 38811.2 Metodi di accesso 389 11.2.1 Accesso sequenziale 389 11.2.2 Accesso diretto 389 11.2.3 Altri metodi di accesso 39111.3 Struttura della directory 392 11.3.1 Directory a singolo livello 393 11.3.2 Directory a due livelli 394 11.3.3 Directory strutturata ad albero 396 11.3.4 Directory a grafo aciclico 398 11.3.5 Directory a grafo generale 40011.4 Montaggio del file system 40211.5 Condivisione dei file 403 11.5.1 Il caso di più utenti 404 11.5.2 File system remoti 405 11.5.3 Semantica della coerenza 408 11.5.4 Semantica UNIX 408 11.5.5 Semantica della sessione 409 11.5.6 Semantica dei file condivisi immutabili 40911.6 Protezione 409 11.6.1 Tipi di accesso 410 11.6.2 Controllo dell'accesso 410 11.6.3 Altri metodi di protezione 412 11.6.4 Un esempio: UNIX 41311.7 Riassunto 413 Esercizi 414 Note bibliografiche 416Capitolo 12 - Implementazione del file system 41712.1 Struttura del file system 41712.2 Realizzazione del file system 419 12.2.1 Panoramica sulla realizzazione del file system 419 12.2.2 Partizioni e montaggio 422 12.2.3 File system virtuali 42312.3 Realizzazione della directory 425 12.3.1 Lista 425 12.3.2 Tabella di hash 42612.4 Metodi di allocazione 426 12.4.1 Allocazione contigua 426 12.4.2 Allocazione collegata 429 12.4.3 Allocazione indicizzata 431 12.4.4 Prestazioni 43412.5 Gestione dello spazio libero 435 12.5.1 Vettore di bit 435 12.5.2 Lista collegata 436 12.5.3 Raggruppamento 437 12.5.4 Conteggio 43712.6 Efficienza e prestazioni 437 12.6.1 Efficienza 437 12.6.2 Prestazioni 43912.7 Recupero del file system 442 12.7.1 Controllo della coerenza 442 12.7.2 Backup e ripristino 44312.8 File system basato sulla registrazione delle attività 44312.9 NFS 445 12.9.1 Descrizione 445 12.9.2 Il protocollo di montaggio 447 12.9.3 Il protocollo NFS 448 12.9.4 Traduzione del nome del percorso 450 12.9.5 Operazioni remote 45012.10 Riassunto 451 Esercizi 452 Note bibliografiche 454Parte IV - Sistemi di ingresso/uscita 455Capitolo 13 - Sottosistemi di ingresso/uscita 45713.1 Panoramica 45713.2 L'hardware di I/O 458 13.2.1 Attesa attiva 461 13.2.2 L'interrupt 462 13.2.3 Accesso diretto alla memoria 46613.3 Le interfacce di I/O per le applicazioni 468 13.3.1 Dispositivi con trasferimento dei dati a caratteri e a blocchi 470 13.3.2 Le periferiche di rete 471 13.3.3 Orologi e temporizzatori 472 13.3.4 I/O bloccante e non bloccante 47313.4 Il sottosistema di I/O del kernel 474 13.4.1 Schedulazione dell' I/O 474 13.4.2 Buffering 474 13.4.3 Caching 476 13.4.4 Spooling e prenotazione dei dispositivi 476 13.4.5 Gestione degli errori 477 13.4.6 Strutture dati del kernel 47813.5 Trasformazione dell'I/O in operazioni hardware 47913.6 STREAMS 48213.7 Le prestazioni 48413.8 Riassunto 487 Esercizi 488 Note bibliografiche 489Capitolo 14 - Struttura delle memorie di massa 49114.1 Struttura dei dischi 49114.2 Schedulazione degli accessi al disco 492 14.2.1 Schedulazione FCFS 493 14.2.2 Schedulazione SSTF 494 14.2.3 Schedulazione SCAN 495 14.2.4 Schedulazione C-SCAN 495 14.2.5 Schedulazione LOOK 496 14.2.6 Selezione dell'algoritmo di schedulazione del disco 49714.3 Amministrazione del disco 498 14.3.1 Configurazione del disco 498 14.3.2 Il blocco di avvio 499 14.3.3 Blocchi difettosi 50014.4 Gestione dello spazio di swap 501 14.4.1 Uso dello spazio di swap 501 14.4.2 Locazione dello spazio di swap 502 14.4.3 Gestione dello spazio di swap: un esempio 50214.5 La struttura RAID 504 14.5.1 Miglioramento dell'affidabilità mediante la ridondanza 504 14.5.2 Il miglioramento delle prestazioni con il parallelismo 505 14.5.3 Livelli di RAID 506 14.5.4 Scelta di un livello RAID 510 14.5.5 Le estensioni 51014.6 Collegamento dei dischi 510 14.6.1 Memorizzazione con collegamento all'host 511 14.6.2 Memorizzazione con collegamento di rete 511 14.6.3 Rete della zona di memorizzazione 51214.7 Implementazione dell'archiviazione stabile 51314.8 Struttura di memorizzazione terziaria 514 14.8.1 Periferiche di archiviazione terziaria 514 14.8.2 Compiti del sistema operativo 517 14.8.3 Problematiche relative alle prestazioni 51914.9 Riassunto 524 Esercizi 525 Note bibliografiche 531Parte V - Sistemi distribuiti 533Capitolo 15 - Strutture dei sistemi distribuiti 53515.1 Concetti di base 535 15.1.1 Vantaggi dei sistemi distribuiti 536 15.1.2 Tipi di sistemi operativi distribuiti 537 15.1.3 Sintesi delle nozioni 54115.2 Topologia 54215.3 Comunicazione 543 15.3.1 Attribuzione e risoluzione dei nomi 544 15.3.2 Strategie di instradamento 546 15.3.3 Strategie di pacchetto 548 15.3.4 Strategie di connessione 548 15.3.5 Gestione dei conflitti 54915.4 Protocolli di comunicazione 55015.5 Robustezza 554 15.5.1 Individuazione dei guasti 554 15.5.2 Riconfigurazione del sistema 555 15.5.3 Recupero da un guasto 55515.6 Problemi progettuali 55515.7 Un esempio: il networking 55815.8 Riassunto 560 Esercizi 560 Note bibliografiche 562Capitolo 16 - File system distribuiti 56316.1 L'ambiente distribuito 56316.2 Attribuzione dei nomi e trasparenza 564 16.2.1 Le strutture di attribuzione dei nomi 565 16.2.2 Gli schemi di attribuzione dei nomi 567 16.2.3 Tecniche di implementazione 56716.3 Accesso remoto ai file 568 16.3.1 Schema di base per l'uso della cache 569 16.3.2 Locazione della cache 569 16.3.3 Politica di aggiornamento della cache 570 16.3.4 Coerenza 571 16.3.5 Confronto tra i servizi con cache e quelli remoti 57216.4 File server con e senza stato 57316.5 Replica dei file 57416.6 Un esempio: AFS 575 16.6.1 Panoramica 576 16.6.2 Lo spazio dei nomi condiviso 577 16.6.3 Operazioni sui file e coerenza 578 16.6.4 Implementazione 57916.7 Riassunto 580 Esercizi 581 Note bibliografiche 581Capitolo 17 - Coordinamento distribuito 58317.1 Ordinamento degli eventi 583 17.1.1 La relazione accaduto prima 583 17.1.2 Implementazione 58417.2 Mutua esclusione 586 17.2.1 Metodo centralizzato 586 17.2.2 Metodo completamente distribuito 586 17.2.3 Il metodo del passaggio di token 58817.3 Atomicità 588 17.3.1 Il protocollo di commit a due fasi 589 17.3.2 Gestione dei guasti nel protocollo 2PC 59017.4 Controllo della concorrenza 591 17.4.1 Protocolli bloccanti 592 17.4.2 Marca di tempo 59417.5 Gestione delle situazioni di stallo 596 17.5.1 Prevenzione delle situazioni di stallo 596 17.5.2 Rilevamento delle situazioni di stallo 59717.6 Algoritmi di elezione del coordinatore 603 17.6.1 Algoritmo del bullo 603 17.6.2 Algoritmo dell'anello 60517.7 Raggiungimento dell' accordo 605 17.7.1 Comunicazioni inaffidabili 606 17.7.2 Processi difettosi 60717.8 Riassunto 607 Esercizi 608 Note bibliografiche 609Parte VI - Protezione e sicurezza 611Capitolo 18 - Protezione 61318.1 Obiettivi della protezione 61318.2 Domini di protezione 614 18.2.1 Struttura del dominio di protezione 615 18.2.2 Le protezioni nel sistema operativo UNIX 616 18.2.3 Le protezioni nel sistema operativo MULTICS 61718.3 Matrice di accesso 61918.4 Implementazione della matrice di accesso 623 18.4.1 Tabella globale 623 18.4.2 Liste di controllo degli accessi 623 18.4.3 Liste di capacità dei domini 623 18.4.4 Il meccanismo lock-key 624 18.4.5 Confronto 62418.5 Revoca dei diritti di accesso 62518.6 Sistemi basati sulle capacità 627 18.6.1 Il sistema operativo Hydra 627 18.6.2 Il sistema operativo CAP System 62918.7 Protezione basata sul linguaggio 629 18.7.1 Applicazione basata sui compilatori 630 18.7.2 Protezione in Java 2 63318.8 Riassunto 635 Esercizi 636 Note bibliografiche 637Capitolo 19 - Sicurezza 63919.1 Il problema della sicurezza 63919.2 Autenticazione dell'utente 641 19.2.1 Le password 641 19.2.2 Vulnerabilità della password 641 19.2.3 Password criptate 643 19.2.4 Password monouso 643 19.2.5 Biometria 64419.3 Pericoli relativi ai programmi 645 19.3.1 Cavalli di Troia 645 19.3.2 Trap door 646 19.3.3 Stack overflow e buffer overflow 64619.4 Pericoli relativi ai sistemi 647 19.4.1 Worm 647 19.4.2 Virus 650 19.4.3 Negazione del servizio 65219.5 Garantire la sicurezza dei sistemi e delle funzioni 65319.6 Rilevamento delle intrusioni 655 19.6.1 Che cosa costituisce un'intrusione? 655 19.6.2 Monitoraggio e analisi del registro degli eventi 657 19.6.3 Tripwire 658 19.6.4 Controllo delle chiamate di sistema 65919.7 Crittografia 661 19.7.1 Autenticazione 662 19.7.2 Algoritmi di crittografia 663 19.7.3 Un esempio: SSL 664 19.7.4 Uso della crittografia 66519.8 Classificazione della sicurezza dei computer 66619.9 Un esempio: Windows NT 66819.10 Riassunto 669 Esercizi 670 Note bibliografiche 671Bibliografia 673Indice analitico 697Capitoli e appendici disponibili online:Il sistema operativo LinuxIl sistema operativo Windows XPIl sistema operativo Windows 2000Il sistema operativo FreeBSDSistemi operativi storiciLe comunicazioni in ambiente distribuito
silberschatz sistemi operativi ottava edizione pdf 15
2ff7e9595c
Comentários