Sistemi operativi: manuale pratico/Introduzione ai sistemi operativi/Funzioni principali dei sistemi operativi
Componenti di un sistema di elaborazione (bottom-up)
[modifica | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]Kernel
[modifica | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]Nei path name: il "." indica il direttorio corrente; i ".." indicano il direttorio padre
Home directory
[modifica | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]Una pipe e' un flusso dati unidirezionale tra due processi
Deadlock
[modifica | modifica sorgente]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 | modifica sorgente]Un livelock (stallo attivo) e' una situazione in cui due o piu' processi non fanno alcun progresso (ma non sono bloccati)
Starvation
[modifica | modifica sorgente]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)