vuoi
o PayPal
tutte le volte che vuoi
Capacità di trovare gli errori e inviare avvisi su essi
Un S.O. è un software. Dunque, considerando un singolo core, il S.O. contiene funzioni che devono essere eseguite per controllare l'esecuzione degli altri programmi. C'è, dunque, un'alternanza fra S.O. e programmi applicativi. Nel fare questo passaggio, c'è il rischio che il processore perda il controllo (es: variazione clock). Ciò viene evitato grazie al richiamo del S.O. a ogni ciclo di clock, in modo che possa velocemente controllare la situazione ed eventualmente rimandare in esecuzione il comando iniziale.
S.O. in memoria come software
Evoluzione dei S.O.
Ci sono varie ragioni per cui i S.O. devono evolversi:
- upgrade dell'hardware
- nuovi tipi di hardware → es: passaggio da telefoni con tastiera a schermi capacitivi
- nuovi servizi
- errori, bug da dover riparare → gli aggiornamenti stessi possono creare altri bug, anche perché vengono
Distribuiti per hardware molto diversi fra loro
Step di evoluzione:
Si è partiti da semplici programmi seriali da caricare ogni volta fisicamente nel calcolatore,oltretutto molto costoso.
Si è cercato sempre di sfruttare al massimo il processore
Serial processing
Non c'erano i sistemi operativi, ma sono hardware e sviluppatori che lavoravano su schede perforate per poter utilizzare il linguaggio macchina. Il S.O. era praticamente implementato dagli umani
Simple Batch Systems
Il sistema prende in carico il job che viene sottomesso dal programmatore. Il monitor processa i vari job e li mette insieme come input. Alla fine, il risultato viene ritornato al monitor. L'utente, dunque, non ha più l'accesso diretto al processore. Il linguaggio utilizzato per scrivere i job era il linguaggio Assembly.
Sistemi operativi 3
Caratteristiche hardware del monitor
Protezione in memoria: sia tra i vari job sia fra i job e il monitor
Timer: impedire a un job di monopolizzare il
sistema → timer impostato all'inizio di ogniCapacità della memoria (quanti programmi in contemporanea riesce a contenere). Esempio: Time-Sharing Systems
Prima, tutta la capacità di calcolo era nel main-frame. L'utente, però, spesso vuole interagire con il sistema, ottenere dei risultati dal main-frame.
Sistemi operativi 5
Idea: invece di allocare l'esecuzione di un programma in maniera seriale, si suddivide il tempo del processore fra più utenti in modo da permettere a più utenti di accedere al sistema illudendosi di essere gli unici.
L'obiettivo è minimizzare il tempo di risposta per ogni utente, in modo da minimizzare l'uso del tempo del processore e non far aspettare l'utente più di qualche secondo.
Esempi di Time-Sharing Systems
CTSS: memoria con 32000 parole a 36 bit di spazio, di cui 5000 riservate al monitor. Un clock genera un interrupt ogni circa 0,2 secondi che permette l'intervento del sistema operativo per scegliere cosa eseguire e che utente servire.
A ogni cambio programma, i dati del vecchio programma dovevano essere salvati in memoria secondaria per permettere il salvataggio dei nuovi in memoria primaria.
Ogni job inizia dalla 5000esima parola.
Schema esempio:
Processo
Un processo può essere definito come: un programma in esecuzione - talvolta, uno stesso programma può puntare a istruzioni diverse (es: Chrome con più pagine aperte). Stesso codice ma istruzioni diverse.
Sistemi operativi 6
Un'istanza di un programma è un'entità che può essere assegnata a ed eseguita da un processore - sequenza di caratteri.
Il processo è il concetto fondamentale su cui ruota tutto il S.O., che si occupa della loro gestione.
I processi sono le strutture dati che vengono manipolate e gestite dal S.O.. Serve, dunque, una struttura per rappresentare i processi.
Il S.O. associato a un processo deve tenere conto di:
- programma
- prossima istruzione da eseguire
- stato del programma
- memorizzazione degli activation record nello stack
Esecuzione per sapere cosa dovrà essere eseguito e come (funzioni ricorsive, loop...) cambio di processo in esecuzione (comunicazione con memoria primaria)
Sviluppo dei processi
Nel corso del tempo, i processi si sono sviluppati per risolvere problemi di 3 tipi principali di computer systems:
- Multiprogramming Batch Operation: switch del processore fra i vari programmi presenti nella memoria principale
- Time-Sharing: essere rapidamente responsivo per l'utente individuale ma poter servire più utenti simultaneamente
- Real-Time Transaction Systems: un certo numero di utenti manda query o inserisce dati (da aggiornare in tempo reale) in un database
Errori
La scrittura e lo sviluppo di sistemi operativi ha generato diversi errori legati, spesso, a un'interazione impropria fra processi.
Le principali cause di questi errori sono:
- Sincronizzazione impropria: un programma deve aspettare che i dati a esso necessari siano disponibili nel buffer. Tuttavia, se vi è un design sbagliato
altroesempio si ha quando due programmi che stanno controllando due dispositivi diversi devono aspettare l'uno il risultato dell'altro per procedere.
Componenti di un processo
Tre componenti:
- un programma eseguibile
- i dati associati necessari al programma (variabili, spazio di lavoro, buffers...)
- lo stato di processo del programma
Lo stato di processo del programma in esecuzione è salvato in memoria primaria. Quando vi è uno switch, questo stato viene salvato in memoria secondaria per mettere in memoria primaria lo stato di processo del nuovo programma.
Lo stato di processo, inoltre, permette al S.O. di supervisionare e controllare il processo, sapere la sua priorità e se sta aspettando la risposta di un certo dispositivo I/O
Sistemi operativi 8
Tutta l'informazione necessaria, fra cui lo stato del processo, è salvata nel context.
Gestione della memoria
Il S.O. si occupa di 5 metodi di gestione della memoria:
- isolamento dei processi → i processi non
Il principio di indirizzi virtuali viene utilizzato nella memoria virtuale, che permette di indirizzare una quantità di memoria maggiore rispetto alla memoria RAM disponibile. I dati vengono memorizzati in memoria secondaria, poiché non possono essere tutti contenuti nella RAM contemporaneamente. È compito del sistema operativo portare in memoria primaria i dati e le istruzioni necessarie per l'esecuzione del programma.
L'intero programma è salvato in memoria secondaria e durante l'esecuzione, il sistema operativo porta gradualmente i dati e le istruzioni necessarie dalla memoria secondaria alla memoria principale. La traduzione degli indirizzi virtuali in indirizzi fisici richiederebbe teoricamente del tempo, ma i processori sono progettati per ridurre al minimo il tempo necessario per questa traduzione.
In questo modo, è possibile eseguire contemporaneamente più processi la cui somma totale di spazio occupato sarebbe decisamente maggiore della memoria principale disponibile.
portando lì solamente le parti dei processi necessarie in quella fase di esecuzione e lasciando il resto in memoria secondaria. Sono necessari anche degli algoritmi per gestire il caso in cui la memoria primaria sia satura e sia necessario trasferire lì dei dati dalla memoria secondaria. Bisogna decidere cosa viene eliminato dalla memoria primaria (copiandolo prima in memoria secondaria).
Paging
Per migliorare il trasferimento dei dati da memoria secondaria a primaria e la loro scelta a runtime, l'area dati di un programma viene divisa in un numero finito di pagine di dimensione fissa.
Vantaggio: il programma viene visto come composto da una serie di pagine → il suo indirizzo virtuale è dato da:
numero di pagine offset relativo all'