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