Sistemi operativi: manuale pratico/Introduzione ai sistemi operativi/Funzioni principali dei sistemi operativi
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)