Unix R. Giulia, M. Maddalena, M. Niccolò, B. Giacomo Sommario • la Storia • gli Ideatori • le Caratteristiche • Linux • • • • • Informazioni Generali la Storia le Caratteristiche la Gestione dei File gli Utenti • • • Che cos’è un linguaggio di programmazione? il Linguaggio C le Caratteristiche • il Linguaggio di Programmazione C la Storia Le origini di Unix risalgono alla metà degli anni 1960 quando AT&T, Honeywell, General Electric e il Massachusetts Institute of Technology attivarono nei Bell Laboratories il progetto MULTICS, finanziato dall’Agenzia dei Progetti di Ricerca Avanzata del Dipartimento della Difesa (ARPA). Multics fu progettato per garantire la Sicurezza Militare, esso infatti supportava il concetto di Sicurezza Multilivello: era infatti diviso in vari livelli (Massimo Segreto, Segreto, Confidenziale e Informazione Non Classificata) ed era in grado di evitare che le informazioni appartenenti ad un livello potessero finire nelle mani di un utente di un altro livello. Nel 1969 il progetto era però molto indietro rispetto al programma e fu quindi abbandonato dalla direzione dei Bell Laboratories. Ken Thompson e Dennis Ritchie, due dipendenti dell’AT&T, erano in disaccordo con questa decisione e, continuando a credere nella loro idea, rilevarono un computer PDP-7 e proseguirono in proprio il loro progetto. Questo nuovo progetto venne chiamato Unix, per sottolineare la relativa semplicità che lo differenziava dal precedente Multics. Il sistema era formato da diversi programmi compatti, chiamati Tools, ognuno dei quali eseguiva una specifica funzione. L’uso combinato di questi programmi permetteva di risolvere problemi complessi. la Storia Nel 1973 Thompson riscrisse la maggior parte di Unix in C, il linguaggio di programmazione appena inventato da Ritchie. Grazie a questo, i programmi potevano essere spostati con estrema facilità da un computer all’altro. Rimaneva comunque il problema che ogni sistema gestiva le Input/Output in modo diverso, temporaneamente risolto dalla libreria portabile di Input/Output sviluppata da Mike Lesk. Nel 1978 Unix venne installato sul nuovo minicomputer VAX e, pur essendo un sistema operativo ancora sperimentale, divenne popolare in diverse università e venne commercializzato da diverse aziende. Unix si era prevalentemente diffuso nelle università, come ad esempio nella Berkeley in California, la quale pagò anche per avere un nastro contenente il codice sorgente del programma. Invece di limitarsi ad utilizzare Unix, Bill Joy e Chuck Haley, due studenti laureati alla Berkeley, avviarono la realizzazione di importanti modifiche e, nel 1978, realizzarono il BSD (Berkeley Software Distribuition), ovvero una collezione di programmi e modifiche del sistema Unix, grazie anche al sostegno finanziario di ARPA. la Storia Col passare degli anni BSD UNIX e AT&T UNIX divennero sistemi operativi ben distinti, ognuno con caratteristiche proprie. L’innovazione più importante su BSD fu il software di rete BSD UNIX 4.2, con il quale si poterono facilmente connettere in lan vari computer tra loro. Intanto AT&T creò lo Unix Support Group (USG), che continuò lo sviluppo di Unix e inaugurò la nuova versione di AT&T UNIX, la System V. Unix ottenne sempre più interesse da parte delle grandi compagnie e, ai primi due competitori (AT&T e BSD), si aggiunsero ben presto anche Sun Microsystems (che immise nel mercato SunOS, sistema operativo basato su BSD 4.1) e Digital Equipment Corporation (che iniziò lo sviluppo di ULTRIX, partendo da BSD 4.2). Le compagnie che entravano nel mercato Unix dovevano decidere lo standard da adottare: da una parte Berkeley Unix e dall’altra AT&T System V. Basate su quest’ultimo, nacquero diverse versioni di Data General, IBM, Hewlett Packard e Silicon Graphics. Una terza versione di Unix, chiamata Xenix, fu sviluppata dalla Microsoft agli inizi degli anni 1980, basata anch’essa su Unix System V. la Storia Dalla fusione di Xenix e UNIX System V nacque il nuovo Unix System V/ 386 Release 3.12, , rilasciato nell’agosto del 1988. Nello stesso anno nasce anche System V Release 4 (SVR4), nata dalla fusione delle versioni di AT&T e Sun Microsystems. A questo punto Sun dichiara di voler abbandonare SunOS per dedicarsi al nuovo sistema operativo che chiamerà Solaris. Per non essere tagliate fuori dal mercato Unix, le compagnie escluse dai precedenti accordi (tra cui Apollo Computer, Digital Equipment Corporation, Hewlett Packard, IBM e altre) decisero di fondare, nel maggio 1988, una società, la Open Software Foundation (OSF), il cui scopo dichiarato era strappare il controllo di Unix ad AT&T e metterlo nelle mani di una coalizione no-profit. OSF decise di basare la propria versione di Unix su AIX ma, essendo di molto in ritardo sul programma, alcune compagnie uscirono dalla società o crearono una versione in proprio (per esempio AIX di IBM). Nel 1993 AT&T decise di vendere tutti i diritti di Unix a Novell (un’azienda statunitense che opera nel settore della produzione di software), la quale creò UnixWare, un sistema che integrava la tecnologia alla base di NetWare. la Storia UnixWare si trovò poi a dover competere con Windows, il sistema operativo della Microsoft, ma essendo mancante di un supporto commerciale valido perse la lunga battaglia. Nel frattempo nacque Linux, un sistema operativo simile a Unix. Fu creato per hobby da Linus Torvalds e si colloca nell’area dei free software. Nel 1983 Richard Stallman lancia un progetto per creare GNU, un clone di Unix che fosse un software libero, ossia garantisse completa libertà di utilizzo e modifica da parte di utenti e sviluppatori. Tale sistema ebbe un notevole successo soprattutto in ambito server, ma anche per quanto riguarda i netbook e i personal computer. Unix resta ancora molto popolare nelle comunità di ricerca grazie all’apertura e alla flessibilità che lo caratterizzano. Inoltre l’utilizzo di questo sistema operativo si sta estendendo anche alle comunità commerciali. Nonostante la grande varietà di sistemi Unix, è nato un nuovo set standard che include interfacce, librerie e caratteristiche di comportamento comuni, chiamato Posix. gli Ideatori Ken Thompson, nato a New Orleans il 4 febbraio 1943, è un programmatore e hacker statunitense. E’ considerato un pioniere dell’informatica moderna ed è principalmente conosciuto per essere stato uno dei primi creatori del sistema operativo Unix e per aver scritto il linguaggio di programmazione B. Dennis MacAlistair Ritchie, nato a Bronxville il 9 settembre 1941 e morto a Murray Hill il 12 ottobre 2011, è stato un programmatore statunitense. E’ considerato un pioniere dell’informatica moderna ed è principalmente conosciuto per essere stato uno dei primi creatori del sistema operativo Unix e per aver scritto il linguaggio di programmazione C. gli Ideatori William N. Joy, nato l’8 novembre 1954, è un informatico statunitense. È considerato il padre di Solaris, il sistema operativo certificato come versione di Unix, ed ha attivamente preso parte allo sviluppo come principale programmatore del BSD UNIX. Linus Benedict Torvalds, nato ad Helsinki il 28 dicembre 1969, è un programmatore e informatico finlandese conosciuto soprattutto per essere stato l’autore della prima versione del sistema operativo Linux. Richard Matthew Stallman, nato a New York il 16 marzo 1953, è un programmatore, informatico ed attivista statunitense. È uno dei principali esponenti del software libero e nel settembre del 1983 diede avvio al progetto GNU. le Caratteristiche Il Sistema Operativo Unix può essere riassunto in base alle seguenti caratteristiche: • Multiutente: più utenti possono interagire contemporaneamente (da terminali diversi) con il sistema, che evita interferenze tra le attività dei vari utenti. All’interno del sistema ogni utente è individuato univocamente da un nome logico (lo usename). Inoltre, gli utenti sono suddivisi in gruppi, ciascuno individuabile univocamente mediante il suo nome (il groupname). In ogni sistema è definito l’utente root, che rappresenta l’amministratore del sistema, e che, in generale, non ha alcuna limitazione nell’accesso alle risorse del sistema stesso; • Multiprogrammato (multitasking): il suo nucleo può supportare la contemporanea esecuzione di più processi gestiti a divisione di tempo; • Gestione della memoria virtuale: il sistema di gestione della memoria in Unix si basa su paginazione e segmentazione. Queste caratteristiche consentono ad ogni processo di indirizzare un’area di memoria di dimensioni eventualmente superiori a quelle della memoria centrale effettivamente disponibile; le Caratteristiche • Portabile: grazie all’impiego del linguaggio C nella realizzazione del sistema, esso gode di un’elevata portabilità, ed è oggi disponibile su una vasta gamma di architetture; • Aperto: soprattutto nelle versioni più recenti le caratteristiche di Unix si sono via via uniformate allo standard POSIX (Portable Operating System Interface for Unix). Inoltre, Unix realizza alcuni dei più diffusi servizi e protocolli di comunicazione della rete Internet, rendendo possibile una facile integrazione di sistemi Unix all’interno di una rete; • Ambiente di sviluppo per programmi scritti in “C”: Unix mantiene tuttora uno stretto legame con il linguaggio di programmazione “C”. Questa relazione si manifesta anche nella disponibilità all’interno delle utilità di sistema di un insieme piuttosto ricco di strumenti per lo sviluppo di applicazione in “C” (tra i quali il compilatore cc). Linux Informazioni Generali Linux è un sistema operativo di tipo Unix, con il quale, per essere precisi, si indica solo il kernel, cioè il nucleo centrale del sistema operativo: si occupa della gestione della memoria, dei processi e del controllo dell'hardware e, essenzialmente, permette a tutti gli altri programmi di girare. Non è possibile utilizzare Linux da solo poiché è un kernel, quindi, è normalmente utilizzato in combinazione con il sistema operativo GNU. Ciò che rende Linux diverso dagli altri sistemi è il fatto di essere cresciuto grazie all'aiuto di molti ed eterogenei gruppi di programmatori UNIX ed esperti di Sistemi Operativi che hanno messo a disposizione il codice da loro prodotto, gratuitamente. Questa eterogeneità' si riferisce sia alle competenze tecniche e al settore di provenienza che alla dislocazione geografica. Affinché' queste comunità di programmatori potessero lavorare insieme era necessario un efficiente strumento di comunicazione. Lo strumento fu Internet ed essendo Linux il sistema operativo scelto da queste persone, significa che gli strumenti e le utility necessarie ad utilizzare la rete furono tra le prime a comparire. Linux la Storia La prima versione del kernel Linux è stata messa a disposizione su Internet da Linus Torvalds nel settembre del 1991. Da allora Linux è stato sviluppato a un ritmo impressionante da migliaia di programmatori in tutto il mondo. Una delle principali ragioni per cui Linux ha potuto essere sviluppato così rapidamente sta sia nelle nuove possibilità di comunicazione che Internet ha reso disponibile a tutti, sia nel software che era già reperibile gratuitamente a quell'epoca. Linux non è nato dal nulla, ma è basato su un'ampia piattaforma di software libero: tutto iniziò nel 1985 quando Richard Stallman, ex ricercatore del MIT, fondò la Free Software Foundation (FSF), finanziata per donazioni, alla cui base c'era il progetto GNU, che ambiva alla realizzazione di un sistema operativo free. Il software free, rilasciato con la GNU General Public Licence (GPL), in questo contesto, implica: • Ridistribuzione libera del software e del codice • Codice sorgente aperto e disponibile per lettura, modifiche, analisi, controllo • Prodotti derivati da prodotti GPL devono avere licenza GPL • Copyright dell'autore Linux Le Caratteristiche Attualmente Linux offre: • Multitasking: possibilità di eseguire più programmi contemporaneamente • Funzionamento multiutente: uso contemporaneo della macchina da parte di più utenti • Multipiattaforma: Linux è praticamente compatibile con tutti i comuni hardware di PC, e può girare anche su processori non INTEL • funzioni di protezione della memoria tra processi • gestione della memoria virtuale attraverso la paginazione • un pool di memoria unificato per i programmi e la memoria cache • librerie statiche e dinamiche • utilizza un proprio tipo di file system • Linux permette di accedere a file system diversi: MS-DOS, è stato un sistema operativo commerciale della Microsoft dedicato ai personal computer con microprocessore x86, VFAT (Windows 9x ), HPFS (OS/2 2.x), HFS(Apple Mac), FFS (Amiga), SMB (file system di Windows). • supporto per un’ampia gamma di protocolli di rete (TCP/IP, PPP…) Linux la Gestione dei File Per quanto riguarda la gestione dei file, alcune differenze fondamentali di Linux rispetto al DOS (e a Windows), sono le seguenti: • I nomi dei file possono raggiungere la lunghezza massima di 255 caratteri • Linux distingue tra lettere minuscole e maiuscole • I file (e directory) i cui nomi cominciano con un punto sono considerati file nascosti (generalmente sono utilizzati per contenere i parametri di configurazione del software personalizzati per ogni utente) • I file e le directory hanno un proprietario e un gruppo di appartenenza • Come in Unix, i file e le directory hanno dei permessi: di lettura, di scrittura, e di esecuzione. Tali permessi sono suddivisi in tre tipi : • Permessi concessi al proprietario del file, i permessi concessi al gruppo, i permessi concessi a tutti gli utenti • Solo il proprietario del file (e l'amministratore di sistema) può modificare i permessi di un file • Per poter accedere al contenuto di una directory, occorre avere permessi di lettura ed esecuzione sulla directory. Linux gli Utenti Piu’ utenti possono utilizzare lo stesso sistema (hw/sw) contemporaneamente e ciascuno di essi e’ identificato da un numero (UID) e da un nome (Login); solitamente gli utenti accedono al sistema fornendo la loro Login e una "password". In tutti i sistemi Unix esiste sempre un "superutente" che ha UID "0" e login "root" e ha il potere di fare tutto e per questo motivo interviene in casi di estrema necessita’: • • • Configurazione del sistema Installazione delle applicazioni Gestione degli utenti Il Linguaggio Di Programmazione C Che cos’è un Linguaggio di Programmazione? In parole molto semplici, possiamo dire che un linguaggio di programmazione è uno strumento utilizzato per controllare il computer, facendogli eseguire determinati compiti. Come ogni linguaggio che si rispetti, è necessario che siano definiti due elementi essenziali: Il lessico e una sintassi. In linguaggio naturale, il lessico è l’insieme delle parole che possiamo trovare nel vocabolario, ciascuna con il suo significato. La sintassi è il modo di mettere assieme le parole per costruire una frase. Tutti i linguaggi di programmazione esistenti possiedono questi due concetti chiave: • Variabile: un dato o un insieme di dati, noti o ignoti, già memorizzati o da memorizzare. • Istruzione: un comando oppure una regola descrittiva. Il Linguaggio Di Programmazione C Che cos’è un Linguaggio di Programmazione? Alcuni concetti sono poi presenti nella gran parte dei linguaggi: • • Espressione: una combinazione di variabili Strutture dati: meccanismi che permettono di organizzare e gestire dati complessi. • Strutture di controllo: permettono di governare il flusso di esecuzione del programma • Sottoprogramma: un blocco di codice che può essere richiamato da qualsiasi altro punto del programma. • Funzionalità di input dati da tastiera e visualizzazione dati in output (stampa a video). Il Linguaggio Di Programmazione C Il linguaggio C Il C è un linguaggio di programmazione di uso e portata generale. Lo si è associato strettamente ai sistemi Unix e Linux all'interno dei quali venne sviluppato, in quanto sia i sistemi che molti dei suoi programmi sono scritti in C. Il linguaggio C, comunque, non è vincolato ad alcuna piattaforma, e sebbene sia stato definito "linguaggio di programmazione di sistema" (poiché si presta alla scrittura di compilatori e sistemi operativi), altrettanto efficacemente è stato adoperato per creare programmi di utilità primaria negli ambiti più disparati. Il C è un linguaggio di programmazione relativamente minimalista; la sua semantica utilizza un insieme ristretto di concetti relativamente semplici e vicini al funzionamento dell'hardware dei calcolatori; molte istruzioni C sono traducibili direttamente con una singola istruzione di linguaggio macchina (per esempio, gli operatori di autoincremento e autodecremento). Il Linguaggio Di Programmazione C le Caratteristiche Il C è un linguaggio di programmazione relativamente minimalista. Quali sono le sue peculiarità? Sono molte e qui di seguito elenchiamo quelle più importanti cercando di chiarirne il significato. • Dimensioni del codice ridotte – Generalmente il codice sorgente di un programma in C ha un peso (in Kb) relativamente piccolo, in questo modo risulta molto agevole trasportare il codice da un PC ad un altro, anche usando un semplice floppy. • Dimensioni dell’eseguibile ridotte – Anche una volta compilato, un programma in C, risulta molto piccolo e quindi di più facile diffusione; ovviamente un programma in C potrà essere eseguito solamente sul medesimo Sistema Operativo per cui è stato compilato. Il Linguaggio Di Programmazione C le Caratteristiche Il C è un linguaggio di programmazione relativamente minimalista. Quali sono le sue peculiarità? Sono molte e qui di seguito elenchiamo quelle più importanti cercando di chiarirne il significato. • Efficienza dei programmi – Un programma scritto in C, proprio per la possibilità messa a disposizione dal linguaggio di gestire a fondo la memoria, e per le sue dimensioni ridotte, risulta particolarmente efficiente. • Può essere compilato su una vasta gamma di computer – Ogni computer può differire dagli altri per almeno due cose, l’architettura ed il sistema operativo; ad esempio un computer con processore x86 e Windows ha delle istruzioni (intese come istruzioni del processore) ed una gestione della memoria diverse da uno Sparc con Linux, però un programma scritto in C può essere compilato su ambedue le macchine, data l’alta disponibilità di compilatori per diverse piattaforme.