Dispensa n.8 SISTEMA OPERATIVO Un sistema informatico è costituito da un insieme di componenti fisici (hardware) e da un complesso di programmi che in parte vengono scritti dall’utente per risolvere specifici problemi (software applicativo) e in parte sono codificati direttamente dal produttore dall’hardware e dalle ditte specializzate, al fine di gestire e rendere utilizzabile in maniera efficace e modulare l’intero sistema di calcolo (software di sistema o di base). Il software di sistema, generalmente fornito a corredo dell’hardware, comprende il sistema operativo e, a volte, anche i compilatori, gli interpreti ed alcuni programmi di utilità. Il termine sistema operativo indica l’insieme di programmi che gestiscono le risorse del calcolatore per consentire agli utenti e ai loro programmi di utilizzare un computer e le sue periferiche in modo più comodo, efficiente e sicuro. L’hardware è una macchina capace solo di eseguire i programmi presenti nella memoria di lavoro: è dunque necessario prevedere un insieme di programmi (appunto il sistema operativo) sempre presenti nel calcolatore che controllino le periferiche e i collegamenti in rete, riconoscano ed eseguano i comandi usuali di gestione della macchina, disciplinino il buon uso della macchina stessa da parte di più utenti contemporaneamente e consentano l’interazione corretta di un terminale utente con i programmi dell’utente stesso. Il system consente ad un apparente ammasso casuale di microprocessori e componenti elettronici, di trasformarsi in un computer funzionante. Una parte del sistema operativo (operating system) risiede nella memoria di sola lettura (ROM) di un computer e l’altra su una memoria magnetica. Viene caricato nella memoria centrale (RAM) subito dopo l’accensione. E’ costituito da un insieme di programmi software che gestiscono le risorse dell’elaboratore e l’esecuzione di tutti i programmi applicativi. La parte del sistema operativo che ha il compito di interagire con noi è detta guscio (shell). Il software che esegue la funzione di controllo è chiamato nucleo (kernell). La struttura e le potenzialità del sistema operativo sono caratteristiche molto importanti del calcolatore. Le possibilità offerte all’utente e la facilità d’uso di un calcolatore dipendono dal sistema operativo che definisce il comportamento del calcolatore stesso nei confronti del mondo esterno. I sistemi operativi possono essere visti come una collezione di programmi interagenti, che operano sull’hardware per fornire agli utenti e ai programmi applicativi un insieme di funzionalità ad un elevato livello di astrazione. I vantaggi principali di tale approccio sono legati alla possibilità di definire delle modalità standardizzate di interfaccia verso il calcolatore, che consentano: - di sviluppare i programmi in maniera più semplice, modulare ed indipendente dallo specifico calcolatore su cui il sistema operativo viene fatto funzionare - di permettere l’aggiornamento e l’evoluzione del software di base e dell’hardware in maniera trasparente sia ai programmi applicativi che all’utente, ovvero senza che essi siano influenzati dall’operazione. Questa interfaccia fra l’utente e l’hardware serve a facilitare l’utilizzo e la gestione delle varie risorse del sistema, consentendo di superare i problemi legati alla limitazione delle risorse e di regolamentare il loro impiego, evitando conflitti di accesso. Quale è l’architettura del sistema operativo? 1 Il sistema operativo è costituito da strati successivi di programmi corrispondenti ad altrettanti livelli di astrazione rispetto alla struttura circuitale. Si vuole intendere con questo che solo lo strato più basso utilizza direttamente le risorse circuitali del calcolatore mentre ogni strato intermedio fa uso delle funzioni fornite dallo strato immediatamente inferiore per realizzare a sua volta altre che potranno essere utilizzate dallo strato immediatamente superiore. Al livello più basso si trova il calcolatore che è in grado di lavorare ad un livello molto elementare a cui corrispondono il linguaggio macchina ed i segnali elettrici di comando alle periferiche. Lo strato intermedio, a cui appartiene il sistema operativo, contiene un insieme di primitive software in grado di controllare direttamente i dispositivi fisici e interfacciarsi facilmente con lo strato successivo. Sul sistema operativo si innesta la rimanente parte del software di sistema che comprende vari programmi, fra cui l’interprete dei comandi (shell) la cui funzione è ricevere e interpretare i comandi direttamente impartiti dagli utenti, i compilatori che servono a tradurre in linguaggio macchina i programmi scritti ad alto livello ed una serie di programmi di utilità (per esempio per la diagnostica e la manutenzione o per la scrittura dei file). Questi programmi, anche se logicamente distinti dal sistema operativo, fanno normalmente parte della medesima dotazione del software che il produttore fornisce con il calcolatore. Lo strato più esterno, che si interfaccia direttamente con l’utente finale, contiene i programmi per la risoluzione dei problemi applicativi di quest’ultimo. Ogni sistema operativo ha una struttura organizzata su diversi livelli cui corrisponde una gerarchia di elementi con le seguenti caratteristiche: - ogni elemento è un insieme di programmi che realizza funzionalità sempre più potenti, utilizzando i servizi forniti dal livello inferiore. - ogni elemento ha il compito di gestire risorse specifiche del sistema, fornendo meccanismi logici di accesso che ne regolamentino l’uso e che siano accessibili mediante modalità di interfaccia standardizzate e indipendenti nella loro realizzazione. - i meccanismi che garantiscono la correttezza logica delle operazioni sono separati dalle politiche di gestione delle risorse al fine di avere maggiore flessibilità nel processo di ottimizzazione delle prestazioni del sistema operativo. NUCLEO = è il livello più basso ed è direttamente a contatto con la struttura circuitale del calcolatore. Colloquia direttamente con l’hardware e si occupa sia dell’esecuzione dei programmi sia della risposta agli input generati dalle periferiche esterne. La sue funzioni principali sono quindi il processamento dei dati e la gestione delle interfacce fra CPU e periferiche, cioè l’inizializzazione dei dispositivi di input/output e lo scambio delle singole informazioni. Uno dei requisiti fondamentali del sistema operativo è consentire a diversi utenti la condivisione delle medesime risorse fisiche, eventualmente anche da parte di programmi diversi. Questa esigenza comporta la necessità di mascherare ai vari utenti la presenza di altri, regolamentando l’accesso alle risorse disponibili, offrendo in definitiva la disponibilità virtuale di un sistema a loro completamente dedicato. Lo scopo principale del nucleo è appunto di gestire i vari processi corrispondenti ai programmi che sono contemporaneamente attivi, siano essi originari dalle applicazioni utente (per esempio un programma) o dedicati alla gestione dell’intero sistema informatico (per esempio il collegamento in rete di più terminali). 2 GESTORE DELLA MEMORIA = è il livello che si occupa di gestire la memoria di lavoro disponibile, assegnando spazi di memoria ai programmi che ne fanno richiesta e riciclando gli spazi che i programmi rilasciano dopo averli utilizzati. Fa uso del nucleo per conoscere le dimensioni di memoria disponibile e per gestire particolari strutture di memoria eventualmente presenti (ad esempio memoria cache). E’ particolarmente importante in sistemi che consentono la multiprogrammazione, poiché in questo caso è il responsabile dell’efficienza di caricamento da memoria di massa dei vari programmi che gli utenti vogliono eseguire contemporaneamente. Ha il compito di destinare opportunamente la memoria centrale, al fine di risolvere le esigenze dei vari processi in modo efficiente. Essendo una risorsa costosa e di dimensioni limitate, la memoria deve essere opportunamente regolamentata; in caso contrario, si determinerebbe un utilizzo limitato della memoria stessa. Il modulo riesce ad offrire agli strati di livello superiore la possibilità di lavorare come se avessero sempre a disposizione una memoria dedicata, di dimensione anche maggiore di quella fisicamente presente nell’hardware. GESTORE DELLE PERIFERICHE = è il livello che scambia informazioni con l’esterno mediante periferiche. Fa uso del gestore della memoria per trovare spazio per le informazioni da trasferire da e per il mondo esterno, e del nucleo, per scambiare con la periferica i singoli dati. Tramite questo modulo, il sistema operativo fornisce agli utenti una visione del sistema in cui i programmi operano mediante periferiche astratte. Le caratteristiche fisiche delle periferiche e le operazioni di input/output che coinvolgono tali unità vengono mascherate all’utente, che si trova ad operare solo con un insieme di primitive ad alto livello per leggere e scrivere dati, senza preoccuparsi dei problemi di indirizzamento e di sincronizzazione delle periferiche. Per primitiva si intende ogni singola funzione che viene messa a disposizione dal sistema operativo. Possono essere considerate come servizi di sistema operativo che un programma applicativo può conoscere e chiamare per svolgere operazioni con la gestione generale del calcolatore. GESTORE DEI FILE = è il livello che gestisce dal punto di vista logico le informazioni memorizzate sui supporti di memoria di massa sotto forma di file. Di fatto, la memoria di massa, pur rientrando nelle unità periferiche, viene gestita da questo modulo. Tale componente si occupa di organizzare le informazioni (dati e programmi) in contenitori logici, detti file (ognuno identificato da un nome) accessibili tramite comandi ad alto livello che rendono trasparenti all’utente le operazioni per l’allocazione e l’accesso alla memoria di massa. PROGRAMMI OPERATIVI = sono i programmi direttamente utilizzati dagli utenti del calcolatore, che possono sfruttare tutti i livelli sottostanti per effettuare le operazioni necessarie. A questo livello appartiene anche l’interprete dei comandi, cioè il programma di sistema che comunica direttamente con l’utente per interpretare ed eseguire i comandi ricevuti. INTERPRETE DEI COMANDI E I PROGRAMMI DI UTILITA’ = l’interprete dei comandi e i programmi di utilità sono moduli direttamente visibili dall’utente. L’interprete comandi ha la funzione di interpretare i comandi che arrivano alle periferiche (per lo più da tastiera) ed attivare i programmi corrispondenti. I programmi di utilità consentono di ampliare le funzionalità del sistema operativo, al fine di facilitare e ottimizzare l’utilizzo del calcolatore da parte sia degli utenti che del gestore del 3 sistema. Alla categoria delle utilità appartengono i compilatori, i debugger, i programmi di ottimizzazione dello spazio occupato su disco, i programmi di testo, gli editor di sistema. La diffusione del personal computer ha indotto i produttori di sistemi operativi a fornire modalità di interazione fra utente e sistema basate sempre maggiormente sulla grafica rispetto ai sistemi tradizionali basati su comandi testuali. FUNZIONI DI UN SISTEMA OPERATIVO “MODERNO” Un moderno sistema operativo deve essere in grado di compiere diverse attività contemporaneamente: per esempio mentre un programma è in esecuzione il calcolatore deve poter stampare un file. Il termine processo denota in sostanza un programma in esecuzione. L’agente hardware in grado di eseguire processi è detto processore, l’agente software in grado di gestire i processi è detto nucleo (o kernel) del sistema operativo. Interfaccia utente L’interfaccia utente più spartana è quella basata sui comandi di linea (command line). Con questo metodo è necessario digitare comandi in risposta ad un prompt (simbolo o parola che il sistema operativo scrive sul terminale all’inizio della riga quando è pronto a ricevere i comandi dall’operatore), un carattere tipo ? o > che il sistema operativo del computer utilizza per comunicare all’utente che è in attesa di un comando. Il vecchio sistema operativo dei PC, l’MS-DOS non fornisce alcun aiuto riguardo al tipo di comando da digitare per avere una qualche interazione con il computer. L’utente è costretto a ricordare a memoria il comando da digitare per ottenere la risposta. L’interfaccia a comandi di linea era un ostacolo; non era semplice ricordarsi decine di termini e comandi. Questo tipo di interfaccia si rifaceva ai tempi in cui i computer erano governati da terminali sprovvisti di video e visualizzavano comandi e relative risposte su moduli continui. Appena i computer vennero equipaggiati di video, le cose migliorarono; i programmi furono così in grado di visualizzare a schermo una lista di dei comandi disponibili, a cui corrispondevano dei numeri e delle lettere. Nacquero i primi tentativi di interfaccia a menu, in cui ad esempio, il comando dir (visualizzazione della directory dei file) veniva eseguito semplicemente digitando la lettera D. La possibilità di visualizzare le opzioni disponibili, ridusse drasticamente il numero degli errori causati da un’errata digitazione dei comandi. L’introduzione del menu pose il problema della strutturazione degli stessi. Si pensò di assegnare un numero ad ogni comando; oppure assegnare al comando la prima lettera che lo componeva; oppure utilizzare le frecce cursore per posizionarsi sul comando desiderato. Questo determinava il fatto che ogni volta che si utilizzava un nuovo programma si doveva riiniziare tutto da capo. Macintosh rivoluzionò tutto; fu il primo personal computer ad imporre un’interfaccia utente standard, identica per tutti i programmi. Multiprogrammazione Sistema uniprogrammato = quando nella memoria centrale risiede, oltre al sistema operativo, al più un programma utente. Sistema multiprogrammato = quando nella memoria centrale può essere contenuto più di un programma applicativo. 4 Nella gestione dei processi da parte del sistema operativo, ogni processo può trovarsi in uno dei tre seguenti stati: - in esecuzione, ovvero con il processore a disposizione per l’esecuzione del proprio codice. Se il calcolatore è dotato di un solo processore, in ogni istante solamente un processo può trovarsi in tale stato - pronto, ovvero in grado e in attesa di essere eseguito, non appena il processore diventa disponibile dopo il suo rilascio da parte del processo correntemente in esecuzione. I processi in questo stato vengono generalmente definiti in coda, gestita secondo la politica “primo arrivato primo servito”. - in attesa, ovvero non in grado di essere effettivamente eseguito dal processore, poiché in attesa del verificarsi di un evento esterno, per esempio la pressione di un tasto della tastiera, per passare allo stato di pronto. Un sistema privo di multiprogrammazione consente l’esecuzione di un solo processo per volta. Questa limitazione in genere conduce ad un limitato utilizzo del sistema: durante l’attesa per le operazioni di input/output (come nell’attesa della pressione del tasto da parte dell’utente) il processore rimane pressochè inattivo. In un sistema uniprogrammato, un metodo per sfruttare i tempi morti di attesa consiste nello scaricare il programma residente in memoria e caricare dalla memoria di massa un nuovo programma da mandare in esecuzione: si tratta di una soluzione accettabile solo qualora i tempi di attesa siano molto maggiori del tempo di caricamento di un programma dalla memoria di massa. Con la tecnica della multiprogrammazione i tempi morti vengono ridotti sensibilmente e si può utilizzare lo stesso calcolatore per svolgere contemporaneamente più operazioni, come pure soddisfare contemporaneamente le esigenze di più utenti, collegati al calcolatore mediante vari terminali. Un netto miglioramento della multiprogrammazione è dato dal time-sharing in cui l’avvicendarsi dei programmi in esecuzione avviene ogni pochi millisecondi, e non solo quando il programma in esecuzione manifesta un tempo morto. Il time-sharing è adottato nei sistemi operativi di tutti i grandi calcolatori. Time-sharing In un sistema multiprogrammato, la presenza di vari programmi nella memoria di lavoro del calcolatore consente di passare a eseguire un nuovo programma quando quello in esecuzione inizia un’operazione di input/output che richiede un certo tempo, durante in quale la CPU rimarrebbe in attesa. Questo modo di gestire il passaggio da un programma ad un altro ha però un difetto: se il programma in esecuzione non fa mai operazioni che richiedano tempi di attesa da parte della CPU, questo programma non lascia spazio ad altri programmi. Nel caso si voglia utilizzare lo stesso calcolatore per soddisfare le esigenze contemporanee di tanti utenti, diventa necessario che, anche nel caso in cui il programma di un utente non faccia mai operazioni di input/output, venga sospeso di forza dal sistema operativo per dare tempo ai programmi degli altri utenti. Multiutenza Caratteristica di un sistema operativo che permette l’uso dello stesso computer da parte di molti utenti in modo contemporaneo. Chiaramente ciascun utente deve possedere un terminale (di solito una semplice console composta da tastiera e monitor, ma anche un PC con un 5 software di emulazione), attraverso il quale accedere al computer centrale. La multiutenza implica funzioni di timesharing e multitasking; tipici sistemi operativi multiutente sono Unix, Linux e, in genere, tutti quelli creati per minicomputer e mainframe (difficilmente sistemi operativi multitutente sono implementabili su PC e Workstations). La gestione della memoria centrale All’aumentare della sofisticazione del sistema operativo cresce il numero di processi che dovrebbero risiedere contemporaneamente in memoria e di conseguenza cresce anche la dimensione della memoria centrale necessaria al corretto funzionamento del sistema. D’altra parte ora qualsiasi programma anche semplice richiede vari Mbyte di memoria. Essendo la memoria centrale di un calcolatore limitata per motivi di costo è chiaro che la quantità di memoria non occupata dal sistema operativo si può ridurre a valori tali da non consentire che un numero significativo di programmi sia contemporaneamente in esecuzione. Per ovviare a questa limitazione sono state messe a punto diverse tecniche che consentono di superare l’apparente incompatibilità fra la dimensione della memoria fisica e lo spazio complessivo richiesto dai programmi che devono essere eseguiti in modo concorrente e dai relativi dati. Le soluzioni sono basate sulle seguenti strategie: - consentire il caricamento del programma a partire da un indirizzo qualunque della memoria - ridurre la necessità di spazio tenendo in memoria solo una porzione dei programmi e dei dati - condividere insiemi di istruzioni da parte di processi corrispondenti a uno stesso programma Queste strategie vengono attuate dal gestore della memoria, finalizzato a consentire un uso ottimale della memoria disponibile. TIPI DI SISTEMI OPERATIVI MS-DOS Indica un sistema operativo, prodotto dalla Microsoft su richiesta dell’IBM e per questo diventato un imperante standard industriale (perché forzatamente adottato dai produttori di Personal Computer compatibili con gli IBM) nonostante le sue chiare limitazioni e la sua arretratezza rispetto ad altri sistemi operativi del momento (primi anni ’80). Anche le prime versioni di Windows facevano uso di MS-DOS e delle sue funzionalità, e solo con le versioni della metà degli anni ’90 è diventato inutile. I sistemi compatibili con PC IBM, adottanti il sistema operativo MS-DOS e un hardware basato su CPU integrata della ditta Intel, hanno fatto esplodere il mercato dell’informatica per tutti. Il sistema MS-DOS proponeva uno schermo nero; un’interfaccia utente del tipo a linea di comando, quindi alfanumerica e non grafica. Per lanciare un programma o eseguire semplici operazioni come la gestione del video, il controllo della tastiera, l’esecuzione dei programmi, la conservazione dei file era necessario digitare parole dall’apparenza strane: dir, format, copy, del, type, ecc. abbreviazioni, cioè, di termini in lingua inglese. L’utilizzo dell’elaboratore era ostico. 6 OS/2 E’ uno dei sistemi operativi per personal computer compatibili IBM. E’ stato sviluppato come successore di MS-DOS per poter sfruttare completamente le potenzialità hardware dei nuovi microprocessori a 16 e 32 bit. E’ un sistema operativo monoutente e, a differenza di MS-DOS, multitasking. L’interazione con l’utente avviene attraverso un’interfaccia grafica a menu che lo rende particolarmente user-friendly. Tramite diversi menu è possibile ad esempio eseguire le tipiche operazioni su file e directory, spostandosi all’interno dei menu e selezionando l’operazione tramite mouse. Poiché il sistema operativo è multitasking, è possibile attivare contemporaneamente più programmi sia di sistema che di applicativi. WINDOWS Nelle versioni fino a Windows 95, è stato un ambiente operativo per personal computer diffusissimo, sviluppato dalla Microsoft. Fino a questa versione veniva erroneamente considerato un sistema operativo: in realtà per essere eseguito aveva bisogno del sistema operativo MS-DOS. Windows era costituito da un’interfaccia grafica per l’utente che come dice il nome consentiva di organizzare l’ambiente operativo tramite finestre. Ogni finestra rappresentava un programma specifico che può lavorare su uno specifico file: più finestre possono essere aperte contemporaneamente (e cioè più programmi possono essere attivati su file diversi): ovviamente visto che MS-DOS non era un sistema operativo multitasking in ogni istante è in esecuzione una sola finestra. Ogni finestra poteva essere ridotta ad un’icona, cioè un simbolo che rappresentava graficamente il programma ad essa associato. A partire da Windows 95 l’ambiente operativo si trasforma gradualmente in vero e proprio sistema operativo inglobando funzioni di multitasking. UNIX Sigla che identifica un sistema operativo ideato da Ken Thompson nel 1969. Di questo sistema operativo, di seguito adottato e modificato dall’Università di Berkeley, esistono numerose versioni che possono essere istallate su quasi tutti i microprocessori e su calcolatori di medie dimensioni. Le ragioni del successo di UNIX sono state simili a quelle dell’MS-DOS per i personal computer: la diffusione iniziale di UNIX, distribuito ad un prezzo relativamente ridotto, ha favorito la nascita di un numero elevatissimo di programmi di utilità i quali a loro volta invitavano ad adottare UNIX per poterne fare uso. Già da tempo, UNIX è lo standard di fatto nel campo dei sistemi operativi per macchine di medie dimensioni e per workstation. Oltre ad offrire le funzionalità tipiche per la gestione dei file, UNIX offre anche un buon ambiente di sviluppo di programmi complessi (soprattutto per quelli scritti in C, linguaggio di programmazione nato con UNIX stesso). E’ un sistema operativo multiutente e supporta l’esecuzione concorrente. L’interfaccia utente inizialmente orientata a terminali alfanumerici si è poi evoluta nell’ambiente operativo a finestre X-Windows. In Internet è disponibile come freeware anche una versione di UNIX per personal computer denominata LINUX. LINUX 7 E’ la versione di UNIX per personal computer. Il kernel è stato sviluppato dallo studente finlandese Linus Torvalds; le altre parti sono state realizzate e rese disponibili come freeware dall’iniziativa GNU. GNU è la sigla di un’iniziativa di Boston per la realizzazione e la distribuzione come software freeware di tutte le funzioni di sistema operativo ad eccezione del kernel di UNIX, nonché di tutti i supporti di programmazione. XENIX E’ un sistema operativo per personal computer e workstation molto simile a UNIX. MAC OS Il sistema operativo, utilizzato dai prodotti Apple, ha introdotto a partire dal 1984 le interfacce grafiche utente (Graphic User Interface, GUI) il concetto delle periferiche, il supporto per l’interfaccia di sistema per piccoli computer (SCSI, Small Computer System Interface) e la possibilità incorporata di collegamento in rete locale (LAN, Local Area Network). Sistema senza dubbio rivoluzionario all’epoca del rilascio; nonostante continui aggiornamenti, insiste però ancora sulla stessa impostazione di base, ovvero multitasking, singolo utente, gestione della memoria ormai non più adeguata (all’inizio invece era una delle caratteristiche che lo distinguevano positivamente rispetto a MS-DOS). MACOSX Mac OS X è incentrato su Darwin, nucleo del sistema operativo studiato per garantire stabilità e prestazioni superiori. Darwin è frutto del lavoro congiunto degli ingegneri Apple con altri programmatori che insieme sono riusciti a creare basi robuste e moderne per rendere i computer Mac più veloci e affidabili che mai. Darwin ha un'architettura a memoria protetta che assegna uno spazio unico a ciascuna applicazione. Se ogni programma è isolato nella propria porzione di memoria, quando qualcosa va storto non è più necessario riavviare il sistema: Darwin si limita a chiudere l'applicazione interessata dal problema permettendovi di continuare a lavorare o giocare senza interruzione. Darwin è in grado poi di assegnare la priorità all'applicazione principale, proseguendo comunque con le altre operazioni in background. Fino ad oggi un'azione complessa (ad esempio, un rendering di una transizione in iMovie o la compressione di un filmato) avrebbe impegnato completamente il processore per diversi minuti, se non per ore, bloccando ogni altra operazione. Grazie al preemptive multitasking di Mac Os X, invece, il sistema resta sempre reattivo, così potrete controllare la posta, lavorare in un'altra applicazione o navigare in Interneti mentre l'azione viene completata in background. Con il preemptive multitasking le applicazioni potranno lavorare contemporaneamente senza che debba essere il System o una delle applicazioni in uso a dichiarare la propria disponibilità a interrompere il task attualmente in elaborazione per mandarne in esecuzione un altro. Le applicazioni e le routine del sistema operativo che lavoreranno in preemptive multitasking avranno a disposizione una zona della memoria RAM protetta e del tutto indipendente quindi da quella delle altre applicazioni eseguite contemporaneamente. Darwin è caratterizzato da una gestione della memoria eccezionalmente efficiente, non sarà più necessario capire quale sia il quantitativo di memoria necessario, ad esempio, per consentire a un'applicazione come Internet Explorer di utilizzare i plug-in. Se un programma ha bisogno di una determinata quantità di RAM, il sistema infatti la assegna automaticamente e con precisione. 8 Darwin offre il supporto integrato per i sistemi Power Mac G4 con doppio processore; in questo modo potrete ad esempio servirvi di un processore per completare una trasformazione complessa di un'immagine e sfruttare l'altro per creare un nuovo documento MP3. Tutte le applicazioni beneficiano dell'incremento delle prestazioni offerto da un secondo processore. Inoltre, se effettuate con l'ausilio di entrambi i processori, le operazioni più impegnative quali la manipolazione di immagini, la compressione di filmati o la codifica di documenti MP3, possono essere completate in quasi metà tempo. Derivando in linea abbastanza diretta da UNIX, tutte le applicazioni scritte per questo sistema operativo potranno “girare” senza troppe difficoltà o modifiche sotto Mac Os X. Darwin è distribuito da Apple in licenza open source perchè gli ingegneri di tutto il mondo possano contribuire a fare di Mac Os X il migliore sistema operativo del pianeta. 9