lunedì 8 giugno 2009

Scheda audio


Una scheda audio è una scheda di espansione che si occupa di trasformare un flusso audio digitale in un segnale analogico (o anche digitale nelle configurazioni più recenti), riprodotto da un set di altoparlanti. La maggior parte delle schede audio attuali è anche in grado di ricevere input (da microfoni o strumenti musicali) che invia all'unità di elaborazione centrale.

Una scheda audio tipica include un chip sonoro solitamente equipaggiato con un convertitore digitale-analogico che converte onde sonore registrate o generate in digitale in un segnale analogico. Questo segnale è indirizzato a un connettore al quale può essere connesso un amplificatore o un'apparecchiatura simile.

Le architetture più avanzate solitamente includono più di un chip sonoro, e dividono fra sintetizzatore di suoni (solitamente usato per generare suoni in tempo reale con poco uso della CPU) e riproduzione digitale di suoni.

Le schede audio più avanzate (come ad esempio le X-Fi di Creative Labs) possiedono anche un processore (CPU) proprio per migliorare l'elaborazione del suono.

Nei PC di fascia medio-bassa la scheda audio è di solito integrata in un chip della scheda madre, per contenere i costi e i consumi. Queste schede audio, pur non avendo funzionalità di elaborazione avanzate, sono in grado di riprodurre suoni ad alta qualità e dispongono di uscite per sistemi di altoparlanti surround fino a 9.1.


Connessioni [modifica]
La maggior parte delle schede audio in commercio (integrate e non) a partire dal 1999 segue lo standard Microsoft PC 99 per la colorazione delle uscite:

Colore Funzione
Rosa Entrata analogica per il microfono.
Azzurro Entrata analogica.
Verde Uscita stereo principale (per cuffie o altoparlanti frontali).
Nero Uscita per gli altoparlanti posteriori (nei sistemi surround).
Argento Uscita per gli altoparlanti laterali (nei sistemi surround).
Arancione Uscita digitale S/PDIF (a volte utilizzata come uscita analogica per subwoofer).


Canali e polifonia [modifica]
Due importanti caratteristiche di una scheda audio sono:

la sua polifonia, ovvero il numero di suoni e voci distinti che possono essere riprodotti indipendentemente e simultaneamente;
il numero di canali, intesi come segnali audio elettrici distinti, corrispondenti alla configurazione degli altoparlanti, come 1 (mono), 2.0 (stereo), 2.1(stereo e subwoofer), 5.1 ecc.
Spesso i termini vengono utilizzati entrambi per indicare il grado di polifonia, non la configurazione delle uscite.

Le schede più datate avevano una polifonia di 3 voci, ma un solo canale audio in cui venivano mixate le voci.

Per diversi anni, le schede per PC avevano da 9 a 18 voci, per lo più usate per la riproduzione di musica MIDI, ma solo una (mono) o due (stereo) voci e canali per la riproduzione di suoni digitali. Quando dovevano essere riprodotti due o più suoni, essi erano mixati a livello software. Gran parte delle schede audio integrate ed economiche, pur avendo diversi canali audio (5.1, 7.1), non hanno nessuna polifonia a livello hardware.



Audio digitale
L'effetto uditivo (dal latino audire) detto suono consiste nella percezione da parte di un apposito dispositivo (orecchio di esseri viventi o microfoni artificiali) delle piccole e rapidissime vibrazioni emesse appunto da una "sorgente sonora" e propagate nell'ambiente circostante da un mezzo atto alla loro propagazione (in genere l'aria, ma anche acqua e rocce sono sede di fenomeni analoghi). Quindi il suono si genera in natura come vibrazioni meccaniche, si propaga in analoga maniera e sempre come vibrazioni viene percepito.

Fin dai primordi l'uomo ha cercato di trovare varie soluzioni per facilitare questa naturale propagazione con l'ausilio di dispositivi artificiali che aumentassero l'efficienza di questa trasmissione, in particolare cercando di far attraversare al suono spazi maggiori senza essere troppo contaminato da disturbi (detti rumore o noise in inglese) ed eventualmente essere memorizzato su supporti di memorizzazione che ne permettessero, oltre che il trasporto nello spazio, anche quello nel tempo, cioè che ne permettessero una memorizzazione permanente. Per far ciò molti artifizi tecnologici sono stati usati, fino alla definitiva invenzione del telefono (da parte dell'italiano Antonio Meucci, invenzione però brevettata per primo dall'americano Bell), che permetteva di trasformare i segnali sonori in segnali elettrici che contenevano tutte le informazioni (o quasi) del segnale sonoro originale, ma che potevano essere più facilmente (e più velocemente) trasportate nello spazio (tramite fili elettrici in un primo tempo e successivamente anche tramite onde elettromagnetiche con l'invenzione della radio di Guglielmo Marconi). Per ottenere ciò, al suono veniva associata un'altra grandezza fisica, con caratteristiche di rigorosa relazione con il suono che rappresentava. Questa relazione rigorosa con il suono di partenza permetteva all'arrivo della grandezza fisica di essere di nuovo riconvertita in suono, come ad esempio succede nel ricevitore del telefono, dove la corrente elettrica, che ha trasportato l'informazione sonora, viene all'arrivo ritrasformata in suono dal piccolo altoparlante inserito nella cornetta. Questa relazione di corrispondenza viene detta "codifica" del suono in corrente elettrica.

Analoghi criteri di codifica si hanno ad esempio nella memorizzazione dei suoni codificati in parametri magnetici nel nastro dei registratori magnetici a nastro, o nei parametri geometrici di forma e profondità dei solchi nelle vecchie registrazioni su dischi di vinile. Le moderne tecnologie informatiche, che mettono a disposizione computer capaci di elaborare grandi quantità di numeri al secondo, forniscono un'ulteriore e diversa possibilità di codifica dei suoni, associando ai parametri acustici delle onde sonore delle lunghe serie di numeri (detti anche digit, in italiano cifra), che li rappresentano piuttosto fedelmente e che possono, con elevata precisione essere riconvertite nei suoni originali. Questo processo di codifica delle grandezze fisiche continue (analogiche) in serie numeriche di cifre digitali è detta digitalizzazione e le grandezze sono dette essere rappresentate in maniera digitale. Queste lunghe serie numeriche possono poi essere memorizzate in memorie al silicio (pen drive ad esempio) o in memorie magnetiche (hard disk di computer) o infine in memorie ottiche (CD o DVD), per essere trasportate nello spazio e nel tempo.

Lo stato dell'arte attuale prevede che un segnale audio sia convertito (quindi codificato) in un analogo segnale elettrico (analogo per informazione contenuta, a meno dell'inevitabile rumore, anche minimo, introdotto da qualsiasi manipolazione) per mezzo di un microfono, il quale produce, quando viene colpito da una onda meccanica sonora continua, un segnale elettrico ininterrotto, i cui valori di tensione, normalmente compresi in un range (detto dinamica del segnale e compreso tra un minimo e un massimo), contengono la forma dell'onda acustica originaria. Un segnale siffatto, continuo nel tempo e che può assumere con continuità tutti i valori all'interno della sua dinamica, è detto analogico. Una seconda conversione può essere fatta associando a questo segnale una serie numerica (quindi digitale) che codifichi con sufficiente precisione la forma d'onda elettrica analogica originaria, ottenendo così la conversione analogico-digitale, detta brevemente conversione A/D. Per far questo è necessario andare ripetutamente a leggere i valori di tensione continui della forma d'onda analogica con sufficiente frequenza temporale, cioè effettuare una lettura sufficientemente fitta di questi valori di tensione, producendo un numero di letture (e quindi di valori numerici) in genere molto alto per ogni secondo di conversione A/D. Le singole letture sono dette campioni e il teorema del campionamento afferma che se la frequenza temporale di queste letture (detta frequenza di campionamento) è sufficientemente grande, non si hanno perdite di informazione rispetto alla forma d'onda originale. Cioè la serie di numeri prodotta contiene pressoché intatta tutta la informazione sulla forma d'onda elettrica analogica iniziale. Nei moderni standard tecnologici, in genere le frequenze di campionamento spaziano dagli 8.000 campioni al secondo (Samples per second, S/s) per la voce telefonica, fino ai 44.100 e più campioni al secondo per la qualità musicale. Queste letture di valori di tensione possono poi cadere in un qualsiasi punto della dinamica del segnale, cioè ogni singolo campione può avere un valore compreso tra il minimo e il massimo possibile. Quindi potenzialmente si possono avere infiniti valori di lettura di tensione per ogni singolo campione. Per completare l'opera di conversione del segnale da analogico in digitale, va ora suddivisa tutto il possibile range dinamico del segnale in un numero finito di intervalli e ogni singolo intervallo va codificato con un valore digitale ben determinato. Queste due operazioni si chiamano quantizzazione e codifica di sorgente. La quantizzazione in genere suddivide il range dinamico del segnale in un numero di intervalli potenza del due (2^n intervalli), in maniera tale che ogni singolo campione cadrà inevitabilmente in uno degli intervallini quantizzati e potrà così essere codificato digitalmente con n bit. I valori più ricorrenti di digitalizzazione attualmente usati vanno da un minimo di 8 bit per campione in campo telefonico (range dinamico del segnale suddiviso in 256 intervallini), fino a 20 e più bit per campione (range dinamico del segnale suddiviso in un milione e più di intervallini). Naturalmente all'aumentare del numeri dei bit per campione aumenta la fedeltà del segnale campionato alla forma d'onda originale e si riduce l'imprecisione introdotta dalla quantizzazione (rumore di quantizzazione), ma va osservato che già 8 bit per campione quasi basterebbero per soddisfare i vecchi criteri di alta fedeltà (HiFi). La serie numerica che così discende è detta segnale audio digitale e contiene in sé tutte le informazioni necessarie per ricostruire la forma elettrica originale, che a sua volta era l'immagine quasi perfetta della forma d'onda acustica che l'aveva originata. Volendo, si potrebbe quindi ora procedere alla sua conversione da digitale ad analogica con convertitori D/A, per riottenere la forma elettrica originale, che una volta inviata ad un altoparlante riproduce il suono originario. Tutto questo processo costa in termini di introduzione di rumore vario, ma con le moderne tecniche questo può facilmente essere tenuto sotto una soglia in genere accettabile. Un ultimo passo è in genere fatto in questo settore. Il segnale audio digitale prodotto dai convertitori A/D è in genere codificato con un certo numero di bit per ogni campione e così una registrazione audio di 60 secondi campionata a 44.100 campioni al secondo, con ogni campione codificato con 16 bit, dà per risultato una sequenza di 44.100 campioni al secondo per 60 secondi, pari a 2.646.000 campioni, che vanno ora moltiplicati per 16 bit per campione, ottenendo una serie di 42.336.000 bit. Questo segnale audio digitale così codificato è detto “raw”, cioè grezzo. Un secondo livello di codifica è ora possibile, che consenta di comprimere le informazioni in sequenze numeriche più corte e che occupino meno bit per ogni secondo di conversione. Con le moderne tecniche di codifica si arriva a comprimere il suono in maniera molto efficace, come ad esempio nello standard mp3, tanto usato per diffondere musica e suoni in generale.



Surround
Normalmente il surround è implementato mediante audio multicanale nel quale uno o più canali audio sono destinati ad essere riprodotti da diffusori acustici posizionati, secondo prestabilite regole, alle spalle dell'ascoltatore, canali audio che sono chiamati canali surround. Ma sono state sviluppate anche tecnologie in grado di ottenere il medesimo risultato senza l'utilizzo di diffusori posizionati alle spalle dell'ascoltatore. Tali tecnologie, basate su principi di psicoacustica e utilizzanti dei DSP, possono essere distinte in due categorie: nella prima categoria rientrano quelle tecnologie che si applicano all'audio multicanale dotato di canali surround (un esempio di tali tecnologie è il Dolby Virtual Speaker), nella seconda categoria rientrano invece quelle tecnologie che si applicano all'audio non dotato di canali surround, normalmente l'audio stereofonico. Le tecnologie appartenenti alla prima categoria utilizzano quindi un surround precedentemente creato, mentre le tecnologie appartenenti alla seconda categoria creano in tempo reale il surround durante la fase di riproduzione dell'audio.

I risultati migliori si hanno con l'audio multicanale dotato già in origine di uno o più canali surround in quanto è possibile dare ad ogni suono una determinata collocazione spaziale con precisione direttamente proporzionale al numero di canali surround utilizzati. Le tecnologie che si applicano all'audio non dotato di canali surround durante la sua riproduzione non sono in grado di ottenere la medesima precisione spaziale e non vanno oltre la creazione di quelli che sono chiamati effetti d'ambiente cioè la simulazione del riverbero del suono in un determinato ambiente di ascolto (teatro, stadio, ecc.).


Standard audio che prevedono canali surround [modifica]
Gli standard audio che prevedono canali surround sono:

Dolby Stereo
Dolby Stereo Spectral Recording
Dolby Surround
Dolby Surround Pro Logic II
Dolby Digital
Dolby Digital Surround EX
Dolby Digital Plus
Dolby TrueHD
DTS
DTS-ES
DTS 96/24
DTS-HD Master Audio
MPEG Multichannel

Oggi, una scheda che fornisce una polifonia hardware viene definita un "acceleratore audio" e include funzioni avanzate per il calcolo del suono 3D o effetti DSP in tempo reale.

Sistema operativo


In informatica il sistema operativo (abbreviato spesso nel suo acronimo SO, o all'inglese OS, operating system) è l'insieme di routine e strutture dati responsabile del controllo e della gestione dei componenti hardware che costituiscono un computer e dei programmi che su di esso vengono eseguiti. Il sistema operativo mette anche a disposizione dell'utente una interfaccia software (grafica o testuale) per accedere alle risorse hardware (dischi, memoria, I/O in generale) del sistema.

Il compito principale del sistema operativo è quello di permettere all'utente, umano o non, di interagire direttamente con la macchina.



Un generico sistema operativo moderno si compone di alcune parti standard, più o meno ben definite.

Il kernel: un gruppo di funzioni fondamentali, strettamente interconnesse fra loro e con l'hardware, che vengono eseguite con il privilegio massimo disponibile sulla macchina ossia in modalità kernel; il kernel fornisce le funzionalità di base per tutte le altre componenti del sistema operativo, che assolvono le loro funzioni servendosi dei servizi che esso offre. A seconda del tipo di sistema operativo il kernel può inglobare altre parti (kernel classico, monolitico o modulare) o fornire solo funzioni base delegando più funzioni possibile a oggetti/gestori esterni (microkernel).
Il gestore di file system: si occupa di esaudire le richieste di accesso alle memorie di massa. Viene utilizzato ogni volta che si accede a un file su disco, e oltre a fornire i dati richiesti tiene traccia dei file aperti, dei permessi di accesso ai file. Inoltre si occupa anche e soprattutto dell'astrazione logica dei dati memorizzati sul computer (directory, ecc).
Un gestore di memoria virtuale, che alloca la memoria richiesta dai programmi e dal sistema operativo stesso, salva sulla memoria di massa le zone di memoria temporaneamente non usate dai programmi e garantisce che le pagine swappate vengano riportate in memoria se richieste.
Uno scheduler che scandisce il tempo di esecuzione dei vari processi e assicura che ciascuno di essi venga eseguito per il tempo richiesto. Normalmente lo scheduler gestisce anche lo stato dei processi e può sospenderne l'esecuzione nel caso questi siano in attesa senza fare nulla (esempio classico è la richiesta di dati da disco). Nei sistemi operativi realtime lo scheduler si occupa anche di garantire una timeline, cioè un tempo massimo di completamento per ciascun task in esecuzione, ed è notevolmente più complesso.
Uno spooler che riceve dai programmi i dati da stampare e li stampa in successione, permettendo ai programmi di proseguire senza dover attendere la fine del processo di stampa.
Una interfaccia utente (shell o GUI) che permette agli esseri umani di interagire con la macchina.
A seconda dei casi, un particolare sistema operativo può avere tutti questi componenti o solo alcuni. Una ulteriore differenza fra i sistemi operativi è data dal tipo di comunicazione fra le varie componenti: i sistemi operativi classici sono basati su chiamate dirette di funzioni, mentre molti sistemi operativi moderni, soprattutto quelli che adottano microkernel, si basano sul message passing, sullo scambio di messaggi fra le loro varie parti e fra il sistema operativo e i programmi che fa girare.

Vediamo ora alcune classi di sistemi operativi possibili, dal più semplice al più complesso.


Monitor
Praticamente il solo kernel ridotto all'osso, con una minima interfaccia interattiva per impartire i comandi. Permette di scrivere in memoria il programma da eseguire e di lanciarlo, non ha nessuna altra caratteristica. È semplicissimo (per un computer), spesso i suoi comandi sono semplici chiamate dirette a subroutine in linguaggio macchina, è stato anche il primo tipo di sistema operativo mai implementato su un computer. Si limita a inizializzare il sistema e rimanere poi in attesa di comandi, cedendo il controllo completo della macchina ai programmi che vengono lanciati.


Interprete
Il secondo passo verso una migliore gestione del computer si ha con lo sviluppo di una interfaccia utente separata dal kernel, un interprete di comandi che funga anche da interfaccia utente, da shell. Questa shell primitiva di solito funge anche da interprete per un linguaggio di programmazione: a seconda delle scelte dei progettisti del software può essere un vero linguaggio oppure un più semplice linguaggio di scripting con cui creare comandi batch. Era il tipico sistema operativo degli home computer degli anni 80, come il Commodore 64 e il Sinclair ZX Spectrum.


DOS (Disk Operating Systems)
Un computer diventa molto più utile ed efficace se dotato di una memoria di massa: per gestirla serve un gestore di file system, cioè un software che in sintesi è composto da un insieme di funzioni che permetta di organizzare e gestire i dati sulla superficie dei mezzi di memorizzazione secondo una struttura ben precisa. I sistemi operativi che risiedevano su disco e capaci di gestire un file system sono detti genericamente Disk Operating Systems, cioè DOS appunto. L'esemplare più famoso è senz'altro il MS-DOS di Microsoft, oggi non più in uso, ma che era alla base dei sistemi operativi Windows 95/98/Me. Windows XP, Vista e 7 sono invece costruiti sull'architettura di Windows NT, completamente slegata da MS-DOS. Ne esiste anche una versione libera, il FreeDOS, ed altre versioni come DR-DOS.


Sistema multitask
I programmi non hanno sempre realmente bisogno della CPU: a volte, invece di eseguire istruzioni stanno aspettando che arrivino dei dati da un file, o che l'utente prema un tasto alla tastiera. Quindi si può, in linea di principio, usare questi tempi "morti" per far eseguire un altro programma. Questa idea, sorta fin dai primi anni cinquanta, si concretizzò nei sistemi operativi multitasking, cioè dotati di uno scheduler che manda in esecuzione più processi (esecuzioni di programmi), assegnando a turno la CPU a ognuno e sospendendo l'esecuzione dei programmi in attesa di un evento esterno (lettura/scrittura sulle memorie di massa, stampa, input utente ecc.) finché questo non si verifica.

Dovendo ospitare in memoria centrale più programmi nello stesso tempo, i sistemi multitask hanno bisogno di più memoria rispetto a quelli monotask: perciò questo tipo di sistemi operativi è quasi sempre dotato di un gestore di memoria virtuale. Inoltre, con più programmi simultaneamente attivi, il controllo delle risorse hardware diventa una reale necessità e non è più possibile farne a meno.

Esistono sostanzialmente due modi di implementare il multitasking: cooperative e preemptive multitasking. Nel primo sono i programmi che, spontaneamente, cedono il controllo al sistema non appena hanno terminato la singola operazione in corso; nel secondo è lo scheduler che ferma i programmi allo scadere del tempo assegnato e trasferisce il controllo dall'uno all'altro.

Il cooperative multitasking assorbe meno risorse di calcolo e non ha (quasi) ritardo di commutazione per il cambio di task, e inoltre non richiede nessuna struttura hardware dedicata, il che rende possibile implementarlo su qualunque calcolatore; per contro è molto vulnerabile a errori nei programmi (in genere il crash di un programma fa cadere l'intero sistema) e l'isolamento fra processi è molto debole. È il modello utilizzato da Mac OS 9, Windows 3.0 e precedenti.
Il preemptive multitasking necessita di CPU che implementino in hardware sia dei livelli di privilegio per l'esecuzione del codice, sia una logica specifica per il context switch, il cambio di task eseguito dallo scheduler. Poiché l'interruzione dei programmi è arbitraria, al cambio di task il sistema operativo è costretto a salvare tutti o quasi i registri della CPU e ricaricarli con quelli salvati dal task che subentra, perdendo molto tempo. A fronte di queste maggiori richieste, il preemptive multitasking offre una sicurezza del sistema molto maggiore e una (virtuale) immunità ai crash di sistema causati da errori nei programmi. È il modello utilizzato dai moderni sistemi operativi.

Sistema multiutente
Se un computer può far girare più programmi contemporaneamente, allora può anche accettare comandi da più utenti contemporaneamente: in effetti dal multitasking alla multiutenza il passo è molto breve tecnicamente, ma fa sorgere una serie di nuovi problemi dal punto di vista della sicurezza del sistema: come distinguere i vari utenti tra loro, come accertarsi che nessun utente possa causare danni agli altri o alla macchina che sta usando .

Questi problemi si risolvono assegnando un account univoco per ogni utente, assegnando un proprietario ai file ed ai programmi e gestendo un sistema di permessi per l'accesso ad essi, e prevedendo una gerarchia di utenti (cioè di account) per cui il sistema rifiuterà tutti i comandi potenzialmente "pericolosi" e li accetterà soltanto se impartiti da un utente in cima alla gerarchia, che è l'amministratore del sistema (generalmente l'account root nei sistemi Unix, Administrator nei sistemi Windows).


Sistema operativo on-line
Mediante opportuni software, il sistema operativo può avere la funzionalità di desktop remoto, che consente tramite una connessione internet l'accesso al proprio elaboratore e a tutti gli applicativi e dati salvati in uno specifico momento.

Tramite accesso remoto sono possibili le stesse operazioni che si possono fare stando davanti al proprio elaboratore.

L'accesso è protetto da user e password che possono essere al limite condivisi da una comunità di utenti. In questo caso, il desktop remoto è un'evoluzione della tradizionale cartella condivisa.

La cartella condivisa già permetteva la comunicazione di qualsiasi file, dunque anche di eseguibili, installabili da remoto in locale, oltreché di dati.


Sistemi operativi real-time
Un sistema operativo real-time è un particolare tipo di sistema operativo, in grado di garantire una risposta entro un dato tempo limite (millisecondi o microsecondi) a qualunque evento esterno. Questo requisito porta a una diversa struttura del sistema: per esempio i sistemi realtime usano spesso il polling (meno efficiente, ma deterministico) invece degli interrupt per gestire le periferiche, e non hanno memoria virtuale. I sistemi realtime si trovano spesso in ambito industriale, musicale o comunque dove sia necessario ottenere una risposta dal sistema in un tempo massimo prefissato. A loro volta i sistemi realtime si possono dividere in due categorie: hard e soft, a seconda dei tempi di risposta; un PC che faccia girare un gioco in 3D, per esempio, può essere considerato un sistema "soft-realtime".


Parti del sistema operativO

Kernel
Il kernel è il cuore di un sistema operativo. Si tratta di un software che ha il compito di fornire ai moduli che compongono il sistema operativo e ai programmi in esecuzione sul computer le funzioni fondamentali ed un accesso controllato all'hardware, sollevandoli dai dettagli della sua gestione.

Schema di Microkernel
Quali funzioni sia opportuno che il kernel debba fornire e quali possano essere demandate a moduli esterni è oggetto di opinioni divergenti: se il kernel di un sistema operativo implementa soltanto un numero molto ristretto di funzioni, delegando il resto ad altre parti, si parla di microkernel. Il vantaggio di un sistema operativo microkernel è la semplicità del suo kernel e la possibilità di cambiare facilmente i moduli e che se un modulo crolla non crolla tutto il sistema; lo svantaggio è l'interazione più complessa e costosa fra il kernel e le altre componenti del S.O. stesso, che spesso rallenta il sistema. Di solito il kernel di un sistema operativo microkernel è molto piccolo e fornisce solo poche funzioni di base per l'astrazione dall'hardware e la comunicazione fra i vari moduli, che sono esterni ad esso.

Un kernel tradizionale, monolitico e altri, integra invece dentro di sé la gestione della memoria virtuale, lo scheduler e i gestori di file system, nonché i driver necessari per il controllo di tutte le periferiche collegate. Questo tipo di kernel è più complesso da progettare, mantenere ed aggiornare, ma è anche più veloce ed efficiente. Una sua evoluzione è costituita dai kernel "modulari", che mantengono al loro interno lo scheduler e i gestori di file system e memoria virtuale ma separano alcune funzioni non essenziali in moduli a sé stanti, da caricare in memoria solo in caso di effettivo uso della funzione o periferica di loro competenza.

Schema di kernel monolitico
Sulla distinzione fra microkernel e kernel monolitico di notevole interesse è il famoso dibattito fra Torvalds e Tanenbaum "LINUX is obsolete" che potete trovare su comp.os.minix al seguente collegamento


File system
Il file system è il modo in cui i file sono immagazzinati e organizzati su un dispositivo di archiviazione, come un hard disk o un CD-ROM. Esistono molti tipi di file system, creati per diversi sistemi operativi, per diverse unità di memorizzazione e per diversi usi. Si possono identificare due grandi classi di file system: quelli per unità locali, destinate ad organizzare fisicamente i dati su un disco, e i file system distribuiti, nati per condividere i dati fra più computer collegati attraverso una rete, superando le differenze fra sistemi operativi e filesystem locali delle varie macchine.


Filesystem per unità locali
Filesystem

Amiga FileSystem
CFS
Ext2
Ext3
Ext4
FAT
FAT 32
HFS
HFS Plus
HPFS
ISO 9660
Journaled File System (JFS)
Minix
NTFS
ReiserFS
Unix File System (UFS)
XFS
ZFS
SWAP

Filesystem distribuiti
Network File System (NFS)
Coda
Andrew file system (AFS)

Scheduler


Lo scheduler è il componente fondamentale dei sistemi operativi multitasking, cioè quelli in grado di eseguire più processi (task) contemporaneamente. Lo scheduler si occupa di fare avanzare un processo interrompendone temporaneamente un altro, realizzando così un cambiamento di contesto (context switch). Generalmente computer con un processore sono in grado di eseguire un programma per volta, quindi per poter far convivere più task è necessario usare lo scheduler. Esistono vari algoritmi di scheduling che permettono di scegliere nella maniera più efficiente possibile quale task far proseguire. Allo stato dell'arte, esistono scheduler


Gestore di memoria
Il gestore di memoria è la componente del sistema operativo che si occupa di gestire ed assegnare la memoria ai processi che ne fanno richiesta. La gestione della memoria è necessaria per tenere traccia di quanta memoria è impegnata e di quanta invece è disponibile per soddisfare nuove richieste: in mancanza di un sistema di gestione, si avrebbe prima o poi il caso di processi che ne sovrascrivono altri, con gli ovvi inconvenienti.

Un altro buon motivo per registrare la memoria usata dai vari processi è il fatto che in caso di errori gravi i processi possono andare in crash e non essere più in grado di comunicare al sistema che la memoria che occupano può essere liberata: in questo caso è compito del gestore di memoria, dopo la terminazione anomala del processo, marcare come libere le zone di memoria possedute dal processo "defunto", rendendole disponibili per nuove allocazioni.

Per poter gestire i programmi, divenuti processi, è necessario che tutti gli indirizzi definiti in essi siano calcolati in forma relativa alla prima istruzione del programma (come se il programma dovesse essere caricato a partire dall’indirizzo 0 di memoria centrale.) Al momento del caricamento, che può essere eseguito in qualsiasi zona libera della memoria, gli indirizzi relativi verranno sommati al primo indirizzo di effettivo caricamento, diventando così assoluti: INDIRIZZO ASSOLUTO = INDIRIZZO RELATIVO + INDIRIZZO DI PARTENZA


Gestore di memoria virtuale
Nel caso il sistema disponga di un meccanismo di memoria virtuale, il gestore della memoria si occupa anche di mappare (indirizzare) la memoria virtuale offerta ai programmi sulla memoria fisica e sui dischi rigidi del sistema, copiando da memoria a disco rigido e viceversa le parti di memoria necessarie di volta in volta ai programmi, senza che i programmi stessi o gli utenti debbano preoccuparsi di nulla.


Protezione della memoria
La protezione della memoria è un sistema per prevenire la corruzione della memoria di un processo da parte di un altro. Di solito è gestito via hardware (ad esempio con una MMU, Memory management unit) e dal sistema operativo per allocare spazi di memoria distinti a processi differenti.


Interfaccia utente
Si tratta di un programma che permette all'utente di interagire con il computer. Esistono sostanzialmente due famiglie di interfacce utente: interfaccia a linea di comando e interfacce grafiche (GUI).


Spooler di stampa
Lo spooler di stampa è stato storicamente il primo modulo esterno del sistema operativo ad essere implementato, per risolvere il problema della gestione delle stampe su carta. Infatti, essendo le stampanti elettromeccaniche dei dispositivi molto lenti, i primi programmi per elaboratore dovevano necessariamente sprecare molto tempo di CPU, estremamente prezioso all'epoca, per controllare la stampante ed inviarle i dati. Quindi venne ideato un programma separato, che girava con una priorità molto bassa e che era visto dagli altri programmi come una normale stampante: in realtà invece lo spooler accumulava i dati che un programma doveva stampare in una apposita area di memoria RAM, e poi si faceva carico del processo di stampa vero e proprio lasciando gli altri programmi liberi di continuare la loro esecuzione.

Il meccanismo fondamentale dello spooler di stampa è rimasto sostanzialmente invariato dai suoi albori fino ad oggi: con gli anni e con il progredire della tecnologia le modifiche più rilevanti sono state la capacità di gestire più stampanti selezionabili a piacere, e la capacità di gestire anche stampanti remote, collegate cioè non direttamente al computer su cui gira lo spooler ma ad altri elaboratori connessi via rete.


I sistemi distribuiti in rete
Tra le varie ipotesi d'uso di un sistema operativo c'è anche la possibilità di sistemi distribuiti in rete. In tal caso la computazione viene distribuita tra più computer collegati in rete tra loro. In questo modo le risorse e il carico computazionale vengono condivise e bilanciate, si ottiene una maggiore affidabilità e i costi sono più contenuti nella scalabilità. Una configurazione funzionalmente simmetrica permette che tutte le macchine componenti abbiano lo stesso ruolo nel funzionamento del sistema e lo stesso grado di autonomia. Una approssimazione pratica di questa configurazione è il clustering. Il sistema viene suddiviso in cluster semiautonomi, dove ognuno di essi, a sua volta, è costituito da un insieme di macchine e da un server cluster dedicato.