Estratto del documento

Il Sistema Operativo (SO) è il software più importante in esecuzione su un

calcolatore. Agisce come un intermediario tra l’utente e l’hardware, gestendo

le risorse del sistema e fornendo una piattaforma sulla quale le applicazioni

possono essere eseguite. Questo documento offre una trattazione completa e

strutturata dei principi fondamentali dei sistemi operativi, partendo dai concetti

teorici di gestione dei processi, della memoria e dei file system, fino alla loro

implementazione pratica nell’ambiente UNIX/Linux. L’obiettivo è fornire una

guida di riferimento accademica per comprendere l’architettura, le funzioni e le

sfide dei moderni sistemi operativi.

Capitolo 1: Ruolo e Struttura dei Sistemi Operativi

1.1 Cos’è un Sistema Operativo?

Un Sistema Operativo è un programma che gestisce l’hardware di un computer.

Svolge due funzioni principali:

1. Gestore delle Risorse (Resource Manager): Il SO gestisce e alloca le

risorse del sistema, sia hardware (CPU, memoria, dischi, periferiche) che

software (file, dati). Agisce come un “arbitro” per risolvere i conflitti tra i

diversi programmi e utenti che competono per le stesse risorse, garantendo

un utilizzo efficiente ed equo.

2. Macchina Virtuale Estesa (Extended Machine): Il SO nasconde la

complessità dell’hardware sottostante e fornisce all’utente e ai programma-

tori una visione più semplice, astratta e pulita del sistema. Ad esempio,

invece di dover gestire i dettagli dei settori del disco, un programmatore

lavora con l’astrazione di “file”.

1.2 Struttura di un Sistema Operativo

Un SO moderno è tipicamente strutturato a livelli. I due componenti principali

sono:

• Kernel: È il nucleo del sistema operativo. È il primo programma a essere

caricato all’avvio (boot) e rimane sempre in esecuzione. Il kernel ha il con-

trollo completo sull’hardware e gestisce tutte le funzioni critiche: schedul-

ing della CPU, gestione della memoria, accesso ai dispositivi. Opera in

modalità kernel (o supervisore), una modalità di esecuzione privi-

legiata della CPU che consente l’accesso a tutte le istruzioni e a tutto

l’hardware.

• Shell (o Interprete dei Comandi): È l’interfaccia tra l’utente e il

kernel. Legge i comandi dell’utente e li traduce in richieste per il kernel.

1

Non fa parte del kernel, ma è un’applicazione come le altre. Esistono shell

testuali (CLI - Command-Line Interface, es. in Linux) e shell grafiche

bash

(GUI - Graphical User Interface, es. Windows Explorer, GNOME).

1.3 System Call (Chiamate di Sistema)

Le applicazioni utente non possono accedere direttamente all’hardware o alle

funzioni critiche del kernel. Per richiedere un servizio al SO (es. leggere un file,

creare un processo), un’applicazione deve eseguire una system call.

Una system call è un meccanismo che trasferisce il controllo dal programma

utente (in esecuzione in modalità utente) al kernel (in modalità kernel). Il

kernel esegue l’operazione richiesta per conto dell’applicazione e poi restituisce il

controllo al programma utente. Le system call rappresentano l’API (Application

Programming Interface) del sistema operativo.

Capitolo 2: La Gestione dei Processi e lo Scheduling della

CPU

2.1 Il Concetto di Processo

Un processo è un programma in esecuzione. È l’unità di lavoro fondamen-

tale in un sistema operativo. Mentre un programma è un’entità passiva (un

file su disco), un processo è un’entità attiva, caratterizzata da: * Il codice del

programma (text section). * Lo stato corrente, rappresentato dal valore del

Program Counter e dei registri della CPU. * Lo stack, che contiene i dati tem-

poranei (parametri delle funzioni, variabili locali). * L’heap, la memoria allocata

dinamicamente durante l’esecuzione.

2.2 Stati di un Processo

Durante la sua vita, un processo attraversa diversi stati: 1. Nuovo (New): Il

processo è stato creato. 2. Pronto (Ready): Il processo è pronto per essere

eseguito e attende che lo scheduler gli assegni la CPU. 3. In Esecuzione (Run-

ning): Le istruzioni del processo sono in esecuzione sulla CPU. 4. In Attesa

(Waiting): Il processo è in attesa del verificarsi di un evento (es. il comple-

tamento di un’operazione di I/O, la ricezione di un segnale). 5. Terminato

(Terminated): Il processo ha terminato la sua esecuzione.

2.3 Process Control Block (PCB)

Per ogni processo, il sistema operativo mantiene una struttura dati chiamata

Process Control Block (PCB). Il PCB contiene tutte le informazioni asso-

ciate a un processo, tra cui: * Lo stato del processo. * Il Program Counter e i

valori dei registri della CPU. * Informazioni sullo scheduling (priorità, puntatori

alle code di scheduling). * Informazioni sulla gestione della memoria (tabelle

2

delle pagine). * Informazioni di accounting (tempo di CPU utilizzato). * Infor-

mazioni sullo stato dell’I/O (file aperti, dispositivi allocati).

2.4 Context Switch

Quando il SO deve passare la CPU da un processo A a un processo B, esegue

un context switch. L’operazione consiste nel: 1. Salvare lo stato del processo

A (il suo “contesto”, ovvero i registri della CPU) nel suo PCB. 2. Caricare

il contesto del processo B dal suo PCB nei registri della CPU. 3. Riprendere

l’esecuzione del processo B.

Il context switch è un overhead, perché durante il suo svolgimento il sistema

non compie lavoro utile.

2.5 Scheduling della CPU

Lo scheduler della CPU è la componente del SO che seleziona quale processo,

tra quelli nella coda dei pronti, deve essere eseguito sulla CPU.

Algoritmi di Scheduling: * First-Come, First-Served (FCFS): Il pro-

cesso che richiede per primo la CPU la ottiene per primo. Semplice ma può

portare a tempi di attesa medi molto lunghi (effetto “convoglio”). È un algo-

non-preemptive

ritmo (un processo mantiene la CPU finché non la rilascia

volontariamente). * Shortest-Job-First (SJF): Assegna la CPU al processo

con il “burst” di CPU successivo più breve. È provato essere ottimale per mini-

mizzare il tempo di attesa medio. Può essere preemptive (se arriva un nuovo

processo più breve di quello in esecuzione, quest’ultimo viene interrotto) o non-

preemptive. Il suo limite è la difficoltà di predire la durata del prossimo burst

Scheduling a Priorità:

di CPU. * A ogni processo è associata una priorità.

La CPU viene assegnata al processo con la priorità più alta. Può essere preemp-

tive o non-preemptive. Un problema è la starvation (inedia), in cui i processi

a bassa priorità potrebbero non essere mai eseguiti. * Round Robin (RR):

Progettato per i sistemi time-sharing. Ogni processo ottiene la CPU per un

piccolo intervallo di tempo fisso, detto quanto di tempo. Se il processo non

termina entro il quanto, viene interrotto (preemption) e messo in fondo alla

coda dei pronti. Garantisce una buona interattività.

Capitolo 3: Gestione della Memoria

3.1 Indirizzamento Logico e Fisico

• Indirizzo Logico (o Virtuale): È un indirizzo generato dalla CPU.

Fa riferimento a uno spazio di indirizzamento virtuale, unico per ogni

processo.

• Indirizzo Fisico: È l’indirizzo visto dall’unità di memoria (la RAM).

3

La Memory-Management Unit (MMU) è il dispositivo hardware che si

occupa di tradurre (mappare) gli indirizzi logici in indirizzi fisici a runtime.

3.2 Paginazione

La paginazione è la tecnica di gestione della memoria più comune. * La memo-

ria fisica è divisa in blocchi di dimensione fissa chiamati frame. * La memo-

ria logica di un processo è divisa in blocchi della stessa dimensione chiamati

pagine. * Quando un processo viene eseguito, le sue pagine vengono caricate

in frame disponibili (non necessariamente contigui) della memoria fisica. * Il

SO mantiene una tabella delle pagine (page table) per ogni processo, che

mappa ogni pagina logica al frame fisico corrispondente.

3.3 Memoria Virtuale

La memoria virtuale è una tecnica che permette di eseguire processi che sono

più grandi della memoria fisica disponibile. Si basa sulla paginazione e sull’uso

della memoria secondaria (disco) come estensione della RAM.

• Demand Paging: Le pagine di un processo vengono caricate in memoria

solo quando sono effettivamente richieste, non tutte all’inizio.

• Page Fault: Se la CPU genera un indirizzo che appartiene a una pagina

non presente in memoria, la MMU genera un’eccezione chiamata page

fault. Il SO gestisce il page fault:

1. Trova la pagina richiesta sul disco.

2. Carica la pagina in un frame libero della RAM. Se non ci sono frame

liberi, ne sceglie uno da “rimpiazzare” (vittima) secondo un algo-

ritmo di rimpiazzo (es. LRU - Least Recently Used). Se la pagina

vittima era stata modificata, deve essere prima salvata su disco.

3. Aggiorna la tabella delle pagine.

4. Riprende l’esecuzione dell’istruzione che aveva causato il fault.

La memoria virtuale permette un grado di multiprogrammazione più elevato e

astrae la gestione della memoria dal programmatore.

Capitolo 4: Il File System

Il file system è la parte del SO che si occupa della gestione della memoria secon-

daria (dischi). Fornisce un’astrazione logica per la memorizzazione e l’accesso

ai dati.

• File: Un insieme di informazioni correlate, a cui viene dato un nome. Dal

punto di vista del SO, è una sequenza di byte.

• Directory (o Cartella): Un contenitore per organizzare i file in modo

gerarchico. 4

• Attributi di un File: Nome, tipo, dimensione, data di creazione/modifica,

proprietario, permessi.

• Operazioni sui File: Creazione, scrittura, lettura, cancellazione, po-

sizionamento (seek).

4.1 Allocazione dello Spazio su Disco

• Allocazione Contigua: Ogni file occupa un insieme di blocchi contigui

sul disco. Veloce in lettura, ma soffre di frammentazione esterna.

• Allocazione Collegata (Linked Allocation): Ogni blocco del file con-

tiene un puntatore al blocco successivo. Elimina la frammentazione es-

terna, ma non consente l’accesso diretto (solo sequenziale) ed è poco affid-

abile.

• Allocazione Indicizzata (Indexed Allocation): Per ogni file, esiste

un blocco speciale (il blocco indice o i-node in UNIX) che contiene i

puntatori a tutti i blocchi dati del file. Permette l’accesso diretto e non

soffre di frammentazione esterna. È l’approccio più comune.

Capitolo 5: Introduzione all’Ambiente UNIX/Linux

5.1 Filosofia e Architettura

Anteprima
Vedrai una selezione di 3 pagine su 7
Miei appunti personali presi con latex di Sistemi operativi e laboratorio Pag. 1 Miei appunti personali presi con latex di Sistemi operativi e laboratorio Pag. 2
Anteprima di 3 pagg. su 7.
Scarica il documento per vederlo tutto.
Miei appunti personali presi con latex di Sistemi operativi e laboratorio Pag. 6
1 su 7
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher nicolo.cazzato di informazioni apprese con la frequenza delle lezioni di Sistemi operativi e laboratorio 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à degli Studi di Modena e Reggio Emilia o del prof Leonardi Letizia.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community