Estratto del documento

Sistemi operativi – Appunti esame

Donici Ionut Bogdan

Sezione 1 – Introduzione

  • Un sistema operativo è il software che gestisce l’hardware di un calcolatore, e fornisce un ambiente all’interno del quale sono eseguibili le applicazioni.

  • Le interruzioni sono uno strumento fondamentale utilizzato dall’hardware per interagire con il sistema operativo. Un dispositivo attiva un’interruzione inviando un segnale alla CPU per avvisarla che alcuni eventi richiedono attenzione. L’interruzione è gestita dal gestore delle interruzioni.

  • Per eseguiti, i programmi devono risiedere nella memoria principale (RAM, Random Access Memory) del calcolatore. Questa è infatti la sola area di memoria di grandi dimensioni direttamente accessibile dalla CPU.

  • La memoria centrale è un dispositivo volatile, poiché perde il suo contenuto quando manca l’alimentazione elettrica.

  • La memoria non volatile è un’estensione della memoria centrale ed è in grado di memorizzare in modo permanente grandi quantità di dati.

  • Il più comune dispositivo di memoria secondaria è il disco magnetico che può memorizzare sia dati che programmi.

  • I sistemi di memorizzazione di un calcolatore si possono organizzare in modo gerarchico secondo la velocità ed il costo. I livelli più alti rappresentano i dispositivi più rapidi, ma più costosi. Scendendo nella gerarchia, il costo per bit generalmente decresce, mentre di solito aumentano i tempi d’accesso.

  • Le moderne architetture degli elaboratori sono sistemi multiprocessore in cui ogni CPU contiene diverse unità di calcolo (core).

  • Per utilizzare al meglio la CPU, i sistemi operativi impiegano la multiprogrammazione (utilizzare il processore durante i periodi di I/O di un job per eseguire altri job), grazie alla quale diversi processi possono occupare la memoria contemporaneamente, assicurando che la CPU non resti mai inattiva.

  • Time-sharing:

    • È l’estensione logica della multiprogrammazione.
    • L’esecuzione della CPU viene suddivisa in un certo numero di quanti temporali.
    • Allo scadere di un quanto, il job corrente viene interrotto e l’esecuzione passa ad un altro job.
    • I passaggi (context switch) avvengono così rapidamente che più utenti possono interagire con i programmi in esecuzione.
  • Con i sistemi multitasking il concetto di multiprogrammazione è stato ulteriormente esteso per mezzo di algoritmi di scheduling della CPU che commutano rapidamente tra un processo e l’altro, offrendo così agli utenti tempi di risposta rapidi.

  • Per evitare che i programmi utenti interferiscano tra di loro con il sistema operativo, la CPU ha due modalità di funzionamento: la modalità utente e la modalità di sistema.

  • Diverse istruzioni sono privilegiate e si possono eseguire solamente in modalità di sistema. Tra queste vi sono le istruzioni per il passaggio alla modalità di sistema e le istruzioni per il controllo dell’I/O e per la gestione del time e delle interruzioni.

  • Un processo è l’unità fondamentale di lavoro in un sistema operativo. La gestione dei processi comprende aspetti come la loro creazione e cancellazione, nonché la messa a punto di meccanismi per la comunicazione reciproca e la sincronizzazione dei processi.

  • Un sistema operativo gestisce la memoria mantenendo traccia di quali parti di essa vengono usate e da chi. È sempre al sistema operativo, inoltre, che spetta l’allocazione dinamica ed il rilascio dello spazio di memoria.

  • Il sistema operativo gestisce l’archiviazione dei dati: ciò comprende la realizzazione del file system per i file e le directory, la gestione dello spazio sui dispositivi per la memorizzazione di massa.

  • I sistemi operativi forniscono meccanismi di protezione e per la sicurezza del sistema e degli utenti. La protezione controlla l’accesso, da parte dei processi o degli utenti, alle risorse che il sistema mette a disposizione.

  • La virtualizzazione consiste nell’astrazione dell’hardware di un computer in molteplici distinti ambienti di esecuzione.

  • I sistemi operativi utilizzano diverse strutture dati, tra cui: liste, pile, code, alberi e bitmap.

  • Vi sono diversi tipi di ambienti elaborativi, che includono l’elaborazione tradizionale, il mobile computing, i sistemi client–server, i sistemi peer-to-peer, il cloud computing e i sistemi operativi embedded real-time.

  • I sistemi operativi liberi e open-source sono resi disponibili come codice sorgente. Il software libero ha una licenza d’uso che permette il suo utilizzo gratuito, la sua ridistribuzione e la sua modifica. GNU/Linux, FreeBSD e Solaris sono esempi diffusi di sistemi operativi open-source.

Definizioni

Sistema Parallelo: un singolo elaboratore possiede più unità di elaborazione. Questi si dicono anche sistemi tightly coupled. Ci sono due tipi di tassonomie:

  • Tassonomia basata sulla struttura

    • SIMD – Single Instruction, Multiple Data (Le CPU eseguono all’unisono lo stesso programma su dati diversi)
    • MIMD – Multiple Instruction, Multiple Data (Le CPU eseguono programmi differenti su dati differenti)
  • Tassonomia basata sulla dimensione

    • Sistemi a basso parallelismo (pochi processori, in genere molto potenti)
    • Sistemi massicciamente paralleli (gran numero di processori, che possono avere anche potenza non elevata)

Sezione 2 – Architettura dei sistemi operativi

  • Un sistema operativo offre un ambiente per l’esecuzione dei programmi fornendo servizi ad utenti ed applicazioni. Indipendenza dall’hardware, comodità d’uso e la programmabilità.

  • I servizi estesi offerti da un sistema operativo sono:

    • Esecuzione dei programmi
    • Accesso semplificato ai dispositivi di I/O
    • Accesso controllato a dispositivi, file system, ecc.
    • Accesso al sistema
    • Rilevazione e risposta agli errori
    • Accounting
  • L’interfaccia permette ad un utente di attivare un programma, terminarlo, ecc. Ma allo stesso tempo grazie ad essa si può interagire con le componenti del sistema operativo. I tre approcci principali per l’interazione con un sistema operativo sono i seguenti:

    • Gli interpreti dei comandi (CLI, Command Line Interface)
    • Le interfacce grafiche
    • Le interfacce touch-screen

    Cambia quindi il linguaggio ma il concetto è sempre lo stesso.

  • Le chiamate di sistema forniscono un’interfaccia per i servizi resi disponibili da un sistema operativo. I programmi utilizzano un’API (Application Program Interface) come interfaccia per l’accesso ai servizi forniti dalle chiamate di sistema.

  • Le chiamate di sistema possono essere suddivise in sei categorie principali:

    • Controllo dei processi
    • Gestione dei file
    • Gestione dei dispositivi
    • Manutenzione delle informazioni
    • Comunicazione
    • Protezione
  • La libreria standard del linguaggio C fornisce l’interfaccia alle chiamate di sistema su sistemi UNIX e Linux.

  • I sistemi operativi includono anche una raccolta di programmi di sistema che offrono varie funzionalità agli utenti.

  • Un linker combina diversi moduli oggetto rilocabili in un unico file binario eseguibile. Un loader carica il file eseguibile in memoria, dove diventa idoneo per essere eseguito su una CPU disponibile.

  • Vi sono diversi motivi per cui le applicazioni sono specifiche del sistema operativo, tra cui differenti formati binari per i file eseguibili di un programma, i diversi set di istruzioni per CPU distinte e le chiamate di sistema che variano da un sistema operativo all’altro.

  • Un sistema operativo è progettato pensando a obiettivi specifici che determinano, in ultima analisi, le politiche (cosa deve essere fatto) del sistema operativo. Un sistema operativo implementa queste politiche attraverso meccanismi (come deve essere fatto) specifici.

  • La progettazione di un sistema operativo deve tenere conto di diverse caratteristiche quali: efficienza, manutenibilità, espansibilità e modularità. Queste caratteristiche però, presentano un trade-off:

    • Sistemi molto efficienti sono poco modulari
    • Sistemi molto modulari sono meno efficienti
  • Un sistema operativo monolitico non ha struttura; tutte le funzionalità sono contenute in un singolo file binario statico che viene eseguito in un unico spazio d’indirizzamento. Sebbene tali sistemi siano difficili da modificare, il loro principale vantaggio è l’efficienza.

  • Un sistema operativo stratificato è suddiviso in un certo numero di strati, in cui lo strato inferiore è l’interfaccia hardware e quello superiore è l’interfaccia utente. Sebbene i sistemi stratificati abbiano avuto un certo successo, questo approccio non è generalmente ideale per la progettazione a causa di problemi di prestazioni.

  • L’approccio microkernel per la progettazione di sistemi operativi utilizza un kernel minimale; la maggior parte dei servizi è eseguita come applicazione a livello utente. La comunicazione avviene tramite lo scambio dei messaggi.

  • Un approccio modulare per la progettazione di sistemi operativi fornisce i servizi del sistema operativo attraverso moduli che possono essere caricati e rimossi durante l’esecuzione. Molti sistemi operativi contemporanei sono progettati come sistemi ibridi e combinano un kernel monolitico con l’utilizzo di moduli.

  • Portabilità: Lo stesso sistema viene spesso proposto (Windows per fare esempio) per architetture differenti. Occorre quindi prevedere meccanismi per la generazione del Sistema Operativo specifico per l’architettura utilizzata. I parametri tipici per la generazione di un sistema operativo sono:

    • Tipo di CPU utilizzata
    • Quantità di memoria centrale
    • Periferiche utilizzate
    • Parametri numerici di vario tipo
  • Un boot loader carica il sistema operativo in memoria, esegue l’inizializzazione e avvia l’esecuzione del sistema.

  • Le prestazioni di un sistema operativo possono essere monitorate utilizzando contatori o tracing. I contatori sono una raccolta di statistiche a livello di sistema o di processo, mentre il tracing segue l’esecuzione di un programma attraverso il sistema operativo.

Sezione 3 – Introduzione alla concorrenza

  • Un sistema operativo consiste in un gran numero di attività che vengono eseguite più o meno contemporaneamente dal processore e dai dispositivi presenti in un elaboratore. Senza un modello adeguato, la coesistenza delle diverse attività sarebbe difficile da descrivere e realizzare. Il modello che è stato realizzato a questo scopo prende il nome di modello concorrente ed è basato sul concetto astratto di processo.

  • Un processo è un programma in esecuzione e lo stato dell’attività corrente di un processo è rappresentato dal contatore di programma e da altri registri. Un processo è un’entità dinamica, mentre un programma è una entità statica. Ogni processo viene eseguito ad una velocità finita ma sconosciuta.

  • La struttura di un processo è formata da quattro sezioni differenti:

    • Testo -> contenente il codice eseguibile
    • Dati -> contenente le variabili globali
    • Heap -> memoria allocata dinamicamente durante l’esecuzione del programma
    • Stack -> parametri, variabili locali a funzioni/procedure
  • Un processo può trovarsi in uno dei seguenti stati:

    • New: Si crea il processo
    • Running: Le sue istruzioni vengono eseguite
    • Waiting: Il processo attende che si verifichi qualche evento
    • Ready: Il processo attende di essere assegnato ad un’unità di elaborazione
    • End: Il processo ha terminato l’esecuzione
  • Un blocco di controllo del processo (PCB, process control block) è la struttura dati del kernel che rappresenta un processo in un sistema operativo.

  • Il ruolo dello scheduler dei processi è selezionare un processo disponibile da eseguire su una CPU.

  • Un sistema operativo esegue un cambio di contesto quando passa da un processo a un altro.

  • fork() e CreateProcess() sono le chiamate di sistema utilizzate per creare processi su sistemi UNIX e Windows.

  • Un tema centrale nella progettazione dei sistemi operativi riguarda la gestione di processi multipli:

    • Multiprogramming: più processi su un solo processore, il parallelismo è apparente
    • Multiprocessing: più processi su una macchina con processori multipli, il parallelismo è reale
    • Distributed processing: più processi su un insieme di computer distribuiti ed indipendenti l’uno dall’altro, anche in questo caso il parallelismo è reale
  • La concorrenza la possiamo trovare principalmente nelle seguenti aree:

    • Applicazioni multiple: la multiprogrammazione è stata inventata affinché più processi indipendenti condividano il processore
    • Applicazione strutturate su processi: estensione del principio di progettazione modulare; alcune applicazioni possono essere progettate come un insieme di processi o thread concorrenti
    • Struttura del sistema operativo: molte funzioni del sistema operativo possono essere implementate come un insieme di processi o thread
  • Notiamo ora le differenze tra il multiprocessing (più processori) e multiprogramming (un singolo processore):

    • In un singolo processore, processi multipli sono alternati nel tempo per dare l’impressione di avere un multiprocessore. Ad ogni istante, al massimo un processo è in esecuzione. Si parla di interleaving.
    • In un sistema multiprocessore: più processi vengono eseguiti simultaneamente su processori diversi, i processi sono alternati nello spazio. Si parla di overlapping.

    A prima vista si potrebbe pensare che queste differenze comportino problemi distinti (in un caso l’esecuzione è simultanea e nell’altro caso la simultaneità è solo simulata), in realtà presentano gli stessi problemi, ovvero non è possibile predire la velocità relativa dei processi.

  • I problemi derivano dal fatto che non è possibile predire gli istanti temporali in cui vengono eseguite le istruzioni e dal fatto che i due processi accedono ad una o più risorse condivise.

Definizioni

Concorrenza: Due programmi si dicono in esecuzione concorrente se vengono eseguiti in parallelo (sia esso reale o apparente). La concorrenza è l’insieme di notazioni per descrivere l’esecuzione di due o più programmi. È anche l’insieme di tecniche per risolvere i problemi associati all’esecuzione concorrente, quali comunicazione e sincronizzazione.

Thread: Un thread rappresenta l’unità di base che utilizza la CPU. I thread appartenenti a uno stesso processo condividono molte risorse del processo, inclusi codice e dati.

Race condition: Si dice che un sistema di processi multipli presenta una race condition qualora il risultato finale dell’esecuzione dipenda dalla temporizzazione con cui vengono eseguiti i processi. Per scrivere un programma concorrente è necessario eliminare la race condition.

Sezione 4 – Interazioni tra processi

  • È possibile classificare l’interazione tra processi in base a quanto questi siano consapevoli l’uno dell’altro. Ci sono tre livelli di consapevolezza, sostanzialmente:

    • Processi totalmente ignari l’uno dell’altro: sono processi non progettati per lavorare insieme, ma nonostante questo vivono in un ambiente comune. L’interazione avviene per il fatto che questi competono per le stesse risorse e devono sincronizzarsi nella loro utilizzazione. Il sistema operativo ha il compito di arbitrare questa competizione, fornendo meccanismi di sincronizzazione.

    • Processi indirettamente a conoscenza l’uno dell’altro: sono processi che condividono risorse al fine di scambiarsi informazioni, questi non si conoscono in base ai loro Id, ma interagiscono indirettamente tramite le risorse condivise. L’interazione avviene per il fatto che questi cooperano per qualche scopo e devono sincronizzarsi nell’utilizzazione delle risorse. Il sistema ha il compito di facilitare la cooperazione, fornendo meccanismi di sincronizzazione.

    • Processi direttamente a conoscenza l’uno dell’altro: sono processi che comunicano l’uno con l’altro sulla base dei loro Id, la comunicazione è diretta ed è spesso basata sullo scambio di messaggi. L’interazione avviene per il fatto che questi cooperano per qualche scopo e comunicano informazioni agli altri processi. Il sistema operativo ha lo scopo di facilitare la cooperazione, fornendo meccanismi di comunicazione.

  • I programmi concorrenti devono possedere le seguenti proprietà:

    • Safety: i processi non devono interferire l’uno con l’altro in modo negativo.
Anteprima
Vedrai una selezione di 12 pagine su 54
Appunti Sistemi Operativi Pag. 1 Appunti Sistemi Operativi Pag. 2
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Sistemi Operativi Pag. 6
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Sistemi Operativi Pag. 11
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Sistemi Operativi Pag. 16
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Sistemi Operativi Pag. 21
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Sistemi Operativi Pag. 26
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Sistemi Operativi Pag. 31
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Sistemi Operativi Pag. 36
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Sistemi Operativi Pag. 41
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Sistemi Operativi Pag. 46
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Sistemi Operativi Pag. 51
1 su 54
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 bogdan.donici 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 Camerino o del prof Mostarda Leonardo.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community