# Sistemi operativi: manuale pratico/Introduzione ai sistemi operativi/Funzioni principali dei sistemi operativi

Sistemi operativi: manuale pratico
Copertina Tutti i moduli · Sviluppo
Introduzione ai sistemi operativi
* Funzioni principali dei sistemi operativi
* Classificazione dei sistemi operativi
* File system linux
Processi
* Introduzione
* Segnali
* Inter-process communication
* Thread
* Sincronizzazione
* Shell
Comandi linux
* Comandi shell
* Script di shell
* AWK
* Strumenti di programmazione
* Comandi POSIX
Modifica il sommario

# Componenti di un sistema di elaborazione (bottom-up)

I componenti di un sistema di elaborazione sono:
* hardware: fornisce le risorse di elaborazione (CPU, memoria, periferiche)
* sistema operativo: controlla e coordina l'uso dell'hardware (linux, windows, mac)
* programmi applicativi: forniscono servizi agli utenti (programmi, giochi)
* utenti: fruiscono del sistema (persone, macchine)

# Sistema operativo

Un sistema operativo e' un software di interfaccia tra un utente o un programma applicativo e l'hardware; puo' essere visto come: estensione dell'hardware; gestore delle risorse

## Servizi di un SO

I servizi forniti da un SO sono:
* interpretazione dei comandi: l'utente comunica con l'elaboratore attraverso un'interfaccia gestita dal SO
* gestione dei processi (o programmi in esecuzione): il SO gestisce tutti i processi: li crea, li sospende, li cancella, li sincronizza
* gestione della memoria (principale e secondaria): il SO organizza e ottimizza l'accesso alla memoria
* gestione dei dispositivi I/O: il SO nasconde i dettagli dei dispositivi I/O e fornisce un'interfaccia generica all'utente
* gestione di file e file-system: il SO crea, legge, scrive, cancella file e instaura meccanismi di protezione di accesso
* implementazione di meccanismi di protezione: il SO controlla e tiene traccia degli accessi da parte di utenti e processi alle risorse del sistema
* gestione di reti e sistemi distribuiti

# Concetti base di un SO
## Kernel

Il kernel e' la parte centrale di un SO; il kernel gestisce memorie e processori; e' l'unico programma in esecuzione per tutto il tempo in cui l'elaboratore e' acceso

## Bootstrap (o booting program)

Il bootstrap e' il programma che, all'accensione del SO, carica in memoria principale il kernel del SO e lo esegue (generalmente e' un programma memorizzato in una memoria ROM e caricato al power-up o al reboot)

## System call

Una system call (chiamata di sistema) e' il meccanismo usato a livello utente (processo applicativo o persona) per richiedere al SO un servizio a livello kernel; spesso sono implementate in assembler; spesso vi si accede tramite Application Program Interface (API) di alto livello (POSIX API, JAVA API, Win32/64 API)

### Differenze tra system call e funzioni

Le differenze tra system call e funzioni sono:
* per ogni system call esistono piu' funzioni di alto livello con lo stesso nome
* le funzioni sono modificabili; le system call no
* le system call forniscono un servizio a livello kernel (o super user)

### System call UNIX/Linux comuni

Le piu' comuni system call UNIX/Linux sono:
* per la gestione dei processi: fork, wait, exec, exit, kill
* per la gestione dei file: open, close, read, write, lseek, stat
* per la gestione dei direttori: mkdir, rmdir, unlink, mount, umount, chdir, chmod

## Login

Il login e' la procedura di accesso ad un sistema informatico; per effettuare un login e' necessario fornire: username e password (memorizzata nel file /etc/passwd)

## Shell

La shell (guscio) e' l'interfaccia utente del SO; la shell legge i comandi (da terminale o da file script) dell'utente e li esegue

## File system

Il file system (sistema di file) e' l'insieme dei tipi di dati astratti utilizzati per l'organizzazione, la manipolazione e la memorizzazione dei dati (cartelle e file) di un elaboratore

## File name

Un file name (nome del file) e' il nome utilizzato per identificare in modo univoco un file memorizzato in un file system; in UNIX i caratteri che non possono essere inseriti in un file name sono: "/" (slash) e "null" (carattere nullo)

## Path name

Il path name (nome del percorso) e' una stringa composta da nomi di direttori separati da slash che indica la posizione univoca di un direttorio o di un file all'interno di un file system

### Absolute Path

Un absolute path e' un path name che specifica la posizione di un direttorio o di un file a partire dalla radice del file system

### Relative path

Un relative path e' un path name che specifica la posizione di un file a partire da una posizione diversa rispetto alla radice del file system

### Caratteri speciali

Nei path name: il "." indica il direttorio corrente; i ".." indicano il direttorio padre

## Home directory

La home directory e' la cartella destinata a contenere i file personali di uno specifico utente; viene assegnata o dal SO o dall'amministratore di sistema; nei sistemi LINUX e' individuata dal carattere "" (tilde); e' il direttorio a cui si accede subito dopo aver effettuato il login

## Working directory di un processo

La working directory (direttorio di lavoro) di un processo e' un direttorio del file system associato dinamicamente (cioe' puo' essere modificato) al processo; le working directories sono i nodi del file system utilizzati come origine per interpretare i relative paths

## Programma

Un programma e' un file eseguibile dal SO memorizzato su un disco; il programma e' un'entita' passiva; esistono due tipi di programma:
* programma sequenziale: ogni istruzione del programma viene eseguita al termine dell'istruzione precedente
* programma concorrente (o parallelo): le istruzioni del programma possono essere eseguite contemporaneamente

## Processo

Un processo e' un programma in esecuzione allocato in memoria principale; il processo e' un'entita' attiva; nei SO Linux ogni processo e' identificato da un numero intero non negativo

## Thread di esecuzione

Un thread (filo) di esecuzione o sottoprocesso e' una parte di un processo che: puo' essere eseguita contemporaneamente ad altri thread del processo; condivide risorse con gli altri thread del processo

## Pipe

Una pipe e' un flusso dati unidirezionale tra due processi

## Deadlock

Un deadlock (stallo) e' una situazione in cui due o piu' processi si bloccano a vicenda aspettando che uno esegua una certa azione che serve all'altro e viceversa

## Livelock

Un livelock (stallo attivo) e' una situazione in cui due o piu' processi non fanno alcun progresso (ma non sono bloccati)

## Starvation

Una starvation (inedia) e' una situazione in cui ad un processo viene negata in continuazione la possibilita' di ottenere le risorse di cui necessita per continuare la propria esecuzione; deadlock implica starvation (di tutti i processi); starvation non implica deadlock (gli altri processi possono progredire)