Estratto del documento

Introduzione ai sistemi operativi

Un sistema operativo è un insieme di programmi (software) che gestisce gli elementi fisici di un calcolatore (hardware); fornisce una piattaforma ai programmi applicativi e agisce da intermediario fra l'utente e la struttura fisica del calcolatore. Un aspetto sorprendente dei sistemi operativi è quanto siano diversi i modi in cui eseguono questi compiti: i sistemi operativi per i mainframe si progettano innanzitutto per ottimizzare l'utilizzo delle risorse; i sistemi operativi per i PC consentono l'esecuzione di un'ampia varietà di programmi, dai giochi ai programmi gestionali; quelli per i sistemi palmari si progettano per fornire un ambiente in cui l'utente possa interagire in modo semplice con il calcolatore per l'esecuzione dei programmi. Alcuni sistemi operativi si progettano per essere di uso agevole, altri per essere efficienti e altri ancora per possedere una combinazione di tali qualità. In ragione della sua complessità e ampiezza un sistema operativo deve essere costruito gradualmente, per parti. Ciascuna di loro dovrebbe rappresentare un'unità ben riconoscibile del sistema, dotata di funzioni, dati in entrata e in uscita accuratamente definiti.

Che cosa è un sistema operativo

Un sistema operativo può essere visto come il componente di un sistema di calcolo. Un sistema di calcolo, in sostanza, si compone di 4 parti, come mostrato nella figura seguente:

  • I dispositivi fisici (Ram, CPU, ecc.) che costituiscono le risorse di calcolo fondamentali del sistema.
  • I programmi applicativi (fogli di testo, compilatori, ecc.) questi sono effettivamente gli "utilizzatori" dei dispositivi fisici, in quanto hanno lo scopo di risolvere i problemi computazionali degli utenti.
  • Il S.O. che ha il compito di controllare e coordinare l'utilizzo delle risorse da parte dei programmi applicativi.
  • Gli utenti!

Tuttavia è anche possibile considerare un sistema di calcolo semplicemente come l'insieme dei componenti fisici, programmi applicativi, e dati. Secondo questo punto di vista il S.O. offre gli strumenti per poter utilizzare queste risorse, cioè definisce un ambiente nel quale i programmi possono lavorare!

Punto di vista dell'utente

Facendo riferimento a calcolatori con schermo, tastiera, mouse, ecc. cioè i PC, i sistemi operativi possono essere profondamente diversi!

  • Per quanto riguarda i sistemi operativi per i PC, visto che questi sono progettati per essere utilizzati esclusivamente da un utente, vengono progettati per garantire la facilità d'uso e non viene considerato l'utilizzo delle risorse.
  • Per quanto riguarda invece i calcolatori condivisi da più utenti (es. mainframe, ai quali vari utenti accedono tramite terminali), in questo caso i sistemi operativi sono progettati per massimizzare l'uso delle risorse, garantendo che per tutto il tempo le risorse fisiche vengano utilizzate in modo equo ed efficiente.
  • I S.O. per i sistemi portatili puntano alla facilità d'uso ed alla riduzione del consumo delle batterie per questo motivo svolgono un numero ridotto di operazioni.
  • Facendo invece riferimento ai calcolatori embedded (es. calcolatori integrati negli elettrodomestici, auto, ecc.) questi hanno dei sistemi operativi progettati per funzionare senza l'intervento degli utenti!

Punto di vista del sistema

Dal punto di vista del calcolatore, il sistema operativo è il programma più strettamente correlato ai suoi elementi fisici. In tale contesto è possibile considerare un sistema operativo come un assegnatore di risorse. Un sistema di calcolo dispone di risorse (fisiche e programmi) utili per la risoluzione di un problema, che sono: tempo di CPU, spazio di memoria, spazio per la registrazione dei file, dispositivi di I/O, ecc. Il sistema operativo agisce come gestore di tali risorse. Di fronte a numerose ed eventualmente conflittuali richieste di risorse, il sistema operativo deve decidere come assegnarle agli specifici programmi e utenti affinché il sistema di calcolo operi in modo equo ed efficiente.

Un sistema operativo è in effetti un programma di controllo, che gestisce l'esecuzione dei programmi utenti in modo da impedire che si verifichino errori e che il calcolatore sia usato in modo scorretto, soprattutto per quel che riguarda il funzionamento e il controllo dei dispositivi di I/O.

Definizione di sistema operativo

Abbiamo cercato di comprendere cosa sia un sistema operativo e soprattutto quale sia il suo ruolo all'interno di un sistema di calcolo. Tuttavia non si dispone di una definizione completa ed esauriente di sistema operativo. Sappiamo che i sistemi di calcolo sono stati costruiti e si sono sviluppati per poter eseguire dei programmi utenti, che hanno lo scopo di facilitare la soluzione dei problemi degli utenti. I programmi applicativi sono molto differenti tra di loro ma racchiudono comunque delle funzionalità comuni: per esempio il controllo dei dispositivi di I/O. Tali funzioni comuni, di controllo e assegnazione delle risorse, sono state racchiuse in un unico insieme coerente di programmi: il sistema operativo.

Non si dispone nemmeno di una definizione universalmente accettata di che cosa faccia parte di un sistema operativo. Un punto di vista semplice è considerare che esso comprenda tutto quello che il rivenditore fornisce quando gli si richiede "il sistema operativo". Ma alcuni sistemi usano meno di un megabyte di memoria e non possiedono nemmeno un editor a pieno schermo, mentre altri richiedono centinaia di megabyte di memoria e sono interamente basati su interfacce grafiche a finestre.

Una definizione più comune è quella secondo cui il sistema operativo è il solo programma che funziona sempre nel calcolatore, generalmente chiamato kernel (nucleo), mentre tutti gli altri sono programmi applicativi.

La questione riguardante i componenti di un sistema operativo ha assunto una certa rilevanza anche in seguito all'azione legale promossa dal Dipartimento della giustizia degli Stati Uniti contro la Microsoft, accusata di includere troppe funzioni nel sistema operativo (come nel caso dei programmi di consultazione del Web) e quindi di concorrenza sleale nei confronti dei produttori e dei rivenditori di applicazioni. Di conseguenza fu dichiarata colpevole di sfruttamento di monopolio a danno della concorrenza.

Organizzazione di un sistema di calcolo

Un moderno calcolatore d’uso generale è composto da una CPU e da un certo numero di controllori di dispositivi connessi attraverso un canale di comunicazione comune (bus), che permette l’accesso alla memoria condivisa dal sistema. In figura è riportato lo schema di base, basato sulla macchina di Von Neumann, di un moderno sistema di calcolo:

Bisogna ricordare che un sistema di I/O non comunica direttamente con il BUS, ma lo fa tramite il controllore che funge da interfaccia fisica (quindi elettrica) tra il dispositivo e il BUS. Dobbiamo ormai aver chiaro che da un lato abbiamo il nostro calcolatore e dall’altro abbiamo il sistema operativo, inteso come Kernel (programma in continua esecuzione).

Ci chiediamo, a questo punto: come si fa a far partire un Sistema Operativo? Mediante la procedura di bootstrap! Tale procedura è diversa da macchina a macchina (PC, Cellulari, Palmari, ecc), tuttavia possiamo identificare delle procedure comuni, tra i vari sistemi. Praticamente l’avviamento del sistema, conseguente all’accensione fisica di un calcolatore, così come il riavvio di un calcolatore già acceso, richiede la presenza di uno specifico programma iniziale, di solito non troppo complesso, detto programma d’avviamento (bootstrap-program), in genere contenuto in una memoria a sola lettura (ROM), facente parte della struttura fisica del calcolatore. La sua funzione consiste nell’inizializzare i diversi componenti del sistema, dai registri della CPU ai controllori dei diversi dispositivi, fino al contenuto della memoria centrale. Il programma d’avviamento a questo punto deve caricare nella memoria il sistema operativo, dopo aver caricato il kernel il nostro sistema operativo è funzionante!

La prima azione che esegue il sistema operativo è quella di lanciare un processo (il quale può essere considerato come il “padre” di tutti i processi) che fondamentalmente rimane in attesa che succeda qualcosa nel sistema stesso; non appena succede qualcosa, il sistema operativo reagirà di conseguenza.

Concetti di base

Uno dei concetti di BASE è che il kernel o qualche processo da lui delegato, sta in “ascolto”, in attesa cioè di un qualche evento. Questi sono eventi che non si possono prevedere (non possiamo conoscere in anticipo quando un utente richiederà una determinata risorsa, o lancerà un determinato programma), sono quindi degli eventi asincroni. Per questo motivo dobbiamo essere in grado di gestire l’asincronicità degli eventi; quindi il Sistema Operativo è un programma guidato dagli eventi asincroni. Il meccanismo che permette la gestione degli eventi asincroni (che non si sa quando accadono) sono gli INTERRUPT (questo meccanismo è assolutamente fondamentale!).

Riassumendo: Il sistema operativo, dopo essere stato caricato in memoria centrale, avvia l’esecuzione del primo processo d’elaborazione, ad esempio init, e attende che si verifichi qualche evento. Un evento è di solito segnalato da una “interruzione” dell’attuale sequenza d’esecuzione della CPU, che può essere causata da un dispositivo fisico o da un programma. Nel 1° caso si parla di segnale di interruzione o, più brevemente, interruzione (interrupt); si tratta di segnali che i controllori dei dispositivi e altri elementi dell’architettura possono inviare alla CPU; di solito attraverso il bus di sistema. Nel 2° caso si parla di segnale d’eccezione o, più brevemente, eccezione (exception o trap), che può essere causata da un programma in esecuzione a seguito di un evento eccezionale, riconosciuto tramite l’architettura della CPU (ad esempio un errore: una divisione per 0 o un accesso alla memoria non valido); oppure a seguito di una richiesta specifica effettuata da un programma utente per ottenere l’esecuzione di un servizio del sistema operativo, attraverso una speciale interruzione detta chiamata di sistema (system call).

Come funzionano gli interrupt?

Alcuni piedini della CPU, esposti al BUS, ricevono un segnale elettrico, che serve a segnalare un avvertimento; Quando la CPU riceve questo segnale, interrompe ciò che sta facendo e provvede a rispondere a questo segnale. Ad esempio, immaginiamo di stare scrivendo un testo, e contemporaneamente nel nostro sistema viene eseguito un programma che converte le tracce di un cd in mp3. Ma se la CPU è già impegnata ad eseguire i calcoli per trasformare le tracce in mp3, come può, quando premiamo i tasti della tastiera, codificarli e interpretarli nel nostro file?

Effettivamente il dispositivo fisico (controller della tastiera) ogni volta che premiamo un tasto lancia un INTERRUPT alla CPU, che momentaneamente smetterà di eseguire il programma di conversione mp3 (salvandone lo stato!) e si occuperà di prelevare il carattere che abbiamo immesso; Ovviamente ogni INTERRUPT va gestito in maniera differente (l’interrupt della tastiera è diverso da quello dell’Hard disk, ecc.) “Lo stato si salva, salvando i contenuti dei registri e del program counter” e lo si fa con un pezzo di software diverso per ogni INTERRUPT. La CPU per riconoscere il pezzo di codice da eseguire per un determinato INTERRUPT si affida ad un indice particolare associato all’ INTERRUPT stesso; Letto questo la CPU preleverà da una tabella particolare, all’indice dell’INTERRUPT, il pezzo di software da mandare in esecuzione.

Riassumendo: La CPU sta eseguendo una qualche operazione, viene segnalato un INTERRUPT, la CPU interrompe l’operazione che stava eseguendo, salvandone lo stato, preleva l’indice dell’INTERRUPT e va a caricare dalla tabella, all’indice specificato, il pezzo di software relativo all’INTERRUPT, che sa gestirlo! La tabella di corrispondenza degli interrupt è gestita dal sistema operativo.

Tuttavia, questo non è l’unico modo per gestire gli INTERRUPT. In realtà, come abbiamo detto, gli eventi asincroni non sono solo di natura hardware (caso del tasto), ma sono anche di natura software, questi si hanno:

  • In caso di ERRORE della normale evoluzione del sistema. Per esempio un programma durante la sua evoluzione incontra una divisione per 0; il programma a questo punto non sapendo continuare, genera una eccezione, con un meccanismo similare a quello degli interrupt (fondamentalmente si genera un INTERRUPT software). Il sistema operativo, alla generazione dell’eccezione, risponde, comunicando un messaggio di errore, liberando le risorse occupate da questo processo!
  • Il 2° motivo di generazione di eventi asincroni software è dovuto al fatto che: il sistema operativo è lo “strato“ che si pone tra l’utenza e lo strato hardware. Per cui gli eventi software asincroni si hanno quando un software richiede una particolare risorsa (non si può sapere, infatti, quando un programma verrà lanciato!); anche in questo caso viene generato un INTERRUPT software (che richiederà la richiesta di un servizio al sistema operativo). Queste richieste di servizio al sistema operativo vengono dette: chiamate di sistema. L’insieme delle chiamate di sistema, sostanzialmente, definisce l’interfaccia che il sistema operativo ha verso l’utente per offrire i servizi.

Quindi le chiamate di sistema, dal punto di vista del sistema operativo, vengono realizzate mediante dei meccanismi similari agli INTERRUPT, infatti vengono detti INTERRUPT software; dal punto di vista dell’utente questi rappresentano l’interfaccia per la richiesta di servizi al sistema operativo. L’INTERRUPT software viene effettuato tramite opportune istruzioni del set di istruzioni della CPU (se il processore lo prevede), queste vengono chiamate SISCOL. In generale, useremo il concetto di trap: la trap al kernel significa generare la richiesta di un servizio al kernel. Alla fine, possiamo dire che il sistema operativo è guidato dagli INTERRUPT (INTERRUPT DRIVEN).

Struttura della memoria

Per essere eseguito, un programma per calcolatore deve risiedere nella memoria centrale, detta anche memoria ad accesso diretto (random access memory, RAM). La memoria centrale è la sola area di memoria di grandi dimensioni (dai milioni ai miliardi di byte) direttamente accessibile dalla CPU. È realizzata con una tecnologia basata sui semiconduttori detta memoria dinamica ad accesso diretto, ed è strutturata come un vettore di parole di memoria. Ciascuna parola possiede un proprio indirizzo. L'interazione avviene per mezzo di una sequenza di istruzioni load e store opportunamente indirizzate. L'istruzione load trasferisce il contenuto di una parola della memoria centrale in uno dei registri interni della CPU, mentre store copia il contenuto di uno di questi registri nella locazione di memoria specificata. Oltre agli accessi dovuti alle operazioni load e store, che si richiedono in modo esplicito, la CPU preleva automaticamente dalla memoria centrale le istruzioni da eseguire.

La tipica sequenza d'esecuzione di un'istruzione, in un sistema con architettura di von Neumann, comincia con il prelievo (fetch) di un'istruzione dalla memoria centrale e il suo trasferimento nel registro di istruzione. Quindi si decodifica l'istruzione che eventualmente può richiedere il trasferimento di alcuni operandi dalla memoria in alcuni registri interni. Una volta terminata l'esecuzione dell'istruzione sugli operandi, il risultato si può scrivere sulla memoria.

In teoria, si vorrebbe che sia i programmi sia i dati da essi trattati potessero risiedere in modo permanente nella memoria centrale. Questo non è possibile perché la capacità della memoria centrale non è sufficiente a contenere in modo permanente tutti i programmi ed i dati richiesti; ed in secondo luogo perché la memoria centrale è un dispositivo di memorizzazione volatile, sicché perde il proprio contenuto quando si spegne il sistema o si ha un'interruzione dell'alimentazione elettrica.

Per queste ragioni la maggior parte dei sistemi di calcolo comprende una memoria secondaria come estensione della memoria centrale. La caratteristica fondamentale di questi dispositivi è la capacità di conservare in modo permanente grandi quantità di informazioni. Esistono altri tipi di memorie, per esempio le memorie cache, i CD-ROM, ecc. Qualsiasi architettura fornisce le funzioni fondamentali che consentono la memorizzazione di un dato e il suo mantenimento fino all'uso successivo. Le caratteristiche che differenziano i diversi sistemi di memorizzazione sono velocità, costo, dimensioni e volatilità. L'ampio ventaglio dei sistemi di memorizzazione disponibili in un elaboratore può essere ordinato secondo una scala gerarchica, sulla base della velocità e del costo. I gradini più alti ospitano i dispositivi più veloci, ma anche più dispendiosi. Andando verso il basso il costo per bit generalmente diminuisce, mentre il tempo di accesso tende ad aumentare. Oltre a caratterizzarsi per velocità e costo, i sistemi di memorizzazione si suddividono in volatili e non volatili. La memoria volatile comporta la perdita dei dati nel caso di interruzione dell'alimentazione.

Anteprima
Vedrai una selezione di 10 pagine su 196
Sistemi Operativi - Appunti Pag. 1 Sistemi Operativi - Appunti Pag. 2
Anteprima di 10 pagg. su 196.
Scarica il documento per vederlo tutto.
Sistemi Operativi - Appunti Pag. 6
Anteprima di 10 pagg. su 196.
Scarica il documento per vederlo tutto.
Sistemi Operativi - Appunti Pag. 11
Anteprima di 10 pagg. su 196.
Scarica il documento per vederlo tutto.
Sistemi Operativi - Appunti Pag. 16
Anteprima di 10 pagg. su 196.
Scarica il documento per vederlo tutto.
Sistemi Operativi - Appunti Pag. 21
Anteprima di 10 pagg. su 196.
Scarica il documento per vederlo tutto.
Sistemi Operativi - Appunti Pag. 26
Anteprima di 10 pagg. su 196.
Scarica il documento per vederlo tutto.
Sistemi Operativi - Appunti Pag. 31
Anteprima di 10 pagg. su 196.
Scarica il documento per vederlo tutto.
Sistemi Operativi - Appunti Pag. 36
Anteprima di 10 pagg. su 196.
Scarica il documento per vederlo tutto.
Sistemi Operativi - Appunti Pag. 41
1 su 196
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher MarcoCarbone 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 Messina o del prof Scarpa Marco.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community