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 operativoModifica

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 SOModifica

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 SOModifica

KernelModifica

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 callModifica

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 funzioniModifica

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 comuniModifica

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

LoginModifica

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)

ShellModifica

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 systemModifica

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 nameModifica

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 nameModifica

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 PathModifica

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 pathModifica

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 specialiModifica

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

Home directoryModifica

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 processoModifica

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

ProgrammaModifica

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

ProcessoModifica

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 esecuzioneModifica

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

PipeModifica

Una pipe e' un flusso dati unidirezionale tra due processi

DeadlockModifica

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

LivelockModifica

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

StarvationModifica

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)