| Indice
Prefazione XI
1 Concetti introduttivi 1
1.1 Principali funzioni di un sistema operativo 1
1.1.1 Facilita` di programmazione e portabilita` dei programmi 3
1.1.2 Gestione delle risorse 4
1.1.3 Protezione, sicurezza, tolleranza ai guasti 5
1.1.4 Astrazione di macchina virtuale 6
1.2 Cenni storici sull’evoluzione dei sistemi operativi 7
1.2.1 I primi sistemi di elaborazione 7
1.2.2 I primi sistemi batch 8
1.2.3 Sistemi batch multiprogrammati 9
1.2.4 Sistemi time-sharing 14
1.2.5 Sistemi in ‘‘tempo reale’’ 16
1.2.6 Sistemi operativi per personal computer 18
1.2.7 Sistemi operativi per sistemi paralleli e distribuiti 19
1.3 Richiami di architetture dei sistemi di elaborazione 20
1.3.1 Il processore 21
1.3.2 La memoria 22
1.3.3 Dispositivi d’ingresso/uscita 25
1.3.4 Meccanismo d’interruzione 26
1.3.5 Accessi diretti alla memoria (DMA) 30
1.3.6 Meccanismi di protezione 32
1.4 Struttura dei sistemi operativi 34
1.4.1 Principali componenti di un sistema operativo 34
1.4.2 Principali modelli strutturali 39
1.5 Sintassi utilizzata nel testo 44
1.6 Sommario 45
1.7 Note bibliografiche 46
2 Gestione dei processi 49
2.1 Definizione di processo 50
2.2 Stati di un processo 51
2.3 Descrittore di un processo 54
2.4 Code di processi 55
2.5 Cambio di contesto 57
2.6 Creazione e terminazione dei processi 57
2.7 Interazione tra i processi 58
2.8 Nucleo di un sistema a processi 60
2.9 Scheduling 63
2.10 Processi leggeri (threads) 67
2.11 Sommario 70
2.12 Note bibliografiche 70
3 Sincronizzazione dei processi 73
3.1 Tipi di interazione tra i processi 73
3.2 Problema della mutua esclusione 77
3.2.1 Soluzioni al problema della mutua esclusione 78
3.3 Problema della comunicazione 80
3.4 Semafori 82
3.4.1 Soluzione al problema della mutua esclusione 82
3.4.2 Soluzione al problema della comunicazione 84
3.5 Primitive send e receive 86
3.6 Soluzione al problema di comunicazione tra processi 88
3.6.1 Sincronizzazione tra processi comunicanti 90
3.7 Blocco critico 91
3.7.1 Condizioni per il blocco critico 96
3.7.2 Metodi per il trattamento del blocco critico 97
3.7.3 Individuazione di eventuali blocchi critici e successivo ripristino 99
3.8 Sommario 100
3.9 Note bibliografiche 101
4 Gestione della memoria 103
4.1 Introduzione alla gestione della memoria 103
4.1.1 Analogie con la gestione della CPU 104
4.1.2 Differenze rispetto alla gestione della CPU 105
4.2 Aspetti caratterizzanti la gestione della memoria 106
4.2.1 La memoria virtuale 107
4.2.2 Rilocazione statica e dinamica - Memory Management Unit 109
4.2.3 Organizzazione della memoria virtuale 115
4.2.4 Allocazione della memoria fisica 117
4.2.5 Dimensionamento della memoria virtuale 120
4.3 Tecniche di gestione della memoria 121
4.3.1 Memoria partizionata 122
4.3.2 Memoria segmentata 128
4.3.3 Memoria paginata 137
4.3.4 Memoria segmentata e paginata 149
4.3.5 Gestione degli spazi virtuali 150
4.4 Sommario 154
4.5 Note bibliografiche 154
5 Gestione delle periferiche (I/O) 155
5.1 Concetti generali 156
5.2 Organizzazione logica del sottosistema di I/O 159
5.2.1 Livello indipendente dai dispositivi 159
5.2.2 Livello dipendente dai dispositivi 165
5.3 Gestore di un dispositivo 167
5.3.1 Processi esterni 169
5.3.2 Gestione di un dispositivo a controllo di programma 170
5.3.3 Gestione di un dispositivo a interruzione 171
5.3.4 Gestione di un dispositivo in DMA 177
5.3.5 Flusso di controllo durante un trasferimento 178
5.3.6 Gestione del temporizzatore 179
5.4 Gestione e organizzazione dei dischi 181
5.4.1 Organizzazione fisica dei dischi 181
5.4.2 Criteri di ordinamento dei dati su disco e di scheduling delle richieste di trasferimento 184
5.4.3 Dischi RAID 187
5.5 Sommario 190
5.6 Note bibliografiche 190
6 Il File System 193
6.1 Organizzazione del file system 193
6.2 La struttura logica del file system 195
6.2.1 Il file 195
6.2.2 Il direttorio 196
6.2.3 Gestione della struttura logica del file system 198
6.3 Accesso al file system 199
6.3.1 Strutture dati e operazioni per l’accesso ai file 199
6.3.2 Metodi di accesso 201
6.3.3 Protezione di file e direttori 203
6.4 Organizzazione fisica 206
6.4.1 Tecniche di allocazione dei file 206
6.5 Sommario 212
6.6 Note bibliografiche 213
7 I sistemi operativi Unix e Linux 215
7.1 Introduzione a Unix 215
7.1.1 La storia di Unix 215
7.1.2 Linux 216
7.2 Architettura del sistema operativo UNIX 217
7.2.1 Organizzazione 217
7.3 Interazione con l’utente 218
7.3.1 Lo shell 219
7.4 I processi nel sistema operativo Unix 220
7.4.1 Caratteristiche 220
7.4.2 Immagine di un processo Unix 222
7.4.3 System Call per la gestione di processi 224
7.4.4 Lo scheduling in Unix 229
7.5 La gestione della memoria nel sistema Unix 229
7.6 Il file system 230
7.6.1 Organizzazione logica del File System di Unix 230
7.6.2 Protezione 232
7.6.3 Organizzazione fisica del File System di Unix 234
7.6.4 Strutture dati del kernel per l’accesso a file 236
7.6.5 System Call per l’accesso a file 239
7.7 Interazione tra processi 241
7.7.1 Sincronizzazione: i segnali 242
7.7.2 System Call per l’uso dei segnali 243
7.7.3 Comunicazione: pipe 246
7.8 I Threads nel sistema Linux 248
7.8.1 Gestione di thread secondo lo standard POSIX: la libreria pthreads 248
7.8.2 Sincronizzazione tra thread Linux 250
7.8.3 Un esempio di sincronizzazione tra thread 256
7.9 Sommario 259
7.10 Note bibliografiche 260
8 Il Sistema Operativo Windows 261
8.1 Struttura generale 261
8.1.1 Evoluzione storica 261
8.1.2 Sottosistemi e moduli del nucleo 262
8.1.3 Struttura a microkernel 265
8.1.4 Kernel Objects 266
8.1.5 Sicurezza e controllo degli accessi 266
8.2 Gestione dei processi e dei thread 269
8.2.1 Lo Schedulatore 271
8.3 Sincronizzazione fra thread 274
8.3.1 La famiglia di funzioni Interlocked 274
8.3.2 Oggetti di sincronizzazione 276
8.4 Gestione della memoria virtuale 282
8.5 File system 283
8.6 Sommario 285
8.7 Note bibliografiche 285
A Elementi di sincronizzazione in ambiente distribuito 287
A.1 Introduzione alle reti 287
A.1.1 Il modello OSI e la rete Internet 288
A.2 Sviluppo delle applicazioni di rete 291
A.2.1 Il modello cliente-servitore 292
A.2.2 Le socket di Unix BSD 292
A.2.3 Strutture dati associate alle socket 296
A.2.4 System Call per l’uso delle socket 297
A.3 Un esempio: esecuzione remota di comandi 304
A.4 Sommario 307
A.5 Note bibliografiche 307
B Multithreading in Java 309
B.1 Ambiente di sviluppo e ambiente di esecuzione 310
B.2 I threads in Java 311
B.2.1 Creazione di threads mediante estensione della classe Thread 312
B.2.2 Creazione di threads mediante implementazione dell’interfaccia Runnable 313
B.2.3 Grafo di stato dei threads Java 314
B.2.4 Priorita` e algoritmi di scheduling dei threads Java 315
B.3 Sincronizzazione in Java 316
B.3.1 Accessi esclusivi a un oggetto e sezioni critiche 317
B.3.2 Sincronizzazione diretta: metodi wait e notify 320
B.4 Sommario 325
B.5 Note bibliografiche 325
Bibliografia 327
Indice analitico 333 |