I SISTEMI OPERATIVI
I SISTEMI OPERATIVI → insieme di API (Application Programming Interface) che agisce da intermediario
tra l’utente del computer e l’hardware:
●distribuzione risorse;
●controllo esecuzione programmi utente e operazioni su dispositivi di I/O;
●kernel (unico programma sempre attivo). ● UTENTE → persone/ altri computer
● PROGRAMMI APPLICATIVI → definizione
modalità di utilizzo delle risorse fisiche
● SISTEMA OPERATIVO → controllo e
coordinazione dell’uso dell’hardware da
parte dei programmi attuati dall’utente
● HARDWARE → fornitura risorse fisiche
(CPU, memoria, dispositivi I/O)
● SISTEMI A LOTTI → grandi macchine controllate da console che leggono e scrivono schede perforate
● I SISTEMI MAINFRAME → sistemi più veloci perché raggruppano job (processi) similari in batch (lotti) e
cedono loro il controllo in modo ordinato
● SISTEMI MULTIPROGRAMMATI → si mantengono più job in memoria in modo da tenere la CPU in
continua attività. Bisogna sapere quali e quanti job caricare in memoria (job scheduling) e quale tra
quelli caricati far eseguire dalla CPU (CPU scheduling);
● SISTEMI TIME-SHARING → ogni processo utente in memoria dispone di una porzione di tempo e
allo scadere della quale la CPU viene allocata al successivo (S.O. interattivo e aperto a più utenti)
● I SISTEMI DESKTOP → PC comodo e veloce per singolo utente che supporta diversi tipi di S.O.
● I SISTEMI MULTIPROCESSORE (paralleli) → processori accoppiati che condividono memoria e clock.
I vantaggi sono: maggiore quantità di elaborazione effettuata, economia (dischi condivisi), aumento
dell’affidabilità (degradazione progressiva e tolleranza a i guasti).
Si dividono in: AMP(asimmetrico) → il processore master organizza gli altri a cui sono assegnati specifici
lavori e SMP(simmetrico) → ogni processore esegue una copia del S.O. (più job contemporaneamente →
problemi: sovraccarico CPU e condivisione risorse)
● I SISTEMI DISTRIBUITI (debolmente accoppiati) → elaborazione distribuita tra processori distinti
collegati da reti. Possono essere sistemi client-server o peer-to-peer. Vantaggi: condivisione risorse,
rapidità di calcolo, affidabilità e comunicazione. Svantaggi: connessione costante alla rete LAN o WAN)
● I SISTEMI CLUSTER → più sistemi che condividono le periferiche (a seguito di un guasto in una
macchina il cluster head assegna la task ad un’altra così che l’utente nota solo una pausa nell’erogazione
del servizio). Si dividono in: asimmetrico → agisce un solo server per volta (hot-standby-mode) e
simmetrico → tutti i server eseguono e si controllano a vicenda (macchine ugualmente performanti).
● I SISTEMI REAL-TIME → adoperati in caso di vincolo temporale sull’operazione (di solito eseguono
controlli). Si dividono in: hard real-time → rispetto dei tempi, uso delle memorie volatili, non compatibili
con sistemi time-sharing e general purpose e soft real-time→ priorità ai processi critici, tolleranza tempi.
● I SISTEMI PALMARI (Personal Digital Assistant) → telefoni, tablet… con memoria (sol: cloud), processori
e alimentazione limitati.
GLI AMBIENTI DI ELABORAZIONE
● Elaborazione tradizionale → PC, server con accesso a distanza
● Elaborazione basata sul web → client-server senza collocazione a cui si può accedere a distanza
● ELaborazione embedded → mobile computing con caratteristiche del S.O. limitate e accesso a distanza
L’ARCHITETTURA DEL CALCOLATORE
IL FUNZIONAMENTO DI UN CALCOLATORE GENERAL PURPOSE
CPU e controller dei dispositivi di I/O (dotati di buffer
= memoria tampone) concorrono per l’accesso alla
memoria utilizzando word da 64 bit e segnali di
interrupt. Programma di bootstrap, salvato in una
ROM, avvia e inizializza le funzioni del sistema.
Carica il kernel del S.O. che esegue il primo
processo e attende eventi.
Nei moderni S.O. gli eventi sono segnalati da un interrupt hardware (segnale alla CPU generabile in
qualsiasi momento) o software (generabile eseguendo una chiamata di sistema). Il vettore degli interrupt
contiene gli indirizzi di partenza di tutte le routine di gestione dell’interrupt (interrupt handler) in cui sono
definite le azioni da eseguire per gestire ogni tipo di interrupt verificabile. Prima di lanciare la routine, vanno
salvati l’indirizzo che ha chiamato l’interrupt e lo stato della CPU, in modo da poter riprendere l’operazione in
corso una volta terminata la routine. Un processo chiede l’intervento del S.O. eseguendo una chiamata di
sistema. Polling (scansione degli interrupt): si effettua una scansione dei dispositivi, interrogando ognuno e
cercando una conferma su una eventuale richiesta di interrupt inviata. Quando un dispositivo che ha
generato un interrupt viene interrogato, invierà una conferma al processore che avvierà la routine di gestione
dell’interrupt relativa a tale dispositivo. Definendo la sequenza di scansione, si definisce anche la priorità di
ogni dispositivo. Questa attività richiede molto tempo (CPU in busy waiting: attende controllando
periodicamente il verificarsi di una certa condizione).
LA STRUTTURA DI INPUT/OUTPUT
● I/O SINCRONO → interrupt software che restituisce il controllo al processo solo al termine
dell’operazione. Si esegue un processo per volta: l’attesa è gestita dal comando di wait che aspetta
l’interrupt di ritorno oppure dal wait loop con una jump che varia stato solo al verificarsi di un interrupt.
● I/O ASINCRONO → interrupt hardware che restituisce il controllo al processo senza aspettare il
completamento dell’operazione. Si possono eseguire più processi contemporaneamente, quindi si tiene
traccia dello stato sulla Device Status Table (con tipo e indirizzo del dispositivo), mentre se il dispositivo è
occupato, si inserisce la richiesta nella coda d’attesa dello stesso.
Alle operazioni di I/O è data una bassa priorità in quanto la maggior parte di questi richiede poco tempo di
CPU e tanto per il trasferimento dati. Invece, per quelli ad alta velocità si usa il DMA (Direct Memory Access)
che sposta blocchi di dati senza l’intervento della CPU (interrupt a blocco, non a byte). La memoria può
trasferire una sola parola per volta quindi il DMA ruba cicli di memoria alla CPU rallentandone l’esecuzione.
LA STRUTTURA DELLA MEMORIA
● memoria centrale RAM, collegata direttamente alla CPU che la vede come un vettore di words e la
controlla tramite i comandi load e store.
I dispositivi di I/O possono trasferire dati dai propri registri alla memoria centrale con strutture:
○ I/O mappato in memoria → Quando la CPU quando vuole inviare dei byte, ne scrive uno nel registro
dei dati e setta il bit nel registro di controllo per avvisare che il byte è disponibile, il dispositivo prende il
byte, azzera il bit di controllo segnalando alla CPU che è pronto per il prossimo byte
○ I/O programmato → la CPU interroga ciclicamente il bit di controllo
○ I/O interrupt driven → la CPU riceve un interrupt quando il dispositivo è disponibile
● memoria secondaria in grado di mantenere permanentemente dati e programmi
● disco magnetico → piatto sottile di metallo o vetro ricoperto di materiale ferromagnetico e diviso in tracce
e settori che gira su se stesso. Le testine del pettine eseguono le operazioni su (C,T, S) dopo aver trovato
i giusti cilindro (search time), traccia e settore (latenza rotazionale) + transfer rate.
Gerarchia: registri, cache, RAM, disco elettronico, disco magnetico, disco ottico, nastro magnetico (caching).
LA PROTEZIONE HARDWARE → multiutenza e condivisione delle risorse implicano più possibilità di bug
che non devono compromettere altri programmi: si distingue la modalità supervisor (0) da user (1) e in caso
di anomalie si passa dal secondo al primo (masking).
● I/O → un programma utente non deve mai poter ottenere il controllo della macchina in modalità
supervisore in quanto potrebbe modificare le routine contenute nel vettore degli interrupt;
● MEMORIA → si definiscono un registro base con il più piccolo indirizzo legale (ammissibile) della
memoria fisica e un registro limite con la dimensione della gamma degli indirizzi (massima estensione),
modificabili solo con istruzioni privilegiate
● CPU → si evita il caso in cui un processo monopolizzi la CPU utilizzando un timer decrementato ad ogni
colpo di clock: a 0 si genera un interrupt e il controllo passa al S.O. (genera errore o assegna più tempo).
Questo time slice è utilizzato anche per i sistemi time-sharing o multiutente oppure per calcolare il tempo
rispetto ad un dato istante iniziale.
LA STRUTTURA DEI SISTEMI OPERATIVI
LE COMPONENTI DEL SISTEMA OPERATIVO
● GESTIONE DEI PROCESSI → il process manager gestisce l’esecuzione (generazione, sospensione…)
di ogni prompt → programma → processo e la sincronizzazione e la comunicazione fra questi. Ogni
processo necessita dell’accesso alle risorse (CPU, file, I/O…) per essere portato a termine.
● GESTIONE DELLA MEMORIA CENTRALE → la RAM è un vettore volatile di byte,ciascuno dei quali
caratterizzato da un proprio indirizzo accessibile direttamente da CPU e dispositivi di I/O. Il S.O. deve
tenere traccia delle memorie utilizzate e da chi, decidere quali processi caricare nella memoria disponibile
e allocare/deallocare lo spazio di memoria a seguito delle richieste delle app.
● GESTIONE DEI FILE → un file è un sistema di informazioni (programmi o dati)
sorgente o oggetti
semanticamente collegati secondo una caratteristica definita dal proprietario. Il S.O. può creare e
cancellare file e directory, supportare le primitive relative alla manipolazione di file e directory e
copiare/salvare file su unità di memoria secondarie (non volatili).
● GESTIONE DELL’I/O → si compone di: componente per la gestione della memoria con buffer e cache,
componente per la gestione del processo di stampa, interfaccia generale del driver e un driver per
ciascun dispositivo
● SISTEMA DI PROTEZIONE → insieme di meccanismi che controllano l’accesso alle risorse da parte
degli utenti del computer che: distingue uso autorizzato e non, specifica i controlli da effettuare e fornisce
un metodo per imporre i criteri stabiliti
● GESTIONE MEMORIA DI MASSA → il S.O. gestisce lo spazio libero, alloca le unità disco e schedula i
dischi utilizzati per memorizzare i dati della RAM (volatile).
● RETI INFORMATICHE → i processori che condividono memoria e clock ma lavorano sulla propria
memoria locale, comunicano tramite reti che rispettano il protocollo (sistemi distribuiti↑)
● INTERPRETE DEI COMANDI → l’utente impartisce ordini tramite istruzioni di controllo (creazione
processi, gestione di I/O, memorie sec. e RAM, accesso a file-system, protezioni e rete) alla shell (a
caratteri o grafica) che riceve comandi interattivi come oggetti eseguibili o comandi built-in (funzioni
semplici eseguiti dalla stessa shell) oppure script (programmi in linguaggio di shell). Per i comandi non
built-in crea (fork) dei processi per eseguire il comando.
I SERVIZI DEL SISTEMA OPERATIVO
● Esecuzione programma → rendere possibile
● Operazioni di I/O → mediazione utente-dispositivo
● Manipolazione file-system → lettura, scrittura, creazione ed eliminazione dei file da parte dei programmi
● Comunicazioni → memoria condivisa o invio messaggi tra processi
● Rilevamento errori → assicurare efficienza
● Allocazione risorse → garantire le giuste risorse a tutti gli utenti e processi
● Contabilità → tenere traccia dell’uso delle risorse
● Protezione e sicurezza → controllo degli accessi alle risorse
LE CHIAMATE DI SISTEMA → interfaccia tra processo in esecuzione e S.O. disponibili in linguaggio
assembler/C/C++/Java che passa i parametri tramite memorizzazione in registri o tabelle di memoria con
rispettivi indirizzi oppure push e pop da pila.
I PROGRAMMI DI SISTEMA → ambiente per sviluppo ed esecuzione programmi quali gestione e modifica
dei file, informazioni di stato, supporto ai linguaggi di programmazione e caricamento, esecuzione e
comunicazione tra programmi (+ applicativi).
LA STRUTTURA DEL SISTEMA
● struttura semplice: (MS-DOS) non ben divisa in moduli per garantire massima funzionalità nel minor
spazio, ma più vulnerabile a programmi errati
● monolitica → (UNIX) grande quantità di funzioni in un solo livello per le richieste dei programmi-utente
● struttura stratificata → diversi livelli tra hardware (0) e utente (N) abilitati all’utilizzo delle funzioni degli
strati inferiori (sventa errori ma è più difficile da progettare ed è più facile il sovraccarico delle system call)
● struttura a microkernel → (Mach) i kernel si occupano solo di processi, memoria e comunicazione
lasciando allo spazio utente le altre funzionalità
● struttura ibrida → (Apple Macintosh OSX) suddivisione con un microkernel tra gli strati: kernel
environment (Mach per gestione memoria, supporto RPC e IPC e schedulazione thread + BSD con
interfaccia a riga di comando, supporto per gestione file e rete e implementazione API POSIX + supporto
driver I/O + estensioni) + application environment + system services + Mach e BSD
● struttura modulare → (Solaris, Linux, Mac OS X, UNIX) comunicazione diretta tra moduli. Usa
programmazione orientata ad oggetti.
LE MACCHINE VIRTUALI
Dal modello a strati, hardware e kernel sono trattati come un blocco hardware puro.
Il computer fisico condivide le risorse per generare macchine virtuali: con CPU scheduling e memoria virtuale
crea l’illusione che ogni processo ha propri processore e memoria; con spooling (gestione asincrona delle
operazioni di I/O e dei processi) e file system fornisce lettori di schede e stampanti virtuali; con terminale
time-sharing fornisce la funzione di console.
Il disco fisico viene diviso in minidisk, spazi logici di dimensione variabile in base alle esigenze delle VM.
(S)vantaggi: supporto della modalità di controllo, ma funzionameto nella sola modalità utente; protezione
risorse in quanto le varie macchine virtuali comunicano solo tramite minidisk o reti VM; sviluppo S.O..
LA PROGETTAZIONE, L’IMPLEMENTAZIONE E LA GENERAZIONE DI UN SISTEMA OPERATIVO
Il progetto di un S.O. prevede ad alti livelli la scelta dell’HW e del tipo di sistema, mentre ai bassi livelli si
devono soddisfare obiettivi-utente (comodità, facilità, velocità, sicurezza) e obiettivi-sistema (facilità di
progettazione, implementazione e manutenzione, affidabilità ed efficienza).
LINEE GUIDA → distinzione tra meccanismi (come fare), più rigidi e politiche (cosa fare), più variabili.
IMPLEMENTAZIONE → passaggio dal linguaggio assembler ad alto livello (C e C++), più veloce, compatto,
leggibile (facile debugging) e portabile. Questo però porta ridotta velocità e maggiori esigenze di memoria.
GENERAZIONE → la selezione dei moduli può avvenire a runtime. Il boot (procedura di start-up di una
macchina) prevede due fasi: bootstrap program in cui viene eseguito il codice a sola lettura sulla ROM che
individua il kernel, lo carica in memoria centrale e ne inizia l’esecuzione e boot loader in cui un caricatore
d’avvio, installato nel MBR (Master Boot Record), recupera dal disco il bootstrap program del S.O. che a sua
volta carica il kernel. I PROCESSI
Un processo è un programma in esecuzione in modo
sequenziale e che comprende una sezione di codice e
un’attività corrente data da program counter, registri di
CPU, stack, sezione dati e heap.
Più processi possono essere associati al medesimo
programma (sezione di codice), ma saranno
considerati come due differenti istanze di questo
(attività corrente).
L’evoluzione di un processo segue gli stati: new
(submit: identificazione risorse + hold: ordinamento per
priorità), running, waiting, ready e terminated.
Il Process Control Block è una struttura dati che mantiene tutte le informazioni relative ad ogni processo.
Per passare la CPU tra processi si salva lo stato di esecuzione del precedente e si carica quello del nuovo.
Il Process Scheduler gestisce la coda di ready,usando criteri di priorità,eseguendo l’operazione di
microscheduling (si definisce l’ordine con cui i processi saranno eseguiti). Una volta che la CPU si libera si
effettua il context switching che passa il processo dallo stato di ready e poi di run, passando per la coda di
wait se deve attendere un evento o la disponibilità di una risorsa. Infine si trova in stato complete. Ogni PCB
nella coda ha un campo puntatore al prossimo PCB nella lista
LA SCHEDULAZIONE
● a lungo termine: seleziona il processo da inserire in memoria (minuti) bilanciando I/O e CPU bound.
● a breve termine: sceglie quale processo eseguire e gli alloca la CPU (100ms)
● a medio termine: swapping dei processi tra memoria centrale e memoria di massa
LE OPERAZIONI
Un processo, tramite fork, può crearne un altro (padre-figlio) con cui può condividere (in parte o interamente)
le risorse o meno e può essere eseguito in modo concorrente o meno ai figli.
Terminata l’istruzione, il processo chiede al S.O. di essere rimosso tramite exit (deallocazione delle risorse e
restituzione valore di stato al padre). Un padre può terminare l’esecuzione di un figlio perché ha ecceduto
nell’uso di una risorse/ non serve più l’operazione/ il padre sta terminando.
LA COOPERAZIONE
I processi possono essere indipendenti o cooperanti (Vantaggi: condivisione info; velocizzazione
computazione; modularità; molte attività per utente).
Un processo produttore genera info utilizzate dal consumatore (es: compilator
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Sistemi operativi - Appunti
-
Appunti Sistemi Operativi - Seminari sistemi UAV , sistemi operativi NuttX-ROS
-
Sistemi operativi - Appunti
-
Appunti di Sistemi operativi