Estratto del documento

Capitolo 1: introduzione ai sistemi operativi

Lezione 1: Che cos'è un sistema operativo?

Attorno agli anni '50 non esistevano i calcolatori come li conosciamo oggi, ma vi erano i cosiddetti work, i quali si occupavano di fare calcoli. Appena 10 anni dopo, questi lavoratori furono sostituiti da una serie di dispositivi di elaborazione con più elevate capacità di calcolo, permettendo di svolgere calcoli prima impossibili. Negli anni sessanta la definizione di sistema operativo era: "il software che controlla l'hardware”. Da allora, però, lo scenario è cambiato.

In particolare, l'hardware di oggi necessita di una grandissima varietà di applicazioni software (o processi), ma affinché questi ultimi funzionino efficacemente devono essere eseguiti in maniera concorrente: i processi devono accedere alle risorse del processore uno alla volta, seguendo uno specifico ordine, ed è compito del sistema operativo garantire che questo tipo di lavoro avvenga in totale sicurezza ed efficacia. È bene tenere a mente infatti che solo un processo per volta può essere in esecuzione sul processore, quindi lo switch tra i processi è di fondamentale importanza, questo ci fa capire che i sistemi operativi hanno anche il fondamentale compito di essere gestori di risorse.

Un sistema operativo è il software che permette alle applicazioni di interagire con l’hardware. Il suo compito è quello di offrire servizi alle applicazioni affinché possano accedere all’hardware in sicurezza e in maniera efficiente. Il software che contiene i componenti principali del sistema operativo è chiamato kernel. I sistemi operativi sono presenti in vari dispositivi, dai telefoni cellulari e le automobili ai computer. I sistemi operativi essendo gestori di risorse, gestiscono le risorse hardware come processori, memorie, dispositivi di input/output (I/O) e di comunicazione, ma anche applicazioni e altri meccanismi di astrazione creati dal software.

La preistoria: gli anni Quaranta e Cinquanta

I primi calcolatori elettronici digitali degli anni '40 non erano provvisti di un sistema operativo. I programmatori erano spesso costretti a caricare i loro programmi, in linguaggio macchina, un bit alla volta per mezzo di gruppi di interruttori meccanici. In seguito i programmatori poterono finalmente utilizzare le schede perforate per caricare i loro programmi, scritti sempre in linguaggio macchina. L’introduzione del linguaggio assembly, che usava abbreviazioni di parole english-like per rappresentare le operazioni di base del computer, velocizzò ulteriormente il processo di programmazione.

Nei primi anni '50 si realizzò il primo sistema operativo per il computer IBM 701. I sistemi dell'epoca eseguivano generalmente un solo lavoro (job) alla volta, utilizzando tecniche per alternare l’esecuzione di più lavori allo scopo di massimizzare lo sfruttamento del sistema. Un job costituiva l’insieme delle istruzioni di programma corrispondenti a un particolare compito computazionale (task). L’IBM 701 consentiva la transizione smooth da un job all’altro. I job restavano spesso in esecuzione per minuti, ore o giorni, senza interazione con l’utente. Questi primi computer erano chiamati sistemi di elaborazione a lotti a singolo flusso (single-stream batch-processing system) perché i programmi e i dati sui quali il sistema doveva operare erano sottomessi a gruppi (o lotti) e memorizzati in sequenza su nastri o dischi. Un apposito job stream processor (elaboratore del flusso di job) leggeva il cosiddetto job control language che serviva a definire ogni job, e facilitava l’inizializzazione di quello successivo. Quando il job corrente terminava, veniva letto il job control language relativo al successivo job e venivano svolte opportune operazioni di pulizia per facilitarne l’esecuzione.

Sebbene i sistemi operativi degli anni '50 si occupassero di ridurre i tempi di transizione tra un job e l’altro, il programmatore era spesso costretto a controllare direttamente le risorse di sistema, come la memoria e i dispositivi di I/O. Questo risultava essere un lavoro lento, difficile e noioso, che richiedeva la presenza in memoria di un intero programma per poterlo eseguire. Questo vincolava i programmatori a dover creare programmi piccoli e con limitate funzionalità.

Gli anni Sessanta

I sistemi degli anni '60 erano ancora di tipo batch, ma riuscivano a utilizzare le risorse in modo più efficiente portando in esecuzione più job allo stesso tempo. Tali sistemi includevano molte periferiche come lettori e perforatori di schede, stampanti, nastri e dischi magnetici. Prima un tipico job utilizzava il processore per un certo periodo di tempo per poi svolgere qualche operazione di I/O su una delle periferiche del sistema. Nel frattempo, il processore rimaneva inattivo finché il job attendeva il completamento dell'operazione di I/O in questione.

I sistemi degli anni '60 hanno migliorato lo sfruttamento delle risorse permettendo a un job di utilizzare il processore mentre altri job utilizzavano le periferiche. Infatti, mandare in esecuzione un insieme di job con caratteristiche diverse (i cosiddetti job processor-bound, che usavano principalmente il processore e gli job I/O-bound, che usavano principalmente le periferiche), sembrava essere il modo migliore per ottimizzare l’utilizzo delle risorse. Alla luce di queste osservazioni, i progettisti di sistemi operativi crearono i cosiddetti sistemi a multiprogrammazione (o sistemi multiprogrammati) che gestivano diversi job nello stesso tempo. In un ambiente multiprogrammato il sistema operativo scambia rapidamente il processore da un job all’altro, permettendo a diversi job di avanzare e mantenendo le periferiche al lavoro. Il grado o livello di multiprogrammazione indica quanti job sono gestibili concorrentemente.

In un sistema multiprogrammato uno degli obiettivi principali è la condivisione delle risorse. Quando le risorse sono condivise da un insieme di processi e ogni processo mantiene il controllo esclusivo delle risorse che gli sono allocate, un processo potrebbe rimanere in attesa di una risorsa che non diventerà mai disponibile. Se questo accade, il processo in questione non sarà in grado di svolgere il suo compito e probabilmente l’utente sarà costretto a mandarlo in esecuzione di nuovo, perdendo il lavoro svolto fino a quel momento.

Un’altra caratteristica era la capacità di gestire le risorse condivise: ogni processo avrà bisogno delle proprie risorse, e potrebbe succedere che più processi necessitino delle stesse risorse contemporaneamente. È quindi necessario implementare un meccanismo di mutua esclusione che garantisce la condivisione sicura di una certa risorsa garantendo al contempo che quella risorsa sia in futuro disponibile per altri processi così da evitare deadlock o posticipazioni indefinite.

In genere gli utenti degli anni '60 non erano presenti quando i loro job venivano eseguiti dal computer, infatti i job venivano forniti su schede perforate o nastri magnetici a un operatore, che si occupava poi di mandarli in esecuzione appena possibile. Spesso un job rimaneva in coda per l’esecuzione anche ore o giorni. Un minimo errore nel programma, bloccava l’esecuzione del job costringendo l’utente a correggere l’errore e riconsegnare il tutto all’operatore rimettendosi in attesa per una nuova esecuzione. Lo sviluppo del software in quelle condizioni era un processo meticolosamente lento.

Nel 1964 IBM presentò la famiglia di computer System/360. I vari modelli 360 erano stati progettati per essere compatibili per utilizzare il sistema operativo OS/360 e per offrire prestazioni destinate a crescere nel tempo, garantendo la retrocompatibilità. Sistemi operativi sempre più avanzati furono sviluppati per servire concorrentemente gli utenti interattivi. L’interattività risiedeva nel fatto che gli utenti potevano interagire con i loro job durante l’esecuzione. Negli anni '60 gli utenti utilizzavano a tale scopo i cosiddetti terminali stupidi, così chiamati perché facevano solo da interfaccia per l’utente e non avevano alcuna potenza computazionale, ma erano direttamente collegati al computer centrale (online).

Dato che l’utente era fisicamente presente davanti alla macchina durante lo svolgimento del lavoro, era necessario che il sistema rispondesse abbastanza velocemente alle sue richieste per non limitarne la produttività. I sistemi timesharing furono sviluppati per servire concorrentemente più utenti in modo interattivo. La maggior parte dei sistemi timesharing degli anni '60 era multimodale, cioè in grado sia di supportare elaborazioni di tipo batch sia elaborazioni in tempo reale. I sistemi real-time devono cercare di fornire dei risultati in un intervallo di tempo limitato. Le risorse di un sistema real-time sono spesso pesantemente sottoutilizzate, dato che è molto più importante per tali sistemi rispondere velocemente, che usare le risorse in modo efficiente.

Un sistema che voglia offrire supporto sia a elaborazioni di tipo batch sia a elaborazioni in tempo reale deve essere in grado di distinguere tra le varie tipologie di utente, al fine di fornire l’appropriato livello di servizio. I job di tipo batch possono sopportare senza problemi un ragionevole ritardo nell’esecuzione, mentre quelli interattivi implicano un alto livello di servizio; infine i job in tempo reale richiedono un livello di servizio estremamente alto.

In quel periodo, il termine processo veniva usato per descrivere un programma in esecuzione nel contesto dei sistemi operativi. Molto spesso gli utenti inviavano job composti da più processi eseguibili concorrentemente. In generale i processi concorrenti sono eseguiti indipendentemente, ma i sistemi multiprogrammati permettono a questi di cooperare per portare a termine un compito comune.

Il turnaround, cioè il tempo trascorso tra l’invio di un job e il suo completamento, fu ridotto a minuti e persino a secondi. Il programmatore non fu più costretto ad attendere ore o giorni prima di poter scoprire e correggere anche l’errore più banale, dunque si poteva eseguire, correggere (cioè effettuare il debug, procedimento di ricerca e correzione di eventuali errori) e completare il codice con un risparmio di tempo notevole.

Per quanto concerne il meccanismo della memoria virtuale: nei sistemi con memoria virtuale i programmi possono indirizzare un numero di locazioni di memoria molto più grande di quelle fisicamente presenti nella memoria principale (anche detta memoria reale, centrale o fisica). I sistemi con memoria virtuale aiutano a eliminare dal lavoro dei programmatori buona parte della complessità della gestione della memoria, permettendo loro di concentrarsi sullo sviluppo dell'applicazione.

Una volta caricati in memoria centrale, i programmi potevano essere eseguiti velocemente; tuttavia tale memoria era molto costosa e quindi non poteva contenere un gran numero di programmi contemporaneamente. Prima degli anni '60, i programmi venivano caricati in memoria per mezzo di schede perforate o nastri magnetici, e questo era un lavoro lungo e noioso durante il quale il sistema non poteva essere utilizzato per eseguire job. I sistemi degli anni '60 incorporarono dispositivi che ridussero questi tempi morti, memorizzando grandi quantità di dati su dispositivi di memorizzazione magnetica abbastanza economici come nastri, dischi e tamburi. Sebbene i dischi rigidi (hard disk) permettessero un accesso abbastanza veloce ai programmi e ai dati rispetto ai nastri, erano tuttavia molto più lenti della memoria centrale.

Lezione 2: Gli anni Settanta

I sistemi degli anni '70 erano soprattutto sistemi multiprogrammati multimodali che supportavano le elaborazioni di tipo batch, in time sharing e in tempo reale. L’elaborazione di tipo personal era in crescita, alimentata soprattutto dai primi e continui progressi nel campo della tecnologia dei microprocessori.

La comunicazione tra sistemi di computer in tutti gli Stati Uniti aumentò appena lo standard di comunicazione TCP/IP, sviluppato dal dipartimento della difesa americano, cominciò a diventare famoso e largamente utilizzato dai militari e dalle università. La comunicazione nelle reti locali (LAN, Local Area Networks) diventò pratica ed economica grazie allo standard Ethernet. I problemi di sicurezza aumentarono di pari passo alla crescita del volume di dati trasmessi attraverso linee di comunicazione vulnerabili. Crebbe così l’importanza della crittografia al fine di rendere meno vulnerabile la sicurezza dei dati.

La rivoluzione del personal computing (PC) cominciò verso la fine degli anni ‘70 con sistemi come l’Apple II ed esplose negli anni ’80.

Gli anni Ottanta

Gli anni '80 sono stati il decennio dei personal computer e delle workstation. L’evoluzione tecnologica dei microprocessori permise di realizzare computer commerciali potenti quanto i mainframe (computer potenti e costosi, appannaggio esclusivo di università, centri di ricerca e militari) di un decennio prima. Il Personal Computer IBM (rispetto al System/360, aveva 256K di RAM e la capacità di leggere floppy disk) rilasciato nel 1981 e l’Apple Macintosh (molto diffuso in ambito scolastico) rilasciato nel 1984 permisero a singoli utenti e piccole industrie di possedere un proprio computer.

Applicazioni come fogli elettronici (spreadsheet), elaboratori di testo (word processor), gestori di basi di dati e programmi di grafica aiutarono la rivoluzione del personal computing, creando domanda da settori di mercato che richiedevano questi prodotti per incrementare la loro produttività.

La pratica del personal computer si dimostrò abbastanza semplice da acquisire, anche grazie alla Graphical User Interface (GUI), che ricorse a simboli come finestre, icone e menu per interagire più comodamente con i programmi. Non appena i costi della tecnologia si abbassarono ulteriormente divenne sempre più economico e pratico trasferire informazioni tramite reti di computer; cominciarono a proliferare le applicazioni di posta elettronica, trasferimento file e accesso remoto a basi di dati. L'elaborazione distribuita, cioè l’utilizzo di più computer indipendenti per svolgere un compito in comune, si diffuse basandosi sul modello client/server, dove i client sono computer utenti che richiedono vari servizi e i server sono computer che svolgono i servizi richiesti.

L’ingegneria del software ebbe una notevole evoluzione, soprattutto dietro la spinta del governo degli Stati Uniti, che voleva far diventare più controllabili i progetti software del proprio dipartimento della difesa. Alcuni obiettivi di questa iniziativa erano il riutilizzo del codice e il rapido sviluppo di prototipi per permettere agli utenti e agli sviluppatori di suggerire eventuali modifiche già dai primi passi del processo di sviluppo del software.

Storia di Internet e del World Wide Web

Verso la fine degli anni ’60 la Advanced Research Projects Agency (ARPA) del dipartimento della difesa americano mise a punto un progetto per collegare in rete i sistemi di elaborazione di una dozzina di università e centri di ricerca da essa finanziati. Essi furono collegati tramite linee di comunicazione che operavano alla velocità di 1 Kbps, mentre la maggior parte degli utenti si connetteva ai computer tramite linee telefoniche alla velocità di 110 bps.

Durante una conferenza i ricercatori di Harvard presentarono un progetto per comunicare con il “supercomputer” Univac 1108 che si trovava presso l’Università dello Utah, al fine di fargli gestire le pesanti elaborazioni relative alla loro ricerca sulla computer graphic. Poco dopo l’ARPA realizzò la cosiddetta ARPAnet, un’antenato di Internet. Sebbene ARPAnet permise ai ricercatori di collegare in rete i loro computer, il beneficio principale fu quello di permettere una forma di comunicazione semplice e rapida attraverso posta elettronica (email).

ARPAnet fu progettata per funzionare senza un controllo centralizzato e ciò significava che se anche una porzione della rete avesse avuto dei problemi, la rimanente porzione sarebbe stata in grado di trasportare dati tra mittente e destinatario per mezzo di cammini alternativi. I protocolli (insieme di regole) per comunicare per mezzo di ARPAnet divennero conosciuti come Transmission Control Protocol/Internet Protocol (TCP/IP). TCP/IP fu utilizzato per gestire la comunicazione tra le applicazioni. I protocolli assicuravano l’arrivo dei messaggi intatti alla giusta destinazione. L’avvento del TCP/IP promosse la crescita del computing a livello mondiale.

All’inizio l’uso di Internet fu limitato alle università e ai centri di ricerca e in seguito anche i militari adottarono questa tecnologia. Infine, il governo decise di permettere l’accesso a Internet anche per scopi commerciali. Questa decisione creò qualche preoccupazione negli ambienti militari e accademici, in quanto si pensava che i tempi di risposta della rete avrebbero risentito della crescita del numero di utenti. In realtà, accadde l’esatto contrario. Il mondo del commercio colse subito la potenzialità di questa tecnologia e di conseguenza le aziende fecero grandissimi investimenti per essere presenti sulla rete.

L’intensa concorrenza che si creò tra società fornitrici di servizi di comunicazione, di hardware e di software portò alla fine a un notevole incremento della capacità di trasmissione della rete e a un crollo del costo dell’hardware e delle comunicazioni. Il World Wide Web (WWW) permise agli utenti di localizzare e visualizzare documenti multimediali (documenti con testo, grafica e animazioni audio/video).

Anteprima
Vedrai una selezione di 10 pagine su 412
Teoria ed Esempi di Sistemi Operativi Pag. 1 Teoria ed Esempi di Sistemi Operativi Pag. 2
Anteprima di 10 pagg. su 412.
Scarica il documento per vederlo tutto.
Teoria ed Esempi di Sistemi Operativi Pag. 6
Anteprima di 10 pagg. su 412.
Scarica il documento per vederlo tutto.
Teoria ed Esempi di Sistemi Operativi Pag. 11
Anteprima di 10 pagg. su 412.
Scarica il documento per vederlo tutto.
Teoria ed Esempi di Sistemi Operativi Pag. 16
Anteprima di 10 pagg. su 412.
Scarica il documento per vederlo tutto.
Teoria ed Esempi di Sistemi Operativi Pag. 21
Anteprima di 10 pagg. su 412.
Scarica il documento per vederlo tutto.
Teoria ed Esempi di Sistemi Operativi Pag. 26
Anteprima di 10 pagg. su 412.
Scarica il documento per vederlo tutto.
Teoria ed Esempi di Sistemi Operativi Pag. 31
Anteprima di 10 pagg. su 412.
Scarica il documento per vederlo tutto.
Teoria ed Esempi di Sistemi Operativi Pag. 36
Anteprima di 10 pagg. su 412.
Scarica il documento per vederlo tutto.
Teoria ed Esempi di Sistemi Operativi Pag. 41
1 su 412
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher giusegu di informazioni apprese con la frequenza delle lezioni di Sistemi operativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Palermo o del prof Morana Marco.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community