Sistemi Operativi-01 PDF - Appunti Sapienza Università di Roma

Document Details

Uploaded by Deleted User

Sapienza Università di Roma

Fabio De Gaspari

Tags

Sistemi operativi informatica appunti insegnamento

Summary

These are lecture notes for a course on Operating Systems, a second channel course at Sapienza University in Rome's Department of Computer Science. The course covers foundational concepts and details the examination structure and rules for both on-site and remote learners.

Full Transcript

Sistemi Operativi Modulo I Secondo canale Corso di Laurea in Informatica Nozioni di Base Fabio De Gaspari Sapienza Università di Roma Dipartimento di Informatica slides by: Igor Melatti Informazioni Generali sul Corso Sistemi Operativi (12 CFU): c...

Sistemi Operativi Modulo I Secondo canale Corso di Laurea in Informatica Nozioni di Base Fabio De Gaspari Sapienza Università di Roma Dipartimento di Informatica slides by: Igor Melatti Informazioni Generali sul Corso Sistemi Operativi (12 CFU): corso obbligatorio per studenti della triennale in Informatica, sia in presenza che teledidattica Il corso è svolto solo in presenza È necessario attenersi strettamente alle regole riportate qui: www.uniroma1.it/covid-sapienza Informazioni Generali sul Corso Per il corso in presenza ci sono 2 canali Chi è del secondo canale fa l’esame con me, chi è del primo canale fa l’esame con il prof. Tolomei Le uniche eccezioni ammesse sono quelle relative ai cambi di canale ufficiali ovvero, seguendo le istruzioni di http://www.studiareinformatica.uniroma1.it/laurea/ assegnazione-canale/cambio-canale La precedente regola non vale per gli studenti in teledidattica, i quali faranno tutti l’esame con il professore che sará assegnato al corso L’esame sia per gli studenti in presenza del canale 2 che in teledidattica si terrá comunque allo stesso tempo. Informazioni Generali sul Corso Sistemi Operativi è un corso a 2 facce Da un punto di vista delle lezioni frontali e delle modalità d’esame, è diviso in 2 corsi indipendenti: modulo 1 e modulo 2 modulo 1 adesso, modulo 2 nel secondo semestre 6 CFU per ogni modulo anche i docenti sono diversi Da un punto di vista della verbalizzazione, è un esame solo su Infostud, troverete solo Sistemi Operativi, senza nessun riferimento ai moduli l’esame verbalizzato vale 12 CFU Informazioni Generali sul Corso Per arrivare a verbalizzare, occorre superare entrambi i moduli come detto, occorre fare un esame, con determinate regole, per superare il modulo 1 e un altro esame, con altre regole, per superare il modulo 2 anche le date degli appelli saranno diverse le regole d’esame per ciascun modulo potrebbero prevedere più di una singola prova per ciascun modulo ad es.: scritto un giorno ed orale un altro Il voto finale su Infostud sarà la media aritmetica tra gli esami dei 2 moduli Informazioni Generali sul Corso Un po’ di conseguenze (valide per chi è in corso, ovvero attualmente all’inizio del secondo anno): non potrete verbalizzare prima di giugno a gennaio e febbraio, che voi superiate o no l’esame, la verbalizzazione su Infostud sarà “Rinuncia” Un po’ di conseguenze (valide per tutti): se superate lo scritto in un appello, ma ancora non avete fatto il modulo 2, la verbalizzazione sarà “Rinuncia” se per un esame “normale” (non a moduli) ci sono n appelli su Infostud, per Sistemi Operativi ne vedrete 2n per ogni appello, c’è un esame per il primo modulo e uno per il secondo attenzione: gli appelli del modulo 2 di gennaio/febbraio non sono per chi è adesso all’inizio del secondo anno come distinguerli? guardando la descrizione dell’appello e, soprattutto, consultando il sito del corso (ora ci arriviamo) Informazioni Generali sul Corso Validità dei voti dei singoli moduli: c’è una regola semplice I moduli possono essere superati in qualsiasi ordine quindi, va bene anche superare prima il modulo 2 e poi il modulo 1 Una volta superato un modulo, si ha tempo fino all’anno solare successivo per superare anche l’altro ad esempio: se si supera il modulo 1 a gennaio 2021, occorre superare il modulo 2 entro settembre 2022 ad esempio: se si supera il modulo 2 a settembre 2021, occorre superare il modulo 1 entro settembre 2022 se si ha diritto all’appello straordinario, allora anche novembre 2022 ad esempio: se si supera il modulo 1 a settembre 2021, e il modulo 2 a gennaio 2023, occorre nuovamente superare il modulo 1 entro settembre (o novembre) 2024 Informazioni Generali sul Corso Da qui in poi, si tratterà solo del primo modulo, secondo canale e teledidattica Docente: De Gaspari Fabio Docente teledidattica: Hitaj Dorjan Dove trovare: sito del corso: https://sites.google.com/di.uniroma1. it/sistemi-operativi-modulo-i/home materiale didattico: https: //classroom.google.com/u/1/c/NjI2MTI1MDE5MzAx Ogni settimana 2 lezioni per 5 ore complessive Regole per gli Esami Ci sono 5 appelli d’esame nel corso dell’anno, più due “straordinari” uno a gennaio (subito dopo la fine del corso), uno a fine gennaio/inizio febbraio, due a giugno/luglio e uno a settembre i due appelli straordinari (verso novembre il primo e verso aprile il secondo) sono riservati a studenti fuoricorso, ripetenti, part-time e lavoratori Per gli studenti con DSA o disabilità , vedere i contatti utili alla pagina https://www.uniroma1.it/it/pagina/ contatti-e-servizi-disabilita-e-dsa Regole per gli Esami Per partecipare agli appelli straordinari, occorre seguire le istruzioni pubblicate qui: http://www. studiareinformatica.uniroma1.it/appelli-d-esame Per gli appelli “normali”, è necessaria e sufficiente la prenotazione su Infostud attenzione a distinguere tra appelli per il modulo 1 e il modulo 2 Regole per gli Esami Gli appelli d’esame consisteranno in una prova scritta, divisa in due parti: la prima parte consiste in una serie di domande a risposta multipla la seconda parte consiste in una o più di domande aperte Per accedere alla seconda parte dell’esame, è necessario ottenere almeno il 80% del punteggio massimo nella prima parte. È possibile partecipare a qualsiasi numero di esami nel corso dell’anno accademico Per superare l’esame scritto occorre aver preso almeno 18 fa fede il voto dell’ultimo esame scritto sostenuto nota bene: questo significa che non superare un esame scritto invalida eventuali esami scritti superati in precedenza Regole per gli Esami: lo Scritto Le domande verteranno sempre sull’intero programma del corso Si tratta di un compito a quiz da fare direttamente al computer Ci saranno 25 domande da fare in 30 minuti Per ogni domanda, ci sono 4 opzioni, delle quali una sola è giusta Tutti gli studenti hanno lo stesso compito, ma con le domande (e le opzioni) mischiate Non è consentito, ovviamente, comunicare con altri studenti, né consultare archivi elettronici Regole per gli Esami: lo Scritto Per ciascuno viene calcolato il punteggio come segue: 1 punto per ciascuna risposta a crocette esatta un numero variabile di punti per le risposte a domanda aperta, in base al numero Per assegnare un voto, si valuteranno i punteggi di tutti i partecipanti all’esame, seguendo (cum grano salis) una distribuzione a campana di Gauss conseguenza: se ci sono copiature, molti compiti avranno punteggi vicini, e quindi il voto si abbassa. Morale: non conviene copiare non è necessario rispondere a tutte le domande chi fa il compito migliore rispetto agli altri ha il punteggio più alto Regole per gli Esami in Presenza Per ogni appello: 1 l’esame é fatto al computer se ci sono troppi iscritti, vengono divisi su più turni, ciascuno della durata di 1h circa 2 la correzione dello scritto viene fatta su richiesta Cosa Verrà Insegnato in Questo Corso Come fa un “computer” a funzionare? computer: qualsiasi dispositivo elettronico con capacità di calcolo e programmabile i più comuni: workstation (“computer fisso”), laptop (“computer portatile”), tablet, smartphone,... meno comuni ma importanti: cluster, minicomputer (Raspberry Pi, Arduino),... Com’è possible che... premendo un tasto sulla tastiera, io “produca” sullo schermo una lettera (se sto usando, ad esempio, un editor)? muovendo il mouse (o equivalente), io veda il cursore che si muove sullo schermo? cliccando con il mouse (o equivalente), io possa aprire un nuovo programma? mentre navigo con il browser, io possa velocemente passare a leggere le email o scrivere il codice di un programma, mentre in contemporanea scarico un file? Cosa Verrà Insegnato in Questo Corso Com’è possible che io possa scrivere un programma in maniera “semplice” e poi eseguirlo in modo altrettanto “semplice”? devo acquisire un dato da tastiera? myint = input(’Enter your input:’) (Python 3) int myint = keyboard.nextInt(); (Java) scanf("%d", &myint); (C) devo usare la RAM? myint = 3 (Python 3) int myint = 3; (Java e C) oggetto complesso = ClasseComplessa() (Python 3) ClasseComplessa oggettoComplesso = new ClasseComplessa(); (Java) StrutturaComplessa *oggettoComplesso = malloc(sizeof(StrutturaComplessa)); (C) Cosa Verrà Insegnato in Questo Corso Com’è possible che io possa scrivere un programma ed eseguirne contemporaneamente 2 istanze? programma Python o Java che cerca il carattere più comune in un file dato come argomento scrivo il codice, apro 2 diversi terminali e su ciascuno di questi eseguo il mio programma (con input diversi) il programma che ho scritto è lo stesso potrei quindi pensare che entrambe provino ad accedere alle stesse zone di memoria come mai le 2 esecuzioni, invece, non si danno fastidio, e calcolano correttamente il loro output? Cosa Verrà Insegnato in Questo Corso La risposta corta è “perché c’è un sistema operativo” La risposta un po’ più lunga e precisa è “perché c’è un sistema operativo che interagisce con l’hardware” negli esempi di sopra, giocano un ruolo importante anche le librerie ed i compilatori, che però alla fine si devono basare sul sistema operativo Con il corso di Architettura degli Elaboratori, avete cominciato ad intuire cosa succede a livello di hardware e di software di basso livello Ma manca un pezzo fondamentale, che viene colmato da questo corso: il sistema operativo Sistemi Operativi: Esempi Windows ultima versione: Windows 11 macOS ultima versione: macOS 13 Ventura (beta) Linux Ubuntu ultima versione: Ubuntu 22.04 LTS moltissimi altri sistemi operativi Linux-based iOS, Android Sistema Operativo Gestisce le risorse hardware di un sistema computerizzato uno o più processori memoria primaria (RAM) dispositivi di input/output memoria secondaria (dischi) rete... Il suo scopo è fornire un insieme di servizi agli utenti servizi sia per gli sviluppatori che per i semplici utilizzatori esempio: offre un ambiente di esecuzione “facilitato” alle applicazioni utente esempio: offre un ambiente grafico per eseguire applicazioni Componenti di un Computer Monoprocessore Nozioni di Base: Parti Principali Processore il cervello del computer: si occupa di tutte le computazioni Memoria Principale volatile: se si spegne il computer, se ne perde il contenuto talvolta chiamata memoria reale o primaria Moduli di input/output dispositivi di memoria secondaria (dischi...), non volatile dispositivi per la comunicazione (schede di rete...) altri dispositivi: tastiera, monitor, stampante, mouse,... “Bus” di sistema mezzo per far comunicare tra loro le parti interne del computer: processori, memoria principale, e moduli di input/output Registri del Processore Registri visibili dall’utente usati o da chi programma in assembler o dai compilatori di linguaggi non interpretati obbligatori per alcune istruzioni su alcuni processori facoltativi per ridurre accessi alla memoria principale linguaggi compilati (“vecchi”): C, C++, Fortran; linguaggi interpretati (“nuovi”): Python, Java Registri di controllo e di stato usati dal processore per controllare l’uso del processore stesso usati da funzioni privilegiate del SO per controllare l’esecuzione dei programmi Registri “interni” usati dal processore tramite microprogrammazione comunicazione con memoria ed I/O Registri Visibili dall’Utente Gli unici che possono essere usati direttamente (con il loro nome) quando si programma in linguaggio macchina (o assembler), ad es.: mov $5, %eax (x86 con sintassi AT&T) li $t1, 5 (MIPS, ad es. R3000A nella PlayStation) Possono contenere dati o indirizzi Nel caso contengano indirizzi, possono essere puntatori diretti registri-indice: per ottenere l’indirizzo effettivo, occorre aggiungere il loro contenuto ad un indirizzo base puntatori a segmento: se la memoria è divisa in segmenti, contengono l’indirizzo di inizio di un segmento es.: cs, ds, ss, es, fs, gs nel Pentium puntatori a stack: puntano alla cima di uno stack es.: esp per x86, $sp per MIPS Registri Interni Registro dell’indirizzo di memoria Memory Address Register, o MAR contiene l’indirizzo della prossima operazione di lettura/scrittura Registro di memoria temporanea Memory Buffer Register, o MBR contiene i dati da scrivere in memoria, o fornisce lo spazio dove scrivere i dati letti dalla memoria lw $s1, 0($s2): concettualmente, prima copia il contenuto di $s2 in MAR, poi legge dalla memoria in MBR, e infine copia da MBR in $s1 (microprogrammazione semplificata) Registro dell’indirizzo di input/output I/O address register Registro di memoria temporanea per l’input/output I/O buffer register Registri di Controllo e Stato Contatore di Programma (Program Counter, o PC) contiene l’indirizzo di un’istruzione da prelevare dalla memoria Registro di Istruzione (Instruction Register, o IR) contiene l’istruzione prelevata più di recente Stato di Programma (Program Status Word, o PSW) contiene le informazioni di stato, ad es: interrupt disabilitati Codici di condizione (o flag) singoli bit settati dal processore come risultato di operazioni esempi: risultato positivo, negativo, zero, overflow,... Vengono usualmente letti/modificati in modo implicito da opportune istruzioni assembler esempio: una jump modifica il PC Nel x86 sono considerati registri di controllo anche quelli per la gestione della memoria ad esempio, i registri cr0... cr4 gestiscono le tabelle delle pagine un bit di cr0 abilita la paginazione tout-court Esecuzione di Istruzioni Due passi Il processore legge (preleva, fase di fetch) istruzioni dalla memoria (principale) Il processore esegue ogni istruzione prelevata Prelievo ed Esecuzione di Istruzioni Il processore preleva l’istruzione dalla memoria principale Il PC mantiene l’indirizzo della prossima istruzione da prelevare Il PC è incrementato dopo ogni prelievo Se l’istruzione contiene una jump, il PC verrà ulteriormente modificato dall’istruzione stessa Registro dell’Istruzione L’istruzione prelevata viene caricata nell’IR Categorie di istruzioni Scambio dati tra processore e memoria Scambio dati tra processore e input/output Manipolazione di dati include operazioni aritmetiche solitamente solo con registri (MIPS), ma in alcuni processori anche direttamente in RAM (x86) Controllo modifica del PC tramite salti condizionati o non Operazioni riservate (dis)abilitazione interrupt (dis)abilitazione cache (dis)abilitazione paginazione/segmentazione Caratteristiche di una Macchina Ipotetica Esempio di Esecuzione di un Programma Interruzioni Paradigma dell’interazione hardware/software Interrompono la normale esecuzione sequenziale del processore come conseguenza, viene eseguito del software “di sistema”, che tipicamente non è stato scritto dall’utente che sta eseguendo un certo programma questo software di sistema, come si può intuire, è parte del sistema operativo Le cause sono molteplici, e danno luogo a diverse classi di interruzioni: da programma (sincrone) da I/O (asincrone) da fallimento hardware (asincrone) da timer (asincrone) Interruzioni Asincrone vs. Sincrone Le interruzioni da programma sono le uniche sincrone ovvero, hanno luogo come immediata conseguenza di una certa istruzione Le altre sono asincrone perché vengono tipicamente sollevate (molto) dopo l’istruzione che le ha causate addirittura, alcune non sono neanche causate dall’esecuzione di istruzioni Classi di Interruzioni Asincrone Interruzioni da input/output generate dal controllore di un dispositivo di input/output per la maggior parte, i dispositivi di input/output sono più lenti del processore quindi, il processore manda un comando al dispositivo di I/O e poi aspetta che il dispositivo lo “interrompa” quando è riuscito a completare la richiesta segnalano il completamento o l’errore di un’operazione di I/O Interruzioni da fallimento HW improvvisa mancanza di potenza (power failure) errore di parità nella memoria Interruzioni da comunicazione tra CPU per sistemi dove ce n’è più d’una Interruzioni da timer generate da un timer interno al processore permettono al sistema operativo di eseguire alcune operazioni ad intervalli regolari Per processori Intel, gli interrupt sono solo questi Classi di Interruzioni Sincrone Interruzioni di programma, causate principalmente da: overflow divisione per 0 debugging: single step o breakpoint riferimento ad indirizzo di memoria fuori dallo spazio disponibile al programma riferimento ad indirizzo di memoria momentaneamente non disponibile memoria virtuale: ci ritorneremo tentativo di esecuzione di un’istruzione macchina errata opcode illegale, oppure operando non allineato chiamata a system call (intenzionale!) Per processori Intel, queste vengono chiamate exception Interruzioni ed Istruzione di Ritorno Per le interruzioni asincrone, una volta che l’handler è terminato, si riprende dall’istruzione subito successiva a quella dove si è verificata l’interruzione questo, ovviamente, solo se la computazione non è stata completamente abortita come conseguenza dell’interruzione in realtà, potrebbe succedere che ci sia un process switch, ma ne parleremo nelle prossime lezioni comunque, quando e se la computazione ritornerà al processo interrotto, si ricomincia dall’istruzione successiva Con le eccezioni sincrone, non è detto faults: errore correggibile, viene rieseguita la stessa istruzione es.: page fault aborts: errore non correggibile, si esegue software collegato con l’errore es.: segmentation fault traps e system calls: si continua dall’istruzione successiva es. per traps: debugging Fase di Interruzione Ad ogni ciclo fetch-execute, viene anche controllato se c’è stata un’interruzione (o una exception) Se cosı̀ è, il programma viene sospeso e viene eseguita una funzione che gestisce l’interruzione (interrupt-handler routine) Interruzioni: Trasferimento del Controllo L’interrupt handler è una funzione particolare: nel programma utente non era prevista Sistema operativo e hardware collaborano per salvare le informazioni (almeno registro di stato e program counter) e settare il program counter normalmente, questo lo fa o il programmatore (se scrive direttamente in assembler) o il compilatore: è una chiamata a funzione non è stata scritta dal programmatore, ma fin qui niente di cosı̀ strano (esistono le librerie...) il fatto è che, nel punto in cui avviene questa “chiamata”, il programma utente non prevedeva affatto di effettuare la chiamata all’interrupt handler! soprattutto per le interruzioni “vere”; per le eccezioni, almeno si sa che è possibile che vengano sollevate per funzioni “normali” salvare anche il registro di stato è solitamente superfluo, qui può essere importante Interruzioni: Trasferimento del Controllo Interruzioni: Trasferimento del Controllo Interruzioni: Modifiche a Memoria e Registri Il processore sta eseguendo l’istruzione all’indirizzo N quando arriva un’interruzione, da gestire con l’handler all’indirizzo Y Interruzioni: Modifiche a Memoria e Registri L’handler è completato, si torna all’indirizzo N + 1 Se l’interruzione era una fault correggibile, si torna all’indirizzo N (es.: dopo un page fault) Interruzioni Disabilitate Interruzioni: Sequenziali ed Annidate I/O Programmato Il più vecchio modo di fare I/O L’azione viene effettuata dal modulo di I/O, non dal processore Setta i bit appropriati sul registro di stato dell’I/O Niente interruzioni Il processore controlla lo status finché l’operazione non è completa I/O da Interruzioni È un modo un po’ più moderno per fare I/O Il processore viene interrotto quando il modulo I/O è pronto a scambiare dati Il processore salva il contesto del programma che stava eseguendo e comincia ad eseguire il gestore dell’interruzione Non c’è inutile attesa Tuttavia, consuma molto tempo di processore, dal momento che ogni singolo dato letto o scritto interrompe l’esecuzione del processore Programma: Flusso di Controllo Programma: Flusso di Controllo Programma: Flusso di Controllo Accesso Diretto in Memoria È il metodo di I/O usato nei computer attuali Le istruzioni di I/O tipicamente richiedono di trasferire informazioni tra dispositivo di I/O e memoria Trasferisce un blocco di dati direttamente dalla/alla memoria Un’interruzione viene mandata quando il trasferimento è completato Più efficiente Multiprogrammazione Un processore deve eseguire più programmi contemporaneamente La sequenza con cui i programmi sono eseguiti dipende dalla loro priorità e dal fatto che siano o meno in attesa di input/output Alla fine della gestione di un’interruzione, il controllo potrebbe non tornare al programma che era in esecuzione al momento dell’interruzione Gerarchia della Memoria Dall’alto verso il basso Diminuisce la velocità di accesso Diminuisce il costo al bit Aumenta la capacità Diminuisce la frequenza di accesso alla memoria da parte del processore Gerarchia della Memoria: Memoria Secondaria Corrisponde all’outboard e all’offline storage Memoria “ausiliaria” ed “esterna” Non volatile: se si spegne il computer, il contenuto rimane Usata per memorizzare i files contenenti programmi o dati Gerarchia della Memoria: Memoria Cache Anche nell’inboard memory ci sono importanti differenze di velocità Infatti, la velocità del processore è maggiore della velocità di accesso alla memoria principale Per evitare eccessivi tempi di attesa, tutti i computer hanno una memoria cache Memoria piccola e veloce, che sfrutta il principio di località Cache e Memoria Principale Cache: Nozioni di Base Contiene copie di porzioni della memoria principale Il processore prima controlla se un dato è nella cache Se no, il corrispondente blocco di memoria principale viene caricato nella cache Siccome vale la località dei riferimenti, è probabile che il dato appena caricato serva ancora nell’immediato futuro in generale, i futuri riferimenti in memoria ricadranno probabilmente nel blocco appena caricato Gestione totalmente demandata all’hardware il programmatore non “vede” la cache, neanche se usa l’assembler quindi, non la “vede” neanche un compilatore e neanche il sistema operativo, gestita dall’HW della CPU Cache vs. Memoria Principale 2n 2n K >> C ; |Tag | = log2 K; tipicamente, K = 4 Lettura dalla Cache Cache: Nozioni di Base Capacità della cache cache anche piccole hanno un grande impatto sulle performance Misura dei blocchi i dati scambiati tra memoria e cache sono in quantità multiple di un blocco incrementare la misura del blocco aumenta il numero di accessi riusciti ma incrementarla troppo è controproducente: saranno di più anche i dati che vengono rimossi il che abbassa la probabilità di accesso riuscito Cache: Nozioni di Base Funzione di mappatura determina la locazione della cache nella quale andrà messo il blocco proveniente dalla memoria Algoritmo di rimpiazzamento sceglie il blocco da rimpiazzare algoritmo Least-Recently-Used (LRU): si rimpiazza il blocco usato meno di recente (quindi, più vecchio) Politica di scrittura determina quando occorre scrivere in memoria può accadere ogni volta che un blocco viene modificato (write-through) può accadere quando il blocco è rimpiazzato (write-back) occorre minimizzare le operazioni di scrittura questo vuol dire che la memoria può trovarsi in uno stato “obsoleto”, ovvero non in linea con il contenuto della cache La Cache nei Pentium i7 La Cache nei Pentium i7 Ogni cache line ha 64 byte e ogni word ha 64 bit, quindi K =8 Ci sono 2 cache di primo livello (L1), più altre 2 cache di secondo e terzo livello (L2 e L3) le 2 di primo livello sono l’una dedicata alle istruzioni, l’altra dedicata ai dati si va a cascata: dato un indirizzo RAM, prima si cerca in L1, se fallisce in L2, se fallisce in L3, e se fallisce ancora in memoria ovviamente, se si trova un dato in L2 e non in L1, L1 va aggiornata Le dimensioni della cache crescono da 32 KB per ciascuna delle L1, a 256 KB per L2, fino a 8MB per L3 Il sistema operativo può disabilitare il caching Linux non lo fa Politica di scrittura: la può decidere il sistema operativo Linux sceglie sempre il write-back Sistema Operativo Gestisce le risorse hardware di un sistema computerizzato uno o più processori memoria primaria (RAM) dispositivi di input/output memoria secondaria (dischi) rete... Il suo scopo è fornire un insieme di servizi agli utenti servizi sia per gli sviluppatori che per i semplici utilizzatori esempio: offre un ambiente di esecuzione “facilitato” alle applicazioni utente esempio: offre un ambiente grafico per eseguire applicazioni Strati e Utenti Quando si programma con un linguaggio interpretato, sostanzialmente ci si basa solo sulle “utilities” Servizi Offerti da un Sistema Operativo Esecuzioni di programmi app(licazioni) servizi anche più applicazioni e servizi contemporaneamente Accesso ai dispositivi di input/output nel caso dei dispositivi di memoria di massa, tramite filesystem Accesso al sistema operativo stesso shell Sviluppo di programmi compilatori, editor e debugger system calls visione semplificata della memoria RAM Servizi Offerti da un Sistema Operativo Rilevamento di e reazione ad errori errori di hardware interno ed esterno errori software richiesta di un applicativo non soddisfacibile Accounting (chi fa cosa) collezione di statistiche dell’uso del sistema monitoraggio delle performance usato per capire cosa occorre migliorare usato per far pagare in base all’uso del sistema Sistema Operativo Un programma che controlla l’esecuzione dei programmi applicativi gli prepara l’ambiente, li manda in esecuzione, risponde a loro eventuali richieste, gestisce la loro terminazione Un’interfaccia tra le applicazioni e l’hardware Obiettivi di un sistema operativo Convenienza Efficienza Capacità di evolvere Sistema Operativo Responsabile della gestione delle risorse funziona allo stesso modo del software “normale”: è un programma in esecuzione tuttavia, lo fa con privilegi più alti concede il controllo del processore ad altri programmi e controlla l’accesso alle altre risorse (RAM, I/O) Il Kernel La parte di sistema operativo che si trova sempre in memoria principale Contiene le funzioni più usate Letteralmente, sta per “nucleo” Restano fuori funzionalità che si usano per casi particolari ad es.: file system poco usati Evoluzione dei Sistemi Operativi I sistemi operativi “primitivi” (anni Quaranta) erano molto diversi da quelli attuali Si è arrivati alla situazione attuale gradualmente, tramite un’evoluzione Evoluzione dovute principalmente a: in seguito ad aggiornamento dell’hardware, o a nuovi tipi di hardware nuovi servizi correzione di errori Conoscere questa evoluzione storica è importante per capire i sistemi operativi moderni inoltre, alcune metodologie abbandonate potrebbero tornare utili in altri ambiti http://www.computerhistory.org/timeline/ Storia dei Sistemi Operativi Computazione seriale (anni Quaranta) nessun sistema operativo per fornire comandi ad un computer, si usavano speciali “console” con spie luminose ed interruttori, e una stampante per output Storia dei Sistemi Operativi Già all’inizio l’input viene parzialmente semplificato con dispositivi per leggere schede perforate (esistenti da 2 secoli) Per scrivere una scheda perforata, si poteva usare una speciale macchina da scrivere (ad es.: IBM 024 e 026) Storia dei Sistemi Operativi Semplice sistema non interattivo o batch (anni Cinquanta/Sessanta) programma esterno di monitoraggio software per controllare sequenze di eventi possibilità di raggruppare lavori (jobs) da eseguire insieme il programma, una volta concluso, ritorna il controllo al programma esterno di monitoraggio Linguaggio di controllo dei job dà istruzioni al monitor che compilatore usare che dati di input usare Caratteristiche Hardware Protezione della memoria non permette che la zona di memoria contenente il monitor venga modificata Timer impedisce che un job monopolizzi l’intero sistema Istruzioni privilegiate alcune istruzioni macchina possono essere eseguite solo dal monitor interruzioni i primi modelli di computer non le avevano Protezione della Memoria I programmi utente vengono eseguiti in modalità utente alcune istruzioni non possono essere eseguite Il monitor viene eseguito in modalità sistema o modalità kernel le istruzioni privilegiate possono essere eseguite le aree protette della memoria possono essere accedute Sistemi Batch: Sottoutilizzazione Più dell 96% del tempo è sprecato ad aspettare i dispositivi di I/O Programmazione Singola Il processore deve aspettare che le istruzioni di I/O siano completate prima di procedere Multiprogrammazione Se un job deve aspettare che si completi dell’I/O, allora il processore può passare ad un altro job Multiprogrammazione Esempio Istogrammi di Utilizzo Uso del Processore Prime 4 righe: media tra le percentuali del uniprogramming e del multiprogramming c’è un errore, il valore per la CPU uniprogramming è 26.7% (media tra 60%, 10%, 10%) Elapsed time: tempo per vedere completati tutti e 3 i job numero job completati Throughput: ore Mean response time: media dei tempi di completamento (nel caso di uniprogramming: 5, 20, 30 → 18.3) Sistemi Time Sharing Letteralmente, sistemi a condivisione di tempo (dagli anni Settanta) Uso della multiprogrammazione per gestire contemporaneamente più jobs interattivi Il tempo del processore è condiviso tra più utenti Più utenti contemporaneamente accedono al sistema tramite terminali Batch vs. Time Sharing Batch Time Sharing Scopo principale Massimizzare l’uso del Minimizzare il processore tempo di risposta Provenienza delle Comandi del job control Comandi dati da direttive al Sistemi language, sottomessi terminale Operativi con il job stesso Storia dei Sistemi Operativi Computazione seriale (anni Quaranta) Semplice sistema non interattivo o batch (anni Cinquanta/Sessanta) multiprogrammazione Time-Sharing: sistemi a condivisione di tempo (dagli anni Settanta) qui invece i job sono tipicamente interattivi Storia dei Sistemi Operativi: Risultati più Importanti Processi Gestione della memoria Sicurezza e protezione delle informazioni (privacy) Gestione dello scheduling e delle risorse Strutturazione del sistema Dal Job al Processo Il processo riunisce in un unico concetto il job non-interattivo e quello interattivo Incorpora anche un altro tipo di job che cominciò a manifestarsi dagli anni Settanta: quello transazionale real-time ad es.: prenotazione biglietti aerei Un’unità di attività caratterizzata da: un singolo flusso (thread) di esecuzione uno stato corrente un insieme di risorse di sistema ad esso associate Multiprogrammazione dei Processi: Difficoltà Errori di sincronizzazione gli interrupt si perdono o vengono ricevuti 2 volte Violazione della mutua esclusione se 2 processi vogliono accedere alla stessa risorsa, ci possono essere problemi Programmi con esecuzione non deterministica un processo accede ad una porzione di memoria modificata da un altro processo Deadlock (stallo) un processo A attende un processo B che attende A Gestione della Memoria Isolamento dei processi Protezione e controllo degli accessi Gestione (compresa allocazione/deallocazione) automatica Supporto per la programmazione modulare (stack) Memorizzazione a lungo termine Metodi attuali: paginazione + memoria virtuale Protezione dell’Informazione e Sicurezza Disponibilità (availability) il dover proteggere il sistema contro l’interruzione di servizio (DoS attacks) Confidenzialità garanzia che gli utenti non leggano informazioni per le quali non hanno l’autorizzazione Integrità dei dati protezione dei dati da modifiche non autorizzate Autenticità il dover verificare l’identità degli utenti, o la validità di messaggi e dati Pianificazione e Gestione delle Risorse Equità (fairness) dare accesso alle risorse in modo egualitario ed equo Velocità di risposta differenziata a seconda del tipo di processo Efficienza massimizzare l’uso delle risorse per unità di tempo (throughput), minimizzare il tempo di risposta, e servire il maggior numero di utenti possibile Elementi Principali di un Sistemi Operativo Nota: il “service call” o system call è in realtà anch’esso un interrupt (o eccezione, seguendo la terminologia Pentium) Struttura del Sistema Operativo Il sistema viene visto come una serie di livelli Ogni livello effettua un sottoinsieme delle funzioni del sistema Ogni livello si basa sul livello immediatamente più in basso, che effettua alcune operazioni di livello più basso Decomposizione del problema in vari sottoproblemi più semplici Livelli Livello 1 circuiti elettrici gli oggetti sono registri, celle di memoria, porte logiche le operazioni sono, ad esempio, resettare un registro o leggere una locazione di memoria Livello 2 insieme delle istruzioni macchina operazioni come add, subtract, load, and store Livello 3 aggiunge il concetto di procedura (o subroutine), con operazioni di chiamata e ritorno Livello 4 interruzioni Livelli: Multiprogrammazione Livello 5 processo come programma in esecuzione sospensione e ripresa dell’esecuzione di un processo Livello 6 dispositivi di memorizzazione secondaria trasferimento di blocchi di dati Livello 7 crea uno spazio logico degli indirizzi per i processi organizza lo spazio degli indirizzi virtuali in blocchi Livelli: Dispositivi Esterni Livello 8 comunicazioni tra processi Livello 9 salvataggio di lungo termine di file con nome Livello 10 accesso a dispositivi esterni usando interfacce standardizzate Livello 11 associazione tra identificatori interni ed esterni Livello 12 supporto di alto livello per i processi Livello 13 interfaccia utente Architettura di UNIX Kernel Tradizionale di UNIX Kernel Moderno di UNIX Kernel Moderno di Linux Compromesso tra kernel “monolitico” e “microkernel” monolitico: kernel tutto in memoria dal boot allo spegnimento microkernel: solo una minima parte del kernel in memoria, il resto caricato quando serve sempre in memoria: scheduler, sincronizzazione solo a richiesta: gestore memoria, filesystem, driver monolitico più efficiente come velocità, ma ovviamente occupa più memoria e rende difficile la modularità Quasi tutti i sistemi operativi moderni sono a kernel monolitico eccezione notabile: Mac OS X Linux è principalmente monolitico, ma ha i moduli alcune parti particolari possono essere aggiunte e tolte a richiesta dall’immagine in memoria del kernel essenzialmente, i diversi file system, i driver per determinati dispositivi di I/O, l’implementazione delle funzionalità di rete In questo corso... 1 Gestione dei processi 2 Scheduling dei processi 3 Gestione della memoria principale 4 Gestione della concorrenza tra processi 5 Gestione del deadlock 6 Gestione dell’input/output 7 Gestione dei file system 8 Nozioni basilari di sicurezza

Use Quizgecko on...
Browser
Browser