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

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Componenti di un sistema di elaborazione (bottom-up)[modifica]

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[modifica]

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[modifica]

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[modifica]

Kernel[modifica]

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)[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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

Home directory[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

Una pipe e' un flusso dati unidirezionale tra due processi

Deadlock[modifica]

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[modifica]

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

Starvation[modifica]

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)