Vai al contenuto

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

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)

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

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)

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

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

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)

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

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

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

Una pipe e' un flusso dati unidirezionale tra due processi

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

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

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)