mercoledì 31 marzo 2010

Incontri - Doc 03


Formattazione

In informatica la parola formattazione indica la standardizazione delle informazioni in un determinato formato e disposizione, ed è usata in contesti ben distinti con signiicati ben distinti.

Formattazione dei supporti di memorizzazione
In informatica la formattazione è l'operazione tramite la quale si prepara per l'uso un supporto di memorizzazione di massa, come ad esempio un disco fisso, impostando la struttura del file system. L'operazione consiste nel dividere la capacità del disco in una serie di blocchi di uguali dimensioni e fornire una struttura in cui verranno scritte le informazioni che permetteranno l'accesso ai dati desiderati.

Applicazione
Sono interessati a tale operazione tutti i supporti di archiviazione. Nel caso degli hard disk la formattazione deve essere preceduta dal partizionamento ovvero da un'operazione che permette di dividere lo spazio disponibile in una o più sezioni ognuna delle quali verrà gestita come un disco separato. Nel caso dei supporti ottici come i CD-R e i DVD scrivibili la registrazione dei dati avviene in genere per mezzo di appositi programmi di masterizzazione i quali creano la struttura di gestione contestualmente all'operazione di registrazione.
La formattazione deve essere sempre effettuata prima dell'utilizzo dei supporti di memoria. Normalmente i floppy disk e le chiavi USB vengono forniti preformattati dal produttore. In ogni caso è possibile effettuare nuovamente l'operazione di formattazione quando si desidera riutilizzare un supporto, perdendo i dati presenti sullo stesso.

Motivi
Uno dei casi in cui si ricorre alla riformattazione di un disco quando è necessario reinstallare il sistema operativo di un computer a seguito di malfunzionamenti causati da malware o da problemi software che hanno danneggiato il sistema operativo. In questo caso, dopo aver effettuato una copia di backup dei dati si procede alla formattazione per disporre di una struttura di memorizzazione sicuramente integra sulla quale installare il sistema operativo.

Livelli di formattazione
Esistono due livelli di formattazione detti formattazione a basso livello e formattazione ad alto livello.

Formattazione a basso livello
Attualmente interessa unicamente i floppy disk e consiste nel memorizzare sulla superficie degli stessi una serie di informazioni che permettono di dividerla in blocchi di uguale capacità identificabili univocamente e la cui integrità è verificabile attraverso una somma di controllo.
Fino agli anni ottanta una operazione analoga veniva effettuata dagli utenti anche sugli hard disk in quanto le imprecisioni del sistema di controllo delle testine a mezzo motore passo-passo, sensibile per esempio all'orientamento dell'unità, e l'algoritmo MFM usato per memorizzare i dati lo richiedevano.
L'avvento del sistema RLL e del posizionamento delle testine col sistema voice-coil hanno reso obsoleta tale pratica. Negli hard disk prodotti a partire dagli anni novanta tale operazione viene nella pratica effettuata quasi esclusivamente dal produttore.
Attualmente viene chiamata erroneamente formattazione a basso livello un'operazione di reinizializzazione del disco, possibile con apposite utility fornite dal produttore del disco stesso che consiste nel controllo di tutta la superficie del disco azzerandone il contenuto. In seguito a tale operazione i dati presenti sul disco non sono più recuperabili.

Formattazione ad alto livello
Consiste nella memorizzazione sul supporto delle strutture del file system ed eventualmente del master boot record. Questa operazione non cancella i file dal disco limitandosi a riscrivere la struttura che ne permette la normale gestione. Fino a che non vengono sovrascritti da nuovi file è possibile recuperare il contenuto dei file precedenti alla formattazione per mezzo di appositi programmi. I dati presenti sul disco saranno semplicemente ignorati e sovrascritti dal computer ma rimarranno, almeno parzialmente, recuperabili con appositi software. Per avere la certezza che i dati registrabili non siano più recuperabili bisogna ricorrere ad apposite tecniche di riscrittura dell'intera capacità del disco oppure alla distruzione fisica dello stesso.
I programmi di formattazione permettono contestualmente di fare un controllo dell'intera superficie del disco per verificare la presenza di eventuali difetti. Questa operazione può richiedere anche molte ore nel caso di un disco rigido di grande capacità ed è superata dalla capacità del firmware degli hard disk attualmente in commercio di identificare e isolare automaticamente eventuali blocchi difettosi. Analogamente alla reinizializzazione tale operazione rende i dati precedentemente presenti sul disco non più recuperabili.

File system

In informatica, un file system è, informalmente, un meccanismo con il quale i file sono immagazzinati e organizzati su un dispositivo di archiviazione, come un disco rigido o un CD-ROM. Più formalmente, un file system è l'insieme dei tipi di dati astratti necessari per la memorizzazione, l'organizzazione gerarchica, la manipolazione, la navigazione, l'accesso e la lettura dei dati. Di fatto, alcuni file system (come NFS) non interagiscono direttamente con i dispositivi di archiviazione.
I file system possono essere rappresentati sia testualmente che graficamente tramite browser di file e shell. Nella rappresentazione grafica (GUI) è generalmente utilizzata la metafora delle cartelle che contengono documenti (i file) ed altre cartelle.

Caratteristiche e storia dei file system
Un file system è parte integrante di qualsiasi sistema operativo moderno. L'unico vero compito dei sistemi operativi dei primi microcomputer era proprio la gestione dei file - un fatto che si riflette nei loro nomi (vedi DOS o QDOS).
I dispositivi di archiviazione, ad esempio i dischi fissi si presentano al sistema operativo come array di blocchi di dimensione fissa, generalmente chiamati settori, tipicamente di 512 byte l'uno. Le operazioni disponibili sono la lettura e la scrittura di un blocco arbitrario, o talvolta di un insieme di blocchi.
Basandosi su questo servizio fornito dai dispositivi a blocchi, il file system realizza due livelli di astrazione, che rendono le risorse di memorizzazione di massa facilmente utilizzabili dagli utenti.

Dal dispositivo a blocchi alla raccolta di file di dimensione arbitraria
Il primo livello di astrazione è quello che organizza i settori in un insieme di archivi (file) di dimensioni arbitrarie, che possono andare da zero all'intera dimensione disponibile del dispositivo. Ciascun file viene distribuito in un insieme di settori. Normalmente, l'utente vede solo un file, e non deve preoccuparsi di quali settori sono utilizzati per memorizzarlo. Le operazioni disponibili sono la lettura o la scrittura di un blocco di dati di dimensione arbitraria in un punto arbitrario del file. Il software di gestione del file system è responsabile dell'organizzazione di questi settori in file e di tenere traccia di quali settori appartengono a quali file, e quali invece non sono utilizzati. L'utente ha normalmente la totale libertà di creare nuovi file, cancellare file esistenti (liberando così i blocchi che questi occupavano), modificare file esistenti (cambiando così anche la loro dimensione, e quindi il numero di blocchi occupati).
Non tutti i file system hanno bisogno di un dispositivo di archiviazione. Un file system può infatti essere usato per organizzare e rappresentare qualsiasi tipo di dato, sia che sia memorizzato o generato dinamicamente (ad esempio, da una connessione di rete).

Nomi gerarchici dei file
Il secondo livello di astrazione è quello che permette di organizzare i file dando loro dei nomi gerarchici.
I file system tipicamente hanno tabelle che associano i nomi dei file con i file tramite collegamenti fisici, usualmente collegando il nome del file a un indice in una tabella di allocazione dei file (file allocation table) di qualche genere, come la FAT di un file system MS-DOS, o un inode in un file system di tipo Unix. Le strutture di cartelle possono essere ad un solo livello, oppure possono permettere una struttura gerarchica in cui delle cartelle possono contenere sottocartelle. In alcuni file system i nomi dei file sono strutturati con una speciale sintassi (per esempio estensioni o numeri di versione).
I file system gerarchici sono stati uno dei primi interessi di ricerca di Dennis Ritchie, uno dei padri fondatori di Unix; le implementazioni precedenti erano ristrette a pochi livelli.

Controllo d'accesso
Il file system viene inoltre utilizzato per memorizzare i dati che servono a controllare l'accesso a ciascun file da parte dei processi.
I criteri di sicurezza nell'accesso alle operazioni sui file system sono in genere basati su liste di controllo di accesso (access control list o ACL) o capabilities. Si è scoperta da qualche decina di anni l'inaffidabilità delle ACL, e per questo motivo i sistemi operativi moderni tendono a usare il meccanismo delle capabilities. I file system commerciali usano ancora le ACL.
Una ACL permette di definire per ciascun elemento del file system di quali permessi (lettura, scrittura, modifica ecc.) dispone ciascun utente che accede al sistema.

Funzionalità particolari
I file system tradizionali offrono degli strumenti per creare, muovere ed eliminare sia i file che le cartelle, ma non permettono di creare collegamenti addizionali alle cartelle (gli hard links di Unix ed NTFS), o di rinominare i collegamenti padre (".." nei sistemi Unix o DOS/Windows), e di creare collegamenti bidirezionali fra i file. Questi file system tradizionali hanno anche dei metodi per creare, muovere, cancellare e troncare i file, e per sostituire o aggiungervi in coda alcuni dati. Invece non permettono di aggiungere dati o troncare in testa un file, impedendo l'inserzione o la cancellazione arbitraria di dati. Le operazioni possibili sono quindi molto asimmetriche e spesso risultano inefficienti in contesti particolari.

Principali file system
Nel corso della storia informatica, è stata ideata una miriade di file system. I sistemi operativi moderni sono spesso in grado di accedere a diversi file system, spesso semplicemente installando un apposito modulo o driver.
I tipi di file system possono essere classificati in file system per dischi, file system di rete e file system per compiti speciali.
Nel gergo comune si è soliti affermare, soprattutto in sistemi GNU/Linux, che il file system viene montato, per consentire al sistema operativo di accedervi per le operazioni di lettura\scrittura.

File system del disco
Un file system del disco è un file system progettato per memorizzare dei file su un'unità a disco, che può essere collegata direttamente o indirettamente al computer.
Esempi di file system del disco sono:
Amiga FileSystems - OFS, FFS1 e 2, International, PFS, SFS usati su Amiga
BFS (Beos File System) - file system nativo di BeOS
DFS, ADFS - file system della Acorn
EFS (IRIX) - un vecchio file system a blocchi usato su IRIX per unità di memoria di massa rimovibili (DAT, CD-ROM...) precedente all'introduzione di ISO 9660
Ext - Extended file system, il primo file system appositamente progettato per GNU/Linux
Ext2 - Extended File System 2, diffuso su sistemi GNU/Linux
Ext3 - Extended File System 3, diffuso su sistemi GNU/Linux (ext2+journaling)
Ext4 - Extended File System 4, rilasciato come stabile dal kernel Linux 2.6.28 (già presente dalla versione 2.6.19 come ext4dev)
FAT - Usato su DOS, Microsoft Windows e su molti dispositivi dedicati, dispone di tabelle a 12 e 16 bit
FAT32 - versione con tabelle a 32 bit di FAT
ExFAT - conosciuto anche come FAT64, creato da Microsoft e pensato appositamente per memorie flash
FFS - Fast File System, usato in vecchi sistemi BSD
HFS - Hierarchal File System, usato su Mac OS
HFS+ - Hierarchal File System Plus, usato su Mac OS a partire dalla versione 8.1 e su Mac OS X
HPFS - High Performance File System, usato su OS/2
ISO 9660 - Usato su dischi CD-ROM e DVD-ROM (anche con estensioni Rock Ridge e Joliet)
Journaled File System (JFS) - disponibile su sistemi GNU/Linux, OS/2, e AIX
LFS - Log-structured File System
Minix - Usato su sistemi Minix
NTFS - NT File System. Usato su sistemi basati su Windows NT
NWFS - NetWare File System. Usato da Novell NetWare
ReiserFS - File system journaling diffuso su sistemi GNU/Linux
Reiser4 - File system journaling successore del ReiserFS diffuso su sistemi GNU/Linux.
UDF - File system a pacchetti usato su supporti WORM/RW, CD-RW e DVD
UFS - Unix File System, usato su vecchi sistemi BSD
UFS2 - Unix File System, usato su nuovi sistemi BSD
UMSDOS - File system FAT esteso con permessi e metadata, usato su GNU/Linux
XFS - eXtended FileSystem: 64 bit in addressing con possibilità di partizione unica di 9 milioni di TB utilizzato su IRIX. Tale filesystem è indicato per unità non rimovibili (HDD...).
ZFS - Creato dalla Sun Microsystems
Btrfs - Creato dalla Oracle Corporation

File system distribuito
Un file system distribuito permette di accedere ai file contenuti su un computer remoto tramite rete, potenzialmente in simultanea da diversi computer.
Esempi di file system di rete sono:
AFS (Andrew File System)
AppleShare
CIFS (conosciuto anche come SMB o Samba)
Coda
Global File System (GFS)
InterMezzo
Lustre
MagmaFS
NFS
9P

File system per compiti speciali
Alcuni file system vengono utlizzati per compiti speciali che non rientrano direttamente nelle prime due categorie. Molti non hanno alcuna relazione con un supporto di memorizzazione permanente dei dati, ma vengono utilizzati dal sistema operativo per dare accesso ad alcune funzionalità. Alcuni esempi sono:
archfs (archivi)
cdfs (lettura e scrittura di CD)
incdfs (lettura e scrittura di CD o DVD riscrivibili come se fossero floppy, usato nel software Nero)
cfs (caching)
DEVFS (solaris, GNU/Linux, crea dinamicamente i file speciali per dare accesso alle periferiche effettivamente installate)
ftpfs (accesso FTP)
lnfs (nomi lunghi)
nntpfs (netnews)
PROCFS (GNU/Linux e altri, mostra dati sullo stato del sistema e dei processi)
ROMFS (file system utilizzato nei sistemi uClinux)
TMPFS (file system temporaneo appoggiato sulla memoria di sistema)
SYSFS (GNU/Linux 2.6, sostituisce in parte PROCFS)
wikifs (wiki wiki)

Codici ASCII
La tabella ASCII è un codice convenzionale usato per la rappresentazione dei caratteri di testo attraverso i byte: ad ogni byte viene fatto corrispondere un diverso carattere della tastiera (lettere, numeri, segni).
In realtà lo standard ASCII copre solo i primi 128 byte (da 00000000 a 01111111), i successivi byte fino al 256° costituiscono la tabella ASCII estesa che presenta varie versioni a carattere nazionale.

Nella tabella ASCII standard si trovano le cifre numeriche, le lettere maiuscole e minuscole (maiuscole e minuscole hanno codici ASCII differenti) la punteggiatura, i simboli aritmetici e altri simboli ($, &, %, @, #, ecc.). Essendo stata concepita in America, la tabella ASCII standard non comprende le lettere accentate (sconosciute all'ortografia inglese).
I primi 32 byte della tabella standard sono inoltre riservati per segnali di controllo e funzioni varie.

L'alfabeto latino, usato nella scrittura di molte lingue nel mondo, presenta una grande quantità di varianti grafiche: si va dalle semplici vocali accentate (accento grave à, acuto á, circonflesso â, dieresi ä, tilde ã) a lettere modificate (lettere con barrette, cediglie, segni), lettere speciali usate solo in una lingua, segni di punteggiatura particolari (il punto interrogativo ed il punto esclamativo capovolti usati nello spagnolo), simboli di valuta, e così via, senza considerare poi che gran parte di questi segni presentano le due forme maiuscola e minuscola.
Le varianti sono talmente numerose che i 128 byte della tabella estesa non sono purtroppo sufficienti a rappresentarle tutte, per questo motivo esistono diverse estensioni della tabella ASCII: lo standard ISO 8859 prevede 15 diverse estensioni, comprese quelle per gli alfabeti diversi dal latino, ma esistono anche ulteriori estensioni non riconosciute dall'ISO e create per esempio dalla Microsoft per i sistemi Windows o dalla Apple per i Macintosh. Persino l'MS-DOS usava un'estensione diversa da quella di Windows.
La tabella ASCII estesa tipicamente utilizzata in Italia è quella dell'Europa occidentale, creata per le lingue germaniche e neolatine (escluso il rumeno). Altre estensioni usate in Europa sono la Centro Europea per i paesi dell'Europa orientale (lingue slave, ungherese, rumeno), la Turca, la Cirillica e la Greca.
Questa coesistenza fra diverse versioni del codice ASCII produce spesso discordanze nella visualizzazione dei file di testo. Sarà capitato a molti di aprire un file di testo o ricevere una E-mail e trovare segni assurdi al posto di tutte le lettere accentate, questo perché chi l'ha scritto stava usando una tabella estesa diversa dalla vostra e quindi il vostro computer interpreta alcuni byte del file in modo diverso.
Certi tipi di file, come i file html, possono contenere al loro interno il nome esplicito dell'estensione ASCII usata per la loro creazione, così il computer ricevente saprà come regolarsi.

Per cercare di ovviare al problema è stato creato un nuovo standard internazionale detto Unicode, definito dalla Unicode Consortium e dalla International Organization for Standardization (ISO 10646), che rappresenta i caratteri usando 2 byte (16 bit).
Con 2 byte il numero di combinazioni possibili diventa 256x256 = 65.536, perciò Unicode supporta 65.536 diversi segni, al posto dei 256 del set ASCII. Si riescono così a rappresentare non solo tutte le varianti dell'alfabeto latino, ma anche tutti gli altri alfabeti (greco, cirillico, arabo, ebraico, hindi, thai, ...) oltre all'insieme degli ideogrammi cinesi e giapponesi (che sono in tutto circa 30.000, anche se poi ne vengono effettivamente utilizzati solo poche migliaia). Lo standard definitivo è ancora in corso di definizione, ma i codici disponibili sono così numerosi, che pare verranno inseriti in Unicode persino gli alfabeti di fantasia come l'Elfico di Tolkien o il Klingon di Star Trek.
Lo svantaggio dell'Unicode, rispetto all'ASCII, è che le dimensioni dei file di testo risultano comunque raddoppiate (vengono usati 2 byte per carattere, invece di 1 solo).


Tabella ASCII standard
I Byte da 0 a 31 sono riservati per dei segnali di controllo; si tratta di comandi pensati per le telescriventi (per le quali il codice ASCII fu inizialmente creato) e solo pochi si utilizzano ancora con i computer. Se si sta usando Windows si può ottenere ogni carattere ASCII tenendo premuto il tasto Alt e digitando il codice decimale corrispondente col tastierino numerico (se il tastierino numerico non fosse attivo, premere prima il tasto Num lock o Bloc Num per attivarlo).
per esempio la chiocciola @ si ottiene digitando 64 mentre si tiene premuto il tasto Alt.
Nella tastiera inglese sono già presenti tutti i caratteri della tabella standard; nella tastiera italiana invece mancano l'apice (96), le parentesi graffe (123,125) e la tilde (126). 








Tabella ASCII estesa
La tabella riportata di seguito è quella usata da Windows98 italiano; già la versione inglese di Windows usa tabella diversa. I caratteri si ottengono tenendo premuto il tasto Alt e digitando col tastierino numerico il codice decimale corrispondente (se il tastierino numerico non fosse attivo, premere il tasto Num lock o Bloc Num per attivarlo).
per esempio la ß (doppia "s" tedesca) si ottiene digitando 225 mentre si tiene premuto il tasto Alt.
Sulla tastiera italiana sono comunque già disponibili alcune delle lettere accentate (ma non le lettere accentate maiuscole). 




























Si osservi come nella tabella estesa si trovino ripetuti più volte alcuni segni (per esempio: + - _ ) che peraltro sono pure compresi nella tabella standard. Si tratta in effetti di Byte non definiti a cui è stato assegnato un simbolo più o meno a caso.


mercoledì 24 marzo 2010

Incontri - Doc 02


PRIMA PARTE

Come diventare l’uomo più ricco del mondo

Gari Kildall

Gary Kildall (Seattle, 19 maggio 1942 – Monterey, 11 luglio 1994) nacque e crebbe a Seattle, Washington, dove la famiglia conduceva una scuola di viaggi per mare. Si iscrisse all'università di Washington con l'idea di diventare un insegnante di matematica, ma poco a poco si interessò all'informatica. Dopo la laurea fu chiamato alla leva, che svolse in marina presso la "Naval Postgraduate School" (NPS) di Monterey in California.
Abitando a poche ore di auto dalla Silicon Valley, Kildall venne a conoscenza del primo processore commerciale, l'Intel 4004. Ne comprò uno e cominciò a scriverne dei programmi. Al fine di acquisire maggiori informazioni, nel tempo libero lavorò da Intel come consulente.
Killdal ritornò per un breve tempo all'università e finì il dottorato di ricerca in informatica nel 1972, dopodiché riprese a insegnare presso l'NPS. Pubblicò un articolo scientifico che introduceva la teoria dell'analisi del flusso di dati, oggi usata nei compilatori ottimizzanti, e continuò a dedicarsi ai microcomputer e alla tcnologia dei floppy. Intel gli prestò dei sistemi basati su processori 8008 e 8080, e nel 1973 sviluppò il primo linguaggio ad alto livello per microprocessori, denominato PL/M. Creò CP/M lo stesso anno al fine di permettere all'8080 di controllare un floppy drive, combinando per la prima volta tutti i componenti essenziali di quello che era un calcolatore elettronico dell’epoca, realizzando di fatto il cosiddetto microcomputer. Mostrò CP/M a Intel, ma non si dimostrò interessata al progetto. Kildall, quindi, decise di commercializzare per proprio conto il linguaggio PL/M.
Kildall e la moglie Dorothy fondarono una compagnia, originariamente chiamata "Intergalactic Digital Research", più tardi ridenominata "Digital Research, Inc.", per vendere il CP/M attraverso annunci pubblicitari sulle riviste per hobbisti. L’attività commerciale di Digital Research iniziò con la vendita di una versione del CP/M per IMSAI 8080, un popolare clone di Altair 8800. Sempre più produttori fecero lo stesso, così che il sistema operativo di Kildall divenne lo standard de facto, arrivando a supportare un numero sempre più grande di configurazioni hardware. Per rispondere al problema, Kildall fu tra i primi a fare ricorso al concetto di BIOS, un insieme di semplici programmi memorizzati nell'hardware del computer, che permettevano a CP/M di girare su differenti sistemi senza modifiche. All'apice della popolarita', CP/M girava su 3000 differenti modelli di computer e la compagnia aveva un fatturato annuo di 5,4 milioni di dollari.

L’affare con IBM
Per la produzione del suo Personal Computer nel 1980, IBM cercò un sistema operativo da abbinare alle sue macchine. Pare che, in un primo momento, IBM si rivolse a Microsoft. Non è chiaro come mai il colosso dell’industria informatica si fosse rivolto alla (allora) piccola software house del venticinquenne Bill Gates. Probabilmente nemmeno IBM stessa credeva nella riuscita commerciale del progetto. Qualche legame con la vicenda, inoltre, potrebbe averlo il fatto che la madre di Bill Gates era presidente di una società che aveva tra i membri del consiglio di amministrazione il numero uno di IBM. Bill Gates, comunque, non aveva un sistema operativo da fornire ad IBM, per cui suggerì di contattare Digital Research. IBM si mosse al fine di acquistare i diritti per commercializzare una versione di CP/M che si sarebbe chiamata CP/M-86 per il suo PC. L’accordo però non fu trovato. Sono state avanzate varie ipotesi a riguardo. DRI, il cui portfolio di prodotti era limitato, era forse poco disponibile a fornire il proprio prodotto di punta a IBM per un pagamento una tantum invece di una percentuale sulle vendite. Oppure, forse riteneva di non poter consegnare il CP/M-86 nel tempo richiesto da IBM, in quanto impegnata nello sviluppo di un'implementazione del linguaggio PL/I per conto di Data General.
A quel punto IBM si rivolse nuovamente a Gates, con il quale erano già stati raggiunti accordi per fornire un interprete BASIC ed altri programmi per il PC, con il compito di trovare un sistema operativo. I fatti seguenti sono avvolti da ulteriore mistero. Sembra che qualche settimana dopo aver ricevuto il nuovo incarico da IBM, Microsoft comprò dalla “Seattle Computer Products" (SCP) un sistema operativo, il QDOS (Quick and Dirty Operating System) che, come fu appurato in seguito, era stato scritto ispirandosi al CP/M di Kildall, se non addirittura copiato direttamente. Paul Allen socio di Gates curò l'accordo con SCP, fece adattare il QDOS all'hardware di IBM e fu venduto come PC-DOS.
Kildall ottenne una copia del PC-DOS, lo esaminò arrivando alla conclusione che violasse la proprietà intellettuale di DRI. Kildall minacciò di far causa ad IBM, la quale rispose con una proposta di offrire CP/M-86 come opzione per il PC a mo' di scambio per non finire in tribunale.
La proposta fu accettata. Quando il PC IBM fu presentato, gli acquirenti potevano scegliere il sitema operativo da installare, tra il PC-DOS, al prezzo di 40 dollari ed il CP/M-86, che tra l’altro fu pronto dopo alcuni mesi, al prezzo di 240 dollari. Microsoft ebbe la meglio e le conseguneze di quella vittoria sono note.

Dopo il fallimento dell'accordo con IBM, Kildall lavorò su svariati progetti sperimentali e di ricerca, come una versione di CP/M con supporto del multitasking e un'implementazione del linguaggio Logo.
 Sperava che questo, un dialetto del LISP per finalità educative, potesse soppiantare il BASIC nelle scuole, ma non accadde. Dopo aver assistito a una dimostrazione dell'Apple Lisa, supervisionò la creazione della GUI di DRI, chiamata GEM desktop. In seguito il successo dei PC abbinati al sitema operativo di Microsoft, fecero perdere alla Digital Research il primato detenuto fino a qualche anno prima. La società di Kildall fu acquistata da Novell nel 1991, con un accordo che permise a Kildall di guadagnare milioni.
L'8 luglio 1994 Kildall ebbe un “incidente” mentre era in un ristorante di Monterey, California. Le circostanze rimangono poco chiare, con differenti fonti che affermano che cadde da una sedia, dalle scale o che fu aggredito. Andò due volte in ospedale e morì tre giorni più tardi al Community Hospital della penisola di Monterey. Il referto del medico legale riporta come causa del decesso un trauma al cranio. V'erano anche tracce di un infarto, ma l'autopsia non ha determinato con certezza le cause della morte.

Bill Gates


William Henry Gates III (meglio noto come Bill Gates; Seattle, 28 ottobre 1955) è il fondatore ed ex-presidente della Microsoft. È il secondo uomo più ricco del mondo secondo la rivista Forbes. Il suo ultimo patrimonio stimato è di 53 miliardi di dollari, lo precede nella classifica Carlos Slim Helú con un patrimonio di 53,5 miliardi di dollari, dopo Bill Gates troviamo Warren Buffett, e Lawrence Ellison.
Il padre William H. Gates II era procuratore. La madre, Mary Maxwell, insegnante all'Università dello Stato di Washington e presidente della United Way International.
Nel 1968, alla scuola privata Lakeside, Gates e i suoi compagni ebbero accesso per la prima volta ad un computer, un DEC PDP-11 divenendone inseparabili. Alla fine del 1968, Bill Gates e Paul Allen fondarono la Lakeside Programmers Group. Ottennero dalla Information Sciences Inc l’incarico di creare un programma di gestione paghe. Successivamente, nel 1972, Bill e Paul fondarono la Traf-O-Data, che progettò un computer per misurare il traffico stradale (furono pagati $ 20.000,00). La Traf-O-Data durò fino alla fine degli studi di Bill. I due lavorarono insieme anche per informatizzare il sistema di gestione della scuola (ricevettero $ 4.200,00). Negli ultimi anni di scuola, ebbero l'invito dalla TRW, non solo di trovare le debolezze del loro sistema ma anche di programmare i rimedi.
Nell'autunno del 1973, Bill Gates si iscrisse alla Harvard University in legge ed in più si iscrisse al corso di matematica. Ottenne risultati, ma come nelle superiori, non di rilievo. Si perse nuovamente nel centro informatico dell'istituto. A Lakeside, Gates, Allen e un loro amico, Paul Gilbert, esperto nel cablaggio, costruirono la loro macchina, usando il processore 8008 da 1 kb dell'Intel. Il gruppo ebbe l'opportunità di fare una dimostrazione del prodotto, ma dopo il fallimento della prova, l'idea di fondare una società per produrre computer fu abbandonata.
Alla fine del primo anno ad Harvard, Gates convinse Allen a spostarsi per poter dare seguito ai loro progetti. Nell'estate del 1974, ambedue trovarono lavoro alla Honeywell. Verso la fine dell'estate, Allen insistette sempre più con l'idea che dovevano fondare una società software. Gates esitava perché non era interessato all'informatica e voleva proseguire gli studi.
Ma, nel dicembre 1974 uscì il primo Kit per Microcomputer Altair8800 ed entrambi realizzarono che il mercato dei computer personali stava per esplodere e ci sarebbe voluto il software per le nuove macchine. Sulle macchine della General Electric, con cui Gates ed Allen avevano avuto le prime esperienze, il linguaggio usato era il BASIC. Esso era disponibile anche sulle macchine DEC e Gates, in pochi giorni, telefonò alla MITS, società produttrice dell'Altair, e propose del software specifico per l'Altair 8800. La società si disse molto interessata e Gates, programmando freneticamente, in otto settimane produsse le modifiche, mentre Allen sviluppò un simulatore dell'Altair sul PDP-10 della scuola. Monte Davidoff si unì al gruppo e scrisse svariati pacchetti matematici. Successivamente, Allen portò il programma alla società per la prima prova sull'Altair; superata la prova, la società acquistò il software, che venne commercializzato col nome di Altair BASIC. La coppia si trasferì ad Albuquerque (Nuovo Messico), sede della MITS e, nell'aprile 1975, Gates ed Allen fondarono la Microsoft Corporation.

 

Lo sviluppo di Microsoft

1975
1986
1997
Ricavi: $16.005
Impiegati: 3
Ricavi: $197.514.000
Impiegati: 1.442 
Ricavi: $11,36 miliardi
Impiegati: 22.276
1976
1987
1998
Ricavi: $22.496
Impiegati: 7
Ricavi: $345.890.000
Impiegati: 1.816 
Ricavi: $14,48 miliardi
Impiegati: 28.028
1977
1988
.
Ricavi: $381.715
Impiegati: 9
Ricavi: $590.827.000
Impiegati: 2.793
.
1978
1989
.
Ricavi: $1.355.655
Impiegati: 13
Ricavi: $804.530.000
Impiegati: 4.037
.
1979
1990
.
Ricavi: $2.390.145
Impiegati: 28
Ricavi: $1,18 miliardi
Impiegati: 5.635
.
1980
 1991
.
Ricavi: $7.520.720
Impiegati: 40
Ricavi: $1,84 miliardi
Impiegati: 8.226
.
1981
1992
.
Ricavi: $16.000.000
Impiegati: 128
Ricavi: $2,75 miliardi
Impiegati: 11.542 
.
1982
1993
.
Ricavi: $24.486.000
Impiegati: 220
Ricavi: $3,75 miliardi
Impiegati: 14.430
.
1983
1994
.
Ricavi: $50.065.000
Impiegati: 476
Ricavi: $4,64 miliardi
Impiegati: 15.257
.
1984
1995
.
Ricavi: $97.479.000
Impiegati: 608
Ricavi: $5,94 miliardi
Impiegati: 17.801
.
1985
1996
2009
Ricavi: 140.417.000
Impiegati: 910
Ricavi: $8,67 miliardi
Impiegati: 20.561
Ricavi: $60 miliardi
Impiegati: 100.000

SECONDA PARTE

La macchina delle meraviglie

I componenti fondamentali del personal computer

Il processore

Il microprocessore è attualmente l'implementazione fisica della CPU più comune, utilizzata dalla quasi totalità dei computer e in altri dispositivi digitali (come ad esempio telefoni cellulari, stampanti, scanner). Può essere considerato il "motore" di elaborazione dati, racchiuso in un unico circuito integrato, in grado di leggere, elaborare e scrivere informazioni in un memoria o verso altri dispositivi digitali.
La costruzione dei microprocessori fu resa possibile dall'avvento della tecnologia LSI: integrando una CPU completa in un solo chip permise di ridurre significativamente i costi dei calcolatori. Dagli anni ottanta in poi i microprocessori sono praticamente l'unica implementazione di CPU.
Dalla loro introduzione ad oggi, l'evoluzione del microprocessore ha seguito con buona approssimazione la legge di Moore, una legge esponenziale che prevede il raddoppio del numero di transistor integrabili sullo stesso chip (e quindi, nella visione di Moore, delle prestazioni) ogni 18 mesi. L'incremento prestazionale verificatosi dalla fine degli anni 80 però è dovuto soprattutto al miglioramento dell'architettura dei calcolatori, attraverso l'adozione di tecnologie RISC, come l'uso di pipeline e di gerarchie di memorie cache.

Il primo microprocessore
Come altre innovazioni tecnologiche il microprocessore apparve appena la tecnologia lo consentì dato che l'idea di integrare i componenti di una CPU in un singolo circuito integrato era una soluzione logica. Quasi contemporaneamente infatti, iniziarono lo sviluppo l'Intel 4004, il Texas Instruments TMS 1000, e il Garrett AiResearch Central Air Data Computer. Nel 1968 Garrett iniziò a sviluppare un sistema elettronico per competere con i sistemi elettromeccanici utilizzati nei caccia militari. L'obiettivo del progetto era equipaggiare il nuovo F-14 Tomcat che allora era in sviluppo. Il progetto venne completato nel 1970 e utilizzava integrati MOS per il core della CPU. Il progetto era semplice e innovativo e vinse sui competitori elettromeccanici venendo utilizzato fin dai primi Tomcat. La marina americana però considerò il progetto tanto innovativo che impedì la pubblicazione di articoli sul sistema fino al 1997, per cui questo microprocessore rimase semisconosciuto.
Texas Instruments (TI) sviluppò il sistema TMS 1000 a 4 bit per applicazioni embedded pre-programmate. Il 17 settembre 1971 annunciò il modello TMS 1802NC, programmabile, che poteva essere utilizzato per implementare un calcolatore. L'Intel 4004, processore a 4 bit, venne presentato il 15 novembre 1971 e fu sviluppato da Federico Faggin e Marcian Hoff.

Processori a 8 bit significativi
Il 4004 venne seguito nel 1972 dall'8008, il primo microprocessore a 8 bit del mondo, evoluto successivamente nel più famoso Intel 8080 (1974).
Dal progetto 8080 venne derivato il clone Z80 prodotto nel 1976 dalla ZiLOG, società fondata da alcuni fuoriusciti dalla Intel, tra i quali lo stesso Federico Faggin. Compatibile a livello di set istruzioni, lo Z80 includeva diversi miglioramenti che lo fecero rapidamente preferire all'8080 dagli sviluppatori. Intel reagì producendo nel 1976 una propria versione migliorata dell'8080, l'8085, ancora compatibile a livello binario con i programmi scritti per l'8080.
Motorola presentò nell'agosto del 1974 il 6800, primo processore ad adottare un registro indice. Molto versatile, ebbe un discreto successo, oscurato in parte l'anno successivo dal lancio del MOS Technology 6502: era ispirato all'architettura del 6800, dotato di alcune soluzioni tecniche migliorative e soprattutto caratterizzato da un costo drasticamente inferiore (25 USD contro i 175 UDS del 6800), cosa che lo rese estremamente popolare. Il 6502 fu scelto, ad esempio, da Steve Wozniak per l'Apple I nel 1976 ed il successivo Apple II nel 1977.
Motorola reagì con il 6809 (1979), uno dei più poteti e ortogonali processori a 8 bit mai sviluppati: non usava microcodice, e l'unità di controllo era interamente in logica cablata. I successori del 6809 risultarono essere troppo complessi per poter mantenere questo approccio e vennero equipaggiati con una tradizionale unità logica a microcodice. Il progetto 6809 è alla base di una serie molto diffusa di microcontrollori tutt'ora utilizzata in sistemi embedded.
The Western Design Center, Inc. (WDC) presentò nel 1982 il 65C02 con tecnologia CMOS e licenziò il progetto a molte altre ditte che svilupparono i processori alla base dei computer Apple IIc e IIe. Il processore fu utilizzato anche in pacemaker, defibrillatori, automobili, prodotti industriali e di consumo. WDC fu pioniera nella vendita delle proprietà intellettuali e fu seguita anni dopo da Architettura ARM e altre ditte che basano i loro guadagni sullo sviluppo e sulla vendita delle proprietà intellettuali.
Un altro processore a 8 bit che ebbe una discreta fama fu il Signetics 2650 un processore con un'architettura innovativa e un potente set di istruzioni.
Tutti questi processori furono alla base della "rivoluzione" degli home computer, poiché grazie al loro basso prezzo permisero la realizzazione di veri computer ad un costo accessibile.


La memoria RAM
La RAM (Random Access Memory o memoria ad accesso casuale) è la memoria in cui il Computer conserva i programmi e i dati durante la loro esecuzione, quindi, maggiore è la quantità di RAM disponibile, maggiore è il numero di programmi e files (o finestre) che si possono tenere aperti contemporaneamente, maggiore è anche la loro velocità di esecuzione! Il processore carica e preleva le istruzioni dalla RAM, quando non sono presenti nella propria cache interna Poiché la RAM, generalmente, è più lenta del processore, la sua velocità è un fattore determinante per le prestazioni dell'intero calcolatore.
E’ costituita da piccole schede chiamate “banchi” su cui sono installati i circuiti integrati di memoria.

Memorie RAM. Dall'alto: DIP, SIPP, SIMM (30 pin), SIMM (72 pin), DIMM (168 pin), DDR DIMM (184 pin)

La RAM è una tipologia di memoria caratterizzata dal permettere l'accesso diretto a qualunque indirizzo di memoria con lo stesso tempo di accesso, che risulta molto basso. Per questo motivo è comune a tutte le architetture hardware, sia a singolo processore che multiprocessore e costituisce la memoria primaria dell'elaboratore.
Caratteristica comune a tutti i tipi di RAM utilizzati per la memoria principale è quella di perdere il proprio contenuto nel momento in cui viene a mancare l'alimentazione elettrica.
Le principali caratteristiche di una memoria sono le seguenti :
La capacità, che rappresenta il volume globale delle informazioni (in bit) che la memoria può stoccare;
Il tempo di accesso, che corrisponde all'intervallo di tempo tra la richiesta di lettura/scrittura e la disponibilità del dato;
Il tempo di ciclo, che rappresenta l'intervallo di tempo minimo tra due accessi successivi;
La capacità della banda, che definische il volume di informazioni scambiato per unità di tempo, espressa in bit al secondo;
La non volatilità che caratterizza l'attitudine di una memoria per conservare i dati anche senza alimentazione elettrica.

Così, la memoria ideale ha una grande capacità con dei tempi di accesso e di ciclo molto ridotti, una banda elevata ed è non volatile.
Tuttavia le memorie rapide sono anche le più costose. E' la ragione per cui in un computer si utilizzano delle memoria che si servono di tecnologie diverse, interfacciate le une con le altre e organizzate in modo gerarchico.

Le memorie più rapide sono poste in quantità ridotta in prossimità del processore e le memorie di massa (di cui fanno parte gli hard disk), meno rapide, servono a conservare le informazioni in modo permanente.

Il BIOS

Un chip ROM che contiene il BIOS

In informatica, il Basic Input-Output System o BIOS è un insieme di routine software, generalmente scritte su ROM, FLASH o altra memoria RAM non volatile, che fornisce una serie di funzioni di base per l'accesso all'hardware e alle periferiche integrate nella scheda madre da parte del sistema operativo e dei programmi. Nei computer IBM-compatibili la ROM del BIOS contiene anche il POST (Power on Self Test), il primo programma che viene eseguito dopo l'accensione.
Nei primi PC IBM il BIOS supportava tutte le periferiche e il DOS faceva completo affidamento su di esso per le operazioni a basso livello, ma con l'evoluzione tecnologica successiva le capacità offerte dalle routine di gestione del BIOS (all'epoca non aggiornabili, perché scritte in ROM) divennero rapidamente insufficienti. Attualmente i moderni sistemi operativi (Ad esempio Microsoft Windows o Linux) non usano più il BIOS per le loro operazioni di Input/Output ma accedono direttamente all'hardware.
Il BIOS è scritto di solito nel linguaggio assembly nativo della famiglia di CPU utilizzata. Attualmente il BIOS dei PC è scritto su memorie EEPROM riscrivibili, quindi può essere modificato e aggiornato: generalmente i costruttori mettono a disposizione nuove versioni di BIOS, il cosiddetto firmware, per correggere difetti o aggiungere supporto a periferiche hardware non previste inizialmente.
L'operazione di aggiornamento del firmware va eseguita con cautela, perché, se non va a buon fine, per esempio a causa di un blackout, può rendere la scheda madre inutilizzabile.
Il termine BIOS apparve per la prima volta con il sistema operativo CP/M e descriveva quella parte di CP/M che veniva caricata all'avvio e che si interfacciava direttamente con l'hardware. I computer che utilizzavano il CP/M avevano infatti solo un semplicissimo boot loader nella ROM. Anche le successive versioni del DOS avevano un file chiamato IBMBIO.COM o IO.SYS del tutto analogo.

Avvio del PC
A partire dall'introduzione dei primi IBM PC XT e compatibili nell'agosto del 1981, è il BIOS che ha il compito di dare i primi comandi al sistema durante la fase di avvio, detta boot process. In questa fase, dopo i controlli preliminari sulla funzionalità dei componenti fondamentali (interrupt, RAM, tastiera, dischi, porte), per sapere come inizializzare correttamente le periferiche presenti il BIOS legge alcuni parametri (come l'ora e la data correnti) da una piccola memoria RAM CMOS mantenuta alimentata anche a PC spento da una batteria, del tutto separata dalla RAM principale del computer.
Nelle moderne implementazioni del BIOS possono essere selezionati i più diversi tipi di supporto per l'avvio e sono presenti numerose funzioni per la diagnostica e la personalizzazione di importanti funzioni relative all'utilizzo della RAM, alle opzioni per l'overclocking e sono presenti segnali di allarme in caso di malfunzionamenti delle ventole o eccessivi aumenti della temperatura.

Modifica delle impostazioni
Per accedere al menù di modifica del BIOS è necessario premere all'avvio dell'elaboratore (dopo alcuni secondi che si è premuto il tasto di accensione) un tasto o un combinazione di tasti. Se l'elaboratore ha iniziato a caricare il sistema operativo non è più possibile (eccetto alcuni casi) variare le impostazioni del BIOS.
Questi i tasti più usati: Canc, F2, F10, Alt-F1, F8
Una volta entrati nel menu di impostazione del BIOS è sufficiente seguire le indicazioni.

Firmware su schede di espansione
Un computer può integrare il proprio BIOS con altri moduli: esistono infatti schede di espansione che possono impiegare delle estensioni proprietarie del BIOS in aggiunta a quello collocato sulla scheda madre; di solito la scheda Video, ad esempio, o un controller SCSI.

Boot e sicurezza
Il BIOS è normalmente in grado di caricare un sistema operativo da diversi dispositivi di memorizzazione di massa, come dischi fissi, floppy, CD-ROM, memorie USB, e spesso anche di eseguire un boot da rete attraverso PXE.
Questo permette di caricare un sistema operativo diverso da quello previsto dall'amministratore di sistema, e quindi, tra l’altro, di eludere qualsiasi politica di sicurezza basata sul sistema operativo.


La scheda video

La scheda video è un componente del computer che ha lo scopo di generare un segnale elettrico (output) che possa essere mostrato a video (display). A seconda del tipo di computer questo dispositivo può essere più o meno potente: i primi modelli di scheda video potevano visualizzare solo testo; successivamente si sono diffuse anche schede video in grado di mostrare output grafici (immagini non testuali) e, recentemente, anche modelli tridimensionali texturizzati in movimento e in tempo reale. Questi ultimi tipi di scheda provvedono anche ad elaborare e modificare l'immagine nella propria memoria interna, mentre le schede 2D possono mostrare immagini 3D solo con l'aiuto della CPU che deve eseguire da sola tutti i calcoli necessari.
Tipologia di collegamento alla scheda madre
Le schede video possono essere collegate in diverso modo alla scheda madre:
  • Integrate, la scheda video è ricavata direttamente sulla scheda madre, questa soluzione viene utilizzata sulle console e su alcuni PC, per quest'ultimi, si può avere o no la possibilità di utilizzare una scheda video esterna
  • PCI, porta parallela
  • AGP, porta parallela
  • PCI Express, porta seriale
Tipologia e architettura delle schede video

Una tipica scheda video contiene un integrato grafico (o più di uno) che gestisce una certa quantità di RAM dedicata a memorizzare i dati grafici da visualizzare e che risiede fisicamente sulla scheda stessa. Le schede video costruite per i PC IBM e compatibili contengono anche una ROM con un driver molto semplice (chiamato firmware che è aggiornabile nelle moderne schede video), usato dal BIOS per il bootstrap.
Il funzionamento di una scheda video è, in linea di massima, molto semplice: ogni locazione di RAM grafica contiene il colore di un pixel dello schermo, o di un carattere se la scheda sta visualizzando solo testo: il chip grafico si limita a leggere in sequenza le locazioni necessarie (se sta lavorando in modo testo, ogni locazione viene elaborata da un generatore di caratteri) e a pilotare un convertitore digitale-analogico, detto RAMDAC, che genera il segnale video che sarà visualizzato dal monitor. Dalla quantità di RAM grafica equipaggiata nella scheda e dalla velocità (frequenza) massima del suo RAMDAC dipendono la risoluzione massima raggiungibile e il numero di colori contemporaneamente visibili.
Tutte le schede video possono visualizzare anche grafica tridimensionale (al limite anche quelle con sola modalità testo, se si accetta una rappresentazione ASCII art), ma senza funzioni apposite di accelerazione. L'intero lavoro di calcolo deve essere svolto, pixel per pixel, dalla CPU principale del computer, che viene spesso completamente assorbita da questo compito: una scheda grafica non tridimensionale si limita in pratica a visualizzare una serie di immagini bidimensionali che le vengono inviate dal sistema.

Modo testo

Tutte le schede video dispongono almeno del modo di funzionamento detto modalità testo o a caratteri: in questa modalità lo schermo del computer è organizzato come una griglia di caselle rettangolari in ciascuna delle quali viene scritto un carattere tipografico, di stile prefissato da un generatore di caratteri interno alla scheda (generalmente una sezione del chip video che si occupa di leggere la descrizione dei vari caratteri richiesti dalla ROM o da una parte della RAM video). Per esempio, nei PC IBM originali il modo testo era di 80 colonne per 25 righe. Una parte della RAM della scheda viene poi usata per memorizzare il codice (in genere in codice ASCII) di un carattere tipografico.
In questa modalità, per far comparire sullo schermo la scritta "scheda video" è sufficiente che il calcolatore scriva i dodici codici ASCII delle lettere componenti (115, 99, 104, 101, 100, 97, 32, 118, 105, 100, 101, 111) in dodici locazioni della memoria RAM della scheda video: sarà poi il generatore di caratteri del chip grafico a tradurre i codici in serie di pixel e fare tutto il resto.

Modalità grafica

Quasi tutte le schede video (con pochissime eccezioni) possono poi operare anche in modalità grafica, vale a dire senza avvalersi del generatore di caratteri interno ma specificando l'immagine pixel per pixel. In questa modalità il colore di ogni pixel è specificato singolarmente, in genere usando una o più locazioni di memoria video. Questa modalità ha bisogno di molta più memoria RAM del modo testo: una schermata in modo testo occupa generalmente da 2 a 6 KB di RAM video, mentre in modalità grafica, a seconda della risoluzione in pixel e della quantità di colori usati contemporaneamente serve da 10 a 1000 volte tanto. Il modo di rappresentare del singolo pixel in memoria video varia molto a seconda del tipo di approccio usato dal costruttore e dalla particolare modalità grafica: in genere però si adotta una corrispondenza di tipo bitmap, cioè a mappa di bit.

Schede video con accelerazione 2D

Già da un po' di tempo il chip grafico è in grado di eseguire alcune funzioni grafiche in modo autonomo, senza che il processore principale debba intervenire: le schede grafiche con questi chip sono dette 2D accelerate, perché possono svolgere da sole una parte del lavoro di disegno che altrimenti spetterebbe al processore. Le operazioni più comuni da implementare in hardware sono il tracciamento di linee, di archi e di forme geometriche semplici (rettangoli, poligoni, cerchi, ellissi) e il bit blitting, cioè lo spostamento da una parte all'altra dell'immagine di blocchi di pixel. È in genere presente anche un generatore di caratteri evoluto, capace di funzionare anche in modalità grafica e di visualizzare contemporaneamente caratteri di molti font e grandezze diverse.

Schede video con accelerazione 3D

Le schede video con capacità grafiche tridimensionali (o 3D accelerate) hanno le stesse capacità bidimensionali delle precedenti, e in più ne hanno una completamente nuova, la modalità 3D appunto, in cui i pixel dell'immagine da visualizzare vengono calcolati dalla GPU (Graphics Processing Unit), fotogramma per fotogramma, partendo da una serie di dati geometrici forniti dalla CPU.
In questa modalità, la RAM video contiene una serie di sottoimmagini, le texture. Ciascuna di queste viene associata ad una particolare superficie bidimensionale di un modello tridimensionale di cui ne costituisce la "pelle": volendo, si possono considerare le varie texture come delle carte da parati elettroniche. Per ogni fotogramma (frame) da visualizzare in modalità 3D, la scheda video riceve dal processore una serie di punti geometrici (vertici) che specificano delle superfici in uno spazio tridimensionale con l'indicazione di quali texture applicare alle varie superfici: la GPU si occupa di calcolare, a partire dai dati ricevuti, se la particolare superficie sia visibile o no, e, se visibile, la sua forma in due dimensioni (coordinate schermo); poi si occupa di applicare la (o le) texture indicate. Il valore di ogni pixel viene quindi calcolato a partire da quali e quanti texel (i pixel delle texture) sono contenuti in esso.
Per fare tutto questo, le schede video 3D accelerate sono equipaggiate con una grande quantità di RAM, e ricorrono in modo massiccio al calcolo parallelo: l'integrato principale è un vero e proprio processore e viene detto GPU.
Uscite video  Le connessioni più diffuse tra la scheda video e il monitor (o televisore) sono:
  • Video Graphics Array (VGA): standard analogico introdotto nel 1987 e progettato per monitor CRT, ma utilizzato, per compatibilità, anche da diversi monitor LCD, assieme all'interfaccia DVI; ha diversi problemi, come il rumore elettrico, la distorsione dell'immagine e alcuni errori nella valutazione dei pixel.
  • Digital Visual Interface (DVI): introdotto nei monitor LCD, viene usato anche da TV al plasma e videoproiettori. Risolve i problemi del SVGA facendo corrispondere a ogni pixel dell'output un pixel dello schermo, in quanto ne riconosce la risoluzione nativa.
  • S-Video: utilizzato per la connessione a TV, lettori DVD, proiettori e videoregistratori.
  • High-Definition Multimedia Interface (HDMI): rilasciato nel 2003, questo standard, che supporta le risoluzioni ad alta definizione, ha come obiettivo la sostituzione di tutti gli altri standard.
  • DisplayPort: rilasciato nel 2006, si presenta come concorrente dell HDMI. È usato sia per connessioni con monitor che con sistemi home theatre.
Altre uscite video (ormai obsolete) sono:
  • Video composito: uscita analogica con risoluzione molto bassa, che fa uso di un connettore RCA
  • Video a componenti: ha tre cavi, ognuno con un connettore RCA, utilizzato per i proiettori.


L’hard disk

Interno di un disco rigido

L'hard disk drive (termine di origine inglese), in sigla HDD, normalmente abbreviato in hard disk, raramente anche chiamato fixed disk drive (sinonimo sempre di origine inglese), in sigla FDD, anche chiamato disco rigido (traduzione letterale di "hard disk") o disco fisso (traduzione letterale di "fixed disk"), è una tipologia di dispositivo di memoria di massa che utilizza uno o più dischi magnetici per l'archiviazione dei dati.
Il disco rigido è una delle tipologie di dispositivi di memoria di massa attualmente più utilizzate. È infatti utilizzato nella maggior parte dei computer e anche in altre tipologie di dispositivi elettronici come ad esempio il PVR (Personal Video Recorder).
Il disco rigido ha da poco tempo un serio concorrente, il disco a stato solido, destinato probabilmente in futuro a soppiantarlo.

Descrizione

Il disco rigido è costituito fondamentalmente da uno o più dischi in rapida rotazione, realizzati in alluminio o vetro, rivestiti di materiale ferromagnetico e da due testine per ogni disco (una per lato), le quali, durante il funzionamento "volano" alla distanza di poche decine di nanometri dalla superficie del disco leggendo e scrivendo i dati. La testina è tenuta sollevata dall'aria mossa dalla rotazione stessa dei dischi che può superare i 15.000 giri al minuto; attualmente i valori standard di rotazione sono 5.200, 5.400, 7.200, 10.000 e 15.000 giri al minuto.
Coppia di testine posizionate all'estremità dei due braccetti mobili di lettura, mancando il disco, risultano a contatto una con l'altra

Storia

L'hard disk è stato inventato nel 1956 dall'IBM. Il primo prototipo era costituito da 50 dischi del diametro di 24 pollici (circa 60 cm) e poteva immagazzinare circa 5 megabyte di dati. Era grande quanto un frigorifero, con un peso di oltre una tonnellata. La denominazione originaria era fixed disk (disco fisso), il termine hard disk (disco rigido) nacque intorno al 1970 per contrapposizione coi neonati floppy disk (dischetti).
Nel 1963 sempre IBM ideò il meccanismo di sollevamento della testina mediante l'aria. Nel 1973 IBM introdusse il modello 3340 Winchester, così denominato per analogia con il popolare modello di fucile ".30-30 Winchester" poiché era dotato di due dischi da 30 MB l'uno; questo nome entrò nell'uso comune come sinonimo di disco rigido perché questo modello fu il predecessore di tutti i dischi rigidi moderni.

Caratteristiche prestazionali

I dischi rigidi moderni hanno velocità di lettura e scrittura dei dati, di diversi ordini di grandezza, al di sotto delle prestazioni della RAM. Per questo motivo il disco rigido è spesso la causa principale del rallentamento di un computer soprattutto quando, a causa di una memoria RAM inferiore alla memoria virtuale richiesta dai programmi in esecuzione, il sistema operativo è costretto ad effettuare un gran numero di operazioni di swap tra il disco e la memoria centrale.

Le caratteristiche principali di un disco rigido sono:
La capacità è in genere espressa in gigabyte (GB). La capacità può essere aumentata incrementando la densità con cui le informazioni vengono memorizzate sui piattelli che compongono l'harddisk o impiegandone un numero maggiore.
Il tempo di accesso è la variabile più importante nel determinare le prestazioni di un disco rigido. Si tratta del tempo medio necessario perché un dato, residente in un punto casuale del disco, possa essere reperito. Il tempo impiegato dipende dalla velocità della testina a spostarsi sulla traccia dove risiede il dato e dalla velocità di rotazione del disco; maggiore è la velocità e più breve è il tempo impiegato dal dato a ripassare sotto la testina nel caso questa non fosse arrivata in tempo sul dato, durante la rotazione precedente (latenza rotazionale). Il tempo di accesso tipico per un disco rigido da 7200 rpm è di circa 9 millisecondi. Per uno da 15.000 rpm è inferiore a 4 ms.
La velocità di trasferimento è la quantità di dati fornita dall'harddisk in un determinato tempo (in genere si prende 1 secondo come riferimento). Usare dischi che ruotino più velocemente o incrementare la densità di memorizzazione porta ad un miglioramento diretto della velocità di trasferimento. Va ricordato che la velocità di trasferimento cala in modo proporzionale al numero di discontinuità nei settori che compongono il file ricercato (vedi frammentazione (informatica)).

Oltre alle tre viste sopra, altre caratteristiche influenzano in misura minore le prestazioni di un disco rigido. Tra queste:
Il buffer è una piccola memoria cache (in genere di alcuni megabyte) posta a bordo del disco rigido, che ha il compito di memorizzare gli ultimi dati letti o scritti dal disco. Nel caso in cui un programma legga ripetutamente le stesse informazioni, queste possono essere reperite nel buffer invece che sul disco. Essendo il buffer un componente elettronico e non meccanico, la velocità di trasferimento è molto maggiore, nel tempo, la capacità di questa memoria è andata sempre aumentando, attualmente 32 MB sono una dimensione abbastanza usuale.
L' interfaccia di collegamento tra il disco rigido e la scheda madre (o, più specificatamente, il controller) può influenzare le prestazioni perché specifica la velocità massima alla quale le informazioni possono essere trasferite da o per il disco. Le moderne interfacce tipo ATA133, Serial ATA o SCSI possono trasferire centinaia di megabyte per secondo, molto più di quanto qualunque singolo disco fisso possa fare, e quindi l'interfaccia non è in genere un fattore limitante. Il discorso può cambiare nell'utilizzo di più dischi in configurazione RAID, nel qual caso è importante utilizzare l'interfaccia più veloce possibile, come per esempio la Fibre Channel da 2 Gb/s.

Organizzazione fisica della memorizzazione dei dati
Struttura della superficie di un piatto: A) Traccia, B) Settore, C) Settore di una traccia, D) Cluster, insieme di settori contigui

I dati sono generalmente memorizzati su disco seguendo uno schema di allocazione fisica ben definito in base al quale si può raggiungere la zona dove leggere/scrivere i dati sul disco. Uno dei più diffusi è il cosiddetto CHS acronimo per il termine inglese Cylinder/Head/Sector (Cilindro/Testina/Settore); in questa struttura i dati sono memorizzati avendo come indirizzo fisico un numero per ciascuna delle seguenti entità fisiche:

Piatto
un disco rigido si compone di uno o più dischi paralleli, di cui ogni superficie, detta "piatto" e identificata da un numero univoco, è destinata alla memorizzazione dei dati.
Traccia
ogni piatto si compone di numerosi anelli concentrici numerati, detti tracce, ciascuna identificata da un numero univoco.
Cilindro
l'insieme di tracce alla stessa distanza dal centro presenti su tutti i dischi è detto cilindro. Corrisponde a tutte le tracce aventi il medesimo numero, ma diverso piatto.
Settore
ogni piatto è suddiviso in settori circolari, ovvero in "spicchi" radiali uguali ciascuno identificato da un numero univoco.
Blocco
L'insieme di settori posti nella stessa posizione in tutti i piatti.
Testina
Su ogni piatto è presente una testina per accedere in scrittura o in lettura ai dati memorizzati sul piatto; la posizione di tale testina è solidale con tutte le altre sugli altri piatti. In altre parole, se una testina è posizionata sopra una traccia, tutte le testine saranno posizionate nel cilindro a cui la traccia appartiene.
Questa struttura introduce una geometria fisica del disco che consta in una serie di "coordinate" CHS, esprimibili indicando cilindro, testina, settore. In questo modo è possibile indirizzare univocamente ciascun blocco di dati presente sul disco. Ad esempio, se un disco rigido si compone di 2 dischi (o equivalentemente 4 piatti), 16384 cilindri (o equivalentemente 16.384 tracce per piatto) e 16 settori di 4096 byte per traccia, allora la capacità del disco sarà di 4×16384×16×4096 byte, ovvero 4 GB.

Struttura di un settore
Il settore è l'unità più piccola della formattazione di basso livello che riguarda la struttura fisica del disco rigido (formattazione fisica da non confondere con la formattazione logica che riguarda la creazione delle tabelle di allocazione dei file [FAT] necessarie al sistema operativo per gestire e navigare i dati presenti nelle cartelle del disco). Generalmente i settori sono raggruppati dal punto di vista logico in cluster per motivi di efficienza, quindi quando parliamo di cluster ci riferiamo a un gruppo di settori. Si ricordi che un file occupa sempre almeno un cluster. Per accedere a un settore bisogna specificare la superficie (platter), la traccia e il settore stesso. Il settore non è un semplice spazio sul disco memorizzabile, ed ha dimensione variabile tra 32 byte e 4 KB, solitamente 512 byte.
Superficie di un hard disk danneggiata dal crash di una testina. Notare, in basso a sinistra, le dimensioni di un granello di polvere.

Il suono emesso da un disco è composto da un sibilo continuo, generato dalla rotazione dei dischi e da un crepitio intermittente, di cui ogni clic corrisponde ad un movimento della testina. Anomalie nei suoni emessi dall'hard disk sono indicativi di severi danni meccanici,

Dischi IDE

L'interfaccia più comune è quella IDE (prima versione dello standard ATA), poi evolutasi in EIDE e Serial ATA. Un cavo piatto, solitamente grigio, è usato per connettere il disco rigido alla scheda madre. Spesso il cavo ha un terzo connettore per poter usare un altro disco (o altre periferiche ATA come i lettori cd) con lo stesso cavo. In tal caso, per poter distinguere tra le due periferiche, esse devono essere configurate una come master e una come slave.
Una scheda madre ha solitamente due connettori IDE (primario e secondario, detti spesso canali e impropriamente controller), ad ognuno dei quali è possibile connettere due unità per un totale di quattro periferiche. Non mancano schede madri con quattro connettori. Il cavo IDE non porta l'alimentazione elettrica necessaria per il funzionamento delle periferiche, che quindi devono essere connesse all'alimentatore per mezzo di un cavo separato.
Tipicamente, un personal computer ha un disco fisso come master sul canale IDE primario, ma a seconda del sistema operativo utilizzato esso può risiedere su una qualunque interfaccia IDE.

Dischi Serial ATA

Hard disk con connettore Serial ATA (il secondo da sinistra)
Negli ultimi anni con l'evoluzione delle periferiche di memorizzazione l'interfaccia ATA ha mostrato i suoi limiti tecnologici e quindi è stata sostituita da una nuova versione chiamata serial ATA. Questa nuova interfaccia ha come principale caratteristica quella di trasmettere i dati in modo seriale e quindi invece di utilizzare molteplici fili per trasmettere i dati ne utilizza solo due, uno per trasmettere i dati e uno per ricevere, oltre a due fili per le masse. In realtà il cavo è a sette fili dato che lo standard utilizza anche alcuni fili come segnali di controllo.

La scheda madre

La scheda madre, anche conosciuta come motherboard o mainboard (sinonimi mutuati dall'inglese), in sigla MB, è una parte fondamentale di un moderno personal computer: raccoglie in sé tutta la circuiteria elettronica di interfaccia fra i vari componenti principali e fra questi e i bus di espansione e le interfacce verso l'esterno. È responsabile della trasmissione e temporizzazione corretta di molte centinaia di segnali diversi, tutti ad alta frequenza e tutti sensibili ai disturbi: per questo la sua buona realizzazione è un fattore chiave per la qualità e l'affidabilità dell'intero computer.

Descrizione
È composta di un circuito stampato estremamente complesso, ricavato da un sandwich di strati di vetronite e rame: generalmente una scheda madre può avere da quattro a sei strati di rame. In questi sono ricavate le piste che collegano i componenti, che devono essere calcolate con molta cura: alle frequenze normalmente adoperate dalle CPU e dalle memorie RAM in uso oggi, infatti, la trasmissione dei segnali elettrici non si può più considerare istantanea ma deve tenere conto dell'impedenza propria della pista di rame e delle impedenze di ingresso e di uscita dei componenti connessi, che influenzano il tempo di volo dei segnali da un punto all'altro del circuito.
Su questo circuito stampato vengono saldati una serie di circuiti integrati, di zoccoli e di connettori; gli integrati più importanti sono il chipset che svolge la gran parte del lavoro di interfaccia fra i componenti principali e i bus di espansione, la ROM (o PROM, EEPROM o simile) il Socket per il processore e i connettori necessari per il montaggio degli altri componenti del PC e delle schede di espansione. La struttura attuale delle schede di sistema dei computer è il frutto di un'evoluzione tecnologica che ha portato a definire una architettura di sistema valida, in linea di massima, per tutti i sistemi di classe personal computer o di potenza paragonabile.

Parti di una scheda madre
I componenti di una scheda madre possono variare molto a seconda di che tipo di computer si sta considerando: nel seguito di questa descrizione faremo riferimento a una generica scheda madre per personal computer.
CPU Socket: è uno zoccolo ZIF (Zero Insertion Force) che accoglie la CPU. Nelle schede embedded (o in quelle vecchie e molto economiche) è assente, e il processore è saldato direttamente sullo stampato.
La ROM (può essere PROM, EEPROM, flash o altro) che contiene il BIOS della scheda madre; è un tipo di firmware dalle funzionalità molto limitate. Le sue funzioni sono essenzialmente tre: eseguire il controllo dell'hardware all'accensione (il POST, Power On Self Test), caricare il sistema operativo e mettere a disposizione di questi alcune primitive (routine software) per il controllo dell'hardware stesso.
Northbridge: un circuito integrato che connette il processore con la memoria RAM e con i bus di espansione principali (PCI, PCI express e AGP); i modelli più recenti incorporano anche le interfacce ATA e/o SATA per gli hard disk, che sono i componenti più critici per le prestazioni di un personal computer. È l'elemento più importante del chipset e il suo buon funzionamento è cruciale per la stabilità e la velocità della macchina.
Southbridge: è il secondo componente del chipset e il suo compito è quello di gestire tutte le interfacce a bassa velocità: è connesso al north bridge tramite il bus di espansione e gestisce le porte seriali e parallele, l'interfaccia per la tastiera e il mouse, l'interfaccia Ethernet, le porte USB e il bus SMB.
Una batteria al litio in grado di alimentare per anni l'orologio di sistema e una piccola quantità di memoria RAM in tecnologia CMOS in cui il BIOS memorizza alcuni parametri di configurazione dell'hardware.
Gli slot d'alloggiamento della Memoria RAM (Random Access Memory) che possono essere di diversi tipi quanti sono i tipi di RAM diffusi dalle industrie sin dai primi anni ottanta.
Il bus di espansione. Si tratta di un collegamento dati generico punto-multipunto, progettato per permettere di collegare alla scheda madre delle altre schede di espansione alloggiate su connettori (slot), che ne estendono le capacità. Attualmente il tipo di bus più diffuso è il bus PCI, destinato nel tempo a lasciare strada alla sua estensione PCI Express, più veloce e più semplice elettricamente. In linea di principio ad un bus può essere collegato hardware di ogni tipo: schede video aggiuntive, schede audio professionali, schede acquisizione dati, unità di calcolo specializzate, coprocessori: nella pratica si ricorre ad una scheda di espansione su slot interno solo per hardware che ha bisogno di una collaborazione estremamente stretta con la CPU o con la memoria RAM; per le espansioni hardware meno critiche si sfruttano le connessioni "lente" (USB, seriali ecc.). Fa parte del bus PCI anche lo slot AGP, dedicato alla scheda video, che è uno slot PCI dotato di alcuni comandi aggiuntivi separati e di una trasmissione dati privilegiata; anche le interfacce AGP sono destinate ad essere sostituite dagli slot PCI Express, perfettamente in grado di fare da ponte fra la scheda grafica e il resto del sistema.
Una serie di interfacce standard: seriali RS232, parallela Centronics, PS/2 per mouse e tastiera, USB per altri dispositivi; sono solitamente tutte raggruppate sul lato posteriore alto della scheda madre.
Interfacce Shugart, ATA, SATA e/o SCSI per la gestione delle unità a disco (Disco rigido, CD e DVD).
In molte schede madri, specie se compatte, possono essere incluse la scheda video, la scheda audio, interfacce di rete Ethernet e porte Firewire e USB.


L’avvio del pc

Il termine di origine inglese boot (o bootstrap, o più raramente booting) indica, in generale, i processi che vengono eseguiti da un computer durante la fase di avvio, dall'accensione fino al completato caricamento del sistema operativo. .

Note terminologiche
Il termine originale inglese è bootstrap (la fascetta di cuoio cucita sul bordo posteriore degli stivali per aiutarsi a calzarli), da cui la contrazione boot (e termini derivati come booting e reboot), e fa riferimento alla leggenda del Barone di Münchhausen e alla sua capacità di sollevarsi in aria "tirandosi per gli stivali". Esiste il modo di dire inglese pull yourself up by your bootstraps (tirati su da solo prendendoti per le stringhe degli stivali), che significa "datti da fare da solo per tirarti fuori dai guai, senza aspettare l'aiuto di altri".
L'analogia è con il fatto (solo apparentemente paradossale) che, durante il bootstrap, il computer esegue un determinato processo allo scopo di mettersi in condizione di operare (eseguire processi). In italiano si può rendere questo concetto anche come "avvio" ("riavvio"), sebbene questi termini (come i loro corrispondenti diretti inglese "start" e "restart") abbiano generalmente una connotazione meno tecnica.
Dalle espressioni boot e bootstrap anche in italiano sono derivati alcuni termini di gergo informatico come il verbo bootare (o boottare) o l'aggettivo bootabile (o boottabile) che si riferisce a un supporto di memorizzazione (per esempio un CD o un altro genere di disco) dal quale sia possibile caricare il sistema operativo all'avvio del computer (e quindi completare il boot).

Struttura del processo di bootstrap
All'accensione di un computer il processore resta inizialmente sospeso nello stato di RESET dall'hardware, che tiene attivo il corrispondente ingresso della CPU finché le tensioni di alimentazione non sono stabili. Appena il segnale di RESET viene disattivato il processore carica la sua prima istruzione da una locazione fissa del suo spazio di memoria, a cui di solito corrisponde una ROM o altra memoria non volatile che porta l'esecuzione al vero inizio del programma di firmware (o del BIOS, se si tratta di un personal IBM compatibile) che poi prende il controllo del computer.

Bootstrap di un PC IBM
I passi compiuti dal BIOS sono:
 - il POST (Power On Self Test), una serie di test diagnostici per verificare il corretto funzionamento dell'hardware della scheda madre: se tutti i dispositivi controllati sono funzionanti emette un "beep" dall'altoparlantino di sistema e prosegue, ma se uno o più dispositivi fra quelli testati non funzionano, l'altoparlante emetterà una serie di bip, lunghi o corti, in numero variabile secondo un codice ben preciso che indica la periferica guasta e il tipo di problema riscontrato.
 - cerca una scheda video installata, prima di tutto quella che secondo i suoi dati interni dovrebbe essere presente, ed esegue il POST video che si trova nella ROM interna della scheda video
 - cerca eventuali ROM di altri dispositivi installati e ne esegue le routine POST
 - esegue altri test, come il conteggio della memoria e lo stato della tastiera. Se incontra degli errori, non ricorre al codice sonoro dei bip ma (ora può farlo) mostra un messaggio a video
 - mostra a video una schermata di presentazione, con alcuni dati sull'hardware di quel particolare computer
 - compila l'inventario completo del tipo di hardware installato e delle capacità riscontrate: registra i timing della memoria, i parametri fisici dei dischi rigidi e i modi di accesso che questi supportano, le porte seriali e parallele e le loro velocità, se hanno una FIFO o no, eccetera
 - (se il BIOS supporta il Plug and Play) configura automaticamente i dispositivi Plug and Play presenti e mostra un messaggio a video per ciascuno di essi
 - si interfaccia con la memoria CMOS, contenente i parametri di configurazione suscettibili di modifica, ed esegue le relative istruzioni dopo averne verificato l'integrità attraverso un algoritmo di checksum
 - finalmente, cerca una unità a disco da cui caricare il sistema operativo. Se c'è, carica in RAM, all'indirizzo 0000:7C00, il primo settore del disco (cilindro 0, testina 0, settore 1), che corrisponde al master boot record (MBR) e l'esecuzione continua da lì.
 - da questo punto in poi il processo di bootstrap dipende dal particolare sistema operativo installato.

Il Reboot
L'espressione derivata 'Reboot' (analoga a "riavviare") si riferisce alla sequenza di spegnimento e riavvio del computer, di solito per installazioni di software di sistema o per riparare a gravi errori hardware o software che hanno compromesso la stabilità o le prestazioni della macchina.
Il reboot può essere effettuato in tre modi:
 - spegnimento e riaccensione fisici (interruzione e ripristino della alimentazione elettrica). Chiamato hard reboot, è pericoloso sia per l'integrità dei dati che per quella dell'hardware e non dovrebbe mai essere effettuato se non in casi estremi;
 - pressione del tasto di reset, che attiva il segnale di reset della CPU. Anche questo è un hard reboot ed anche questa è una operazione sconsigliabile, perché può creare perdite di dati, ma non presenta rischi per l'hardware. L'intera sequenza di operazioni di bootstrap del BIOS e del sistema operativo riparte da capo, tuttavia è possibile che alcuni dispositivi già in condizioni di errore prima del reset non rispondano al BIOS durante l'inizializzazione, costringendo ad uno spegnimento fisico della macchina.
 - riavvio con combinazioni di tasti (p.e. su PC, nella piattaforma di Windows, attraverso la combinazione dei tasti Ctrl+Alt+Del, o nei sistemi UNIX Ctrl+Alt+SysReq+B) chiamato soft reboot: a differenza del boot completo, nel soft reboot non viene eseguito il POST e la ricerca di tastiera e video, ma il processo riparte dall’inventario dell'hardware.

TERZA PARTE

Il sistema operativo


Cos'è un sistema operativo
Un Sistema operativo è un software che fornisce all'utente una serie di comandi e servizi per fruire al meglio della potenza di calcolo di un qualsivoglia elaboratore elettronico, spaziando dal più piccolo dei palmari al più potente tra i Mainframe. I Sistemi Operativi nascondono tutti i dettagli tecnici legati allo specifico hardware e architettura rappresentando le informazioni ad un alto livello, meglio comprensibile dall'uomo.

Prima dei Sistemi Operativi
In un periodo delimitabile tra il 1945 e il 1955 gli elaboratori elettronici erano ammassi di valvole termoioniche, occupavano intere stanze, erano lentissimi e così costosi che potevano permetterseli soltanto grossi centri di calcolo o Università. Inoltre questi calcolatori erano molto inaffidabili, in quanto le valvole che li componevano si rompevano spesso. In questo periodo non esisteva ancora il concetto di Sistema Operativo; infatti il programma da eseguire veniva inserito ad ogni esecuzione in codice binario attraverso dei primitivi lettori di schede perforate e dopo alcune ore il risultato veniva inviato ad una stampante.

I primi Sistemi Operativi (anni '50)
Tra il 1955 e il 1965, grazie alla rivoluzionaria invenzione del transistor gli elaboratori (chiamati Mainframe) divennero abbastanza affidabili da poter essere costruiti e venduti in serie, anche se erano comunque macchine grosse e costosissime tanto che gli unici acquirenti possibili erano ancora una volta i Centri di Calcolo, le Università e le banche. Per eseguire dei programmi (o come venivano chiamati, job), un programmatore doveva scrivere il proprio programma su carta, trasferirlo su schede, caricarlo nel computer, attendere il termine dell'esecuzione e la stampa del risultato. Tale operazione era molto dispendiosa in termini di tempo Per questo motivo venne utilizzato il sistema di dividere le tre operazioni tipiche, ovvero il caricamento dei dati, il calcolo e la stampa su macchine distinte. Il calcolo veniva affidato ad un calcolatore centrale costoso come l'IBM 7094 mentre gli elaboratori satelliti erano macchine più economiche come gli IBM 1401. Il Sistema Operativo di questi Mainframe doveva erogare pochi semplici servizi: gestione dell'input/output, interpretazione dei comandi contenuti nelle schede controllo e controllo dell'esecuzione di programmi, sia quelli lanciati dall'utente, sia le utilità di sistema. I sistemi operativi tipici per questi elaboratori, per lo più programmati in FORTRAN e in Assembler erano il FMS (Fortran Monitor System) e l'IBSYS. Dai primi anni '60 cominciò a farsi strada il concetto di dispositivo virtuale e astrazione. Prima di ciò un programmatore che avesse voluto comandare ad esempio una stampante, doveva conoscere, nei minimi dettagli, il funzionamento a basso livello della periferica, mentre a partire dall'introduzione del concetto di periferica virtuale il Sistema Operativo avrebbe fatto da intermediario tra utente e periferica.


L'IBM System/360
Nell'aprile del '64 l'IBM presentò una famiglia di computer chiamata IBM System/360, prima realizzazione di una netta distinzione tra architettura hardware e implementazione. Tutti gli elaboratori della suite, che andavano da piccole macchine a grandi Mainframe utilizzavano varianti dello stesso Sistema Operativo, l'OS/360, che supportava sia il calcolo scientifico che quello commerciale. Tuttavia questa eccessiva diversificazione tra i diversi computer rese difficile scrivere codice efficiente che rispettasse tutti i requisiti che erano in conflitto tra di loro. Il risultato fu un Sistema Operativo enorme e molto complesso scritto da migliaia di programmatori. OS/360 conteneva centinaia di errori che resero necessarie diverse revisioni. Ogni nuova versione correggeva alcuni problemi, introducendone però degli altri. Un esauriente rapporto sull'esperienza con OS/360 è descritto da Fred Brooks sul suo saggio sull'Ingegneria del Software intitolato "The Mythical Man-Month: Essays on Software Engineering". In questo e in molti altri Sistemi Operativi dell'epoca venne implementata la multiprogrammazione, che rendeva possibile la presenza di più programmi in memoria contemporaneamente. Questo rendeva necessaria la presenza di hardware specializzato per proteggere i programmi dalle reciproche interferenze. Quando un job in esecuzione aveva bisogno di effettuare una operazione di I/O il Sistema Operativo lo sospendeva e al suo posto faceva girare un altro job. Quando l'operazione di I/O si concludeva il primo job tornava pronto all'esecuzione e attendeva il suo turno attendendo la sospensione di uno degli altri. Questi sistemi ottimizzavano l'uso delle risorse disponibili ma non lo sviluppo dei programmi, infatti il tempo che intercorreva tra il caricamento dei programmi e la disponibilità dei risultati era spesso di alcune ore, per cui il più piccolo errore poteva far perdere al programmatore un sacco di tempo.

La nascita di Unix
Dagli anni sessanta esiste il concetto di timesharing: ogni utente dispone di un dispositivo di ingresso (la tastiera) e un dispositivo di uscita (un monitor o una telescrivente), ed ha la possibilità di inviare comandi al Sistema Operativo ottenendo subito una risposta. Infatti in questi sistemi con timesharing un programma resta in esecuzione fino a quando esso richiede un'operazione di I/O, oppure occupa la CPU per più di un certo intervallo di tempo prestabilito (detto quanto temporale).
Nel 1962 venne realizzato al MIT il primo sistema di timesharing su un IBM 7094: il CTSS. Fu in realtà il MULTICS la vera rivoluzione. Venne sviluppato congiuntamente dal MIT, dalla General Electric e dai Bell Labs, ed era in grado di supportare centinaia di utenti in timesharing. La realizzazione fu però molto più complessa del previsto, tanto che i Bell Labs abbandonarono il progetto. Tuttavia Multics introdusse molte nuove idee che influenzarono non poco i successivi Sistemi Operativi. Se da un lato esistevano questi supercomputer dall'altro negli stessi anni vi fu lo sviluppo dei minielaboratori, dei quali un importante esponente fu il PDP-1 del 1961 che costava solo 120.000$ (cioè il 5% del prezzo di un IBM 7094) e che ebbe un gran successo. Per questi sistemi vennero progettati appositi Sistemi Operativi, il più famoso dei quali fu senza dubbio UNIX.
UNIX fu progettato a partire dal 1969 da un gruppo di ricercatori della AT&T presso i Bell Labs, tra cui erano presenti Ken Thompson (che lavorò anche al progetto Multics), Dennis Ritchie e Douglas McIlroy. Esso prese notevole spunto dal padre Multics, e grazie all'ottimo lavoro di queste persone divenne un sistema molto interattivo, affidabile e ricco di funzionalità, tanto che, nelle sue varianti ed evoluzioni, tuttora domina il mercato delle workstation. Da esso furono realizzate varianti come BSD (Berkley Software Distribution) e sistemi Unix-like come Minix (usato in ambito didattico) e successivamente l'ormai famosissimo Linux sviluppato dallo studente finlandese Linus Torvalds. Oggigiorno i sistemi operativi *NIX sono conformi allo standard POSIX (che uniforma l'interprete dei comandi e le API dei programmi), offrendo una compatibilità reciproca di base necessaria a non stroncarne lo sviluppo.
L'arrivo del Personal Computer (anni '80)
Verso gli anni '80 grazie alla tecnologia LSI (large scale integration) la costruzione di chip integrati divenne massiccia e portò all'abbattimento dei prezzi dell'hardware, facendo sorgere l'era dell'elaboratore personale o Personal Computer. Queste macchine erano piccole, economiche ed avevano prestazioni simili a quelle dei calcolatori medio-grandi di 10-20 anni prima. I primi modelli erano dotati di Sistemi Operativi monoutente con accesso interattivo e supporto al timesharing. Il più importante tra i primi Sistemi Operativi per Personal computer era il CP/M-80 della Digital Research per le CPU 8080 / 8085 / Z-80. Era basato sui Sistemi Operativi della Digital Equipment Corporation specialmente quelli per l'architettura PDP-1. MS-DOS (o PC-DOS quando fornito da IBM) era originariamente basato proprio sul CP/M-80.

Microsoft vs. Apple
Steve Jobs era uno dei pochi che credeva nell'idea del Personal Computer. All'epoca era difficile immaginare cosa potesse farsene una persona di un computer in casa. Egli invece continuò per la sua strada fondando Apple Computer Inc. il 1° Aprile 1976 assieme a Steve Wozniak e Ronald Wayne. Jobs era convinto che il futuro del Personal Computer sarebbe stato legato all'interfaccia grafica. E così, ispirandosi a quella sviluppata da Xerox qualche anno prima, Apple lanciò nel 1984 Mac OS il primo sistema operativo per Personal Computer con interfaccia grafica. Questa fu una vera rivoluzione tanto che di lì a poco Microsoft avrebbe commercializzato Windows (20 novembre 1985) e sarebbe nato l'X Window System in ambiente Unix (1984). All'inizio Windows non era definibile Sistema Operativo: era piuttosto un'estensione di MS-DOS. Fu con il rilascio di Windows 3.0, nel 1990, che Microsoft si impose sul mercato. Oltre alle maggiori performance che garantiva alle applicazioni rispetto alle versioni precedenti, Windows 3.0 forniva un ambiente multitasking migliorato rispetto alle precedenti versioni di MS-DOS, grazie all'introduzione del supporto alla memoria virtuale, e divenne così un degno rivale del Macintosh (su cui girava Mac OS) di Apple. A partire da Windows 3.1 fu introdotto il supporto alla multimedialità (perfezionato via via nelle successive release), mentre con l'introduzione di Windows 95 si passò definitivamente dal calcolo a 16 bit a quello a 32 bit.

I sistemi operativi di rete e il fenomeno Linux
A fianco di Microsoft ed Apple il mercato delle workstation e dei grandi elaboratori era comunque dominato da UNIX. Un fenomeno interessante che iniziò a prendere piede da metà degli anni '80 fu lo sviluppo delle reti di calcolatori, fenomeno che ha poi portato all'incredibile crescita di Internet. Nacquero così i Sistemi Operativi di rete e i Sistemi Operativi distribuiti.
I primi altro non sono che normali Sistemi Operativi ai quali vengono aggiunti i software per il collegamento a macchine remote e quindi alle relative risorse condivise come file e stampanti. I secondi sono Sistemi Operativi che girano su sistemi a più processori oppure che inviano i processi da elaborare ad altri computer della rete. Essi sono dotati di particolari politiche di scheduling che permettono una efficace allocazione dei processi tra le CPU disponibili. Inoltre anche il sistema di archiviazione (il file system) è unico, anche se in realtà è distribuito tra vari nodi della rete.
Esempi della prima classe di sistemi di rete sono tutte le versioni di Windows dalla 3.1 e NT in poi, mentre UNIX e derivati fanno parte di entrambe le categorie in quanto supportano entrambe le tecnologie.
Nel 1991 Linus Torvalds sviluppò un kernel Unix-like, capace però di girare sulla piattaforma x86. Così nacque Linux. Fu quando venne abbinato al Progetto GNU di Richard Stallman, portavoce della filosofia del Software Libero, che iniziò la fortuna di Linux in quanto la combinazione risultava, e lo è tuttora, un sistema operativo efficiente ed affidabile.

I giorni nostri
Oggigiorno è disponibile una grande varietà di sistemi di elaborazione dalle più disparate dimensioni e performance a costi contenuti; questo permette una diffusione pervasiva degli elaboratori elettronici nelle più diverse attività umane. Inoltre sono oggi sempre più diffuse le interconnessioni tra i vari dispositivi in modalità sia wired che wireless. Tutte queste innovazioni hanno portato allo sviluppo di sistemi operativi per le più svariate architetture, in particolare per dispositivi handheld come cellulari (tra i quali non si può non citare il Symbian OS) e PDA (con Windows Mobile e Palm OS).
Per qualunque architettura venga sviluppato un Sistema Operativo moderno esso deve fornire il supporto, oltre a quanto visto sinora, a molteplici esigenze quali:
Streaming audio/video (trasmissione ed elaborazione continua di dati multimediali)
supporto alle più diverse tecnologie di interconnessione (ad esempio Ethernet, Bluetooth e Wireless LAN)
integrazione di tecnologie per la fruizione di contenuti su Internet
una efficiente gestione dell'energia.
La linea di sviluppo dei sistemi operativi moderni per il mercato consumer è principalmente incentrato su multimedialità, connettività e risparmio energetico.