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.
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.
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.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Direct Memory Access (DMA)
Quello che è stato fatto con i dispositivi di direct memory access, è quello di creare canali di input/output. Sono dispositivi dedicati, ogni periferica di i/o ha il proprio canale che è quello che si occupa di fare il trasferimento in memoria centrale dei dati che provengono dalla periferica.
Il DMA è il metodo preferito quando ci sono grosse moli di dati da trasferire. Il DMA è un insieme di circuiti che provvede ad eseguire il trasferimento dati da una periferica alla memoria o viceversa. Il DMA controller ha anche il compito di condividere il bus, che è quello che porta i dati in memoria, con la CPU, deve negoziare l'utilizzo di alcune risorse con la CPU, ma una volta che la CPU fa i calcoli ad esempio caricando in registri interni alla CPU i dati che deve elaborare, possono andare avanti le altre operazioni. I controller sono presenti attualmente per i trasferimenti, di fatto la CPU quando si trova in memoria centrale questi dati.
verrà notificata da questi DMA controller che i dati sono disponibili e potrà riprendere l'elaborazione di quei dati. Questi dispositivi ci consentono di far si che in memoria centrale possano essere caricati più programmi e che questi programmi possano essere apparentemente eseguiti contemporaneamente (si sovrappongono i tempi di attesa che arrivi un programma, e i tempi di esecuzione dei dati di un secondo programma. Nei sistemi operativi multiprogrammati, sistemi operativi che sono in grado di consentire l'utilizzo contemporaneo da parte o dello stesso utente, o di più utenti, andiamo a caricare in memoria contemporaneamente i programmi e di conseguenza possibile sovrapporre nel tempo le fasi in cui un programma è bloccato, con la fase running di un altro programma. Se pensiamo all'architettura dobbiamo pensare che mentre il canale di una certa periferica opera il trasferimento in memoria di un blocco di dati per il programma 1, la CPUIntanto carica da memoria centrale ed esegue il programma 2. Il programma 1 e 2 sono già caricati in memoria e a seconda dei momenti verrà eseguita da parte della CPU un'istruzione del programma 1 o del programma 2 a seconda che uno o l'altro programma abbia già disponibile in memoria il programma su cui fare operazioni.
Il processo è una sequenza di istruzioni che devono essere eseguite da un processore durante l'esecuzione del programma. Quando c'è un insieme di istruzioni, il programma può essere in stato di running quando la CPU sta eseguendo dei calcoli sui dati di quel programma. Terminata però l'elaborazione dei dati, è necessario fare dei trasferimenti dalle periferiche di input e output di dati. Da running, non utilizza più la CPU per fare i calcoli, ma si mette in stato di blocked (il processo inizia operazioni di input/output). In questa fase, la CPU dice al canale specifico di occuparsi del trasferimento.
Mentre quel processo è in fase di blocked e fa il trasferimento dati, eventualmente ci può essere un altro programma che va in running. Quando è terminata la fase di blocked per un processo perché quel processo ha finito le operazioni di I/O, lo stato di quel processo diventa ready, non subito running perché può essere che in quel momento la CPU stia facendo eseguire istruzioni di un altro programma. Qualunque processo, quando deve essere gestito in un sistema operativo multiprogrammato, non è detto che se non è in blocked deve essere in running, ma potrebbe essere in fase di ready, in coda per essere messo in esecuzione, quindi gli stati di un processo di un sistema operativo possono essere solo 3, e le transizioni possibili sono solo quelle. Lo scheduler si occupa di gestire le code di processi a seconda della priorità. Cerchiamo di capire quali possono essere vantaggi e svantaggi di questa soluzione che tende aparallelizzarel'esecuzione di due o più processi. In questo caso la CPU è ben sfruttata, non come abbiamo visto nei sistemi dedicati. C'è però una limitazione, da come abbiamo visto che possono avvenire di i cambi di stato dei processi nella gestione di un sistema operativo multiprogrammato, abbiamo detto che un processo quando va in fase di running, ossia chiede di fare calcoli, rimarrà in esecuzione finché non richiede di nuovo delle operazioni di input/output. Ci sono dei processi che caricano tutti i dati in memoria centrale all'inizio, fanno tutti i calcoli e questi calcoli richiedono molto tempo, e alla fine fanno solamente una sola operazione di calcolo, che vengono privilegiati dai sistemi operativi, perché nel momento in cui si appropriano dell'utilizzo della CPU, se la tengono finché non hanno finito di fare i loro calcoli. Viceversa, programmi che per la loro esecuzione richiedono continue operazioni di input/output,
lasciano libera la CPU che verrà appropriata daprogrammi che hanno molti calcoli, e dovranno aspettare molto tempo.Vedendo che certi processi venivano penalizzati molto da questo sistema operativo nonostante fossero giàmigliorate le cose rispetto a sistemi operativi dedicati, si è cercato di trovare una soluzione ancora diversaper non penalizzare i programmi. Sono nati i sistemi operativi cosiddetti di Time Sharing, oppure interattivi.Sono nati perché servono a gestire delle macchine multiutenti, utilizzate per lavorare al terminale. Quando si lavora al terminale, il programmatore pensa al programma, scrive, prova il programma compilandolo, poilo deve testare ed eseguire, poi pensa a delle possibili soluzioni se il programma non funziona, quindi ci sono dei tempi morti in cui l'utente non utilizza la macchina. Quando l'utente scrive fa delle operazioni diinput/output, quando compila ed esegue il programma richiede l'utilizzo della CPU.
programma molto lungo si alternano dei tempi morti in cui l'utente non sfrutta pienamente la CPU, ma è chiaro che nel momento in cui viene compilato ed eseguito il programma la CPU deve lavorare. Si è pensato di trovare un modo per cui anche se ci fossero tanti utenti collegati su una macchina tutti potessero avere l'impressione di usarla da soli, ossia di non essere in concorrenza per l'uso di quella macchina con altri utenti.
La CPU invece di essere assegnata al primo processo che ne ha bisogno e mantenuta disponibile per quel processo finché non ha terminato i suoi calcoli, la CPU viene ciclicamente assegnata a tutti i processi. Viene assegnato un tempo prefissato ai processi che possono essere messi in esecuzione e ciclicamente questo tempo viene assegnato a tutti. Ovviamente un sistema operativo di questo tipo è più complicato del sistema operativo dedicato e multiprogrammato, perché il multiprogrammato si occupa solamente di
gestiscono applicazioni in tempo reale, dove la risposta del sistema deve essere garantita entro determinati limiti di tempo. Questi sistemi operativi sono progettati per gestire applicazioni critiche come controlli industriali, sistemi di navigazione e sistemi di sicurezza. I sistemi operativi di real time devono essere in grado di gestire le richieste in modo tempestivo e prevedibile. Per fare ciò, utilizzano algoritmi di scheduling che assegnano priorità alle diverse attività in base alla loro importanza e ai limiti di tempo stabiliti. Inoltre, questi sistemi operativi minimizzano l'overhead, evitando operazioni non necessarie che potrebbero rallentare il sistema. In un sistema operativo di real time, il tempo viene suddiviso in intervalli di tempo molto brevi, chiamati "tick". Ogni tick rappresenta un'unità di tempo che viene assegnata a una specifica attività. Quando il tick scade, il sistema operativo passa all'attività successiva. Questo processo avviene in modo ciclico, garantendo che ogni attività riceva la sua fetta di tempo assegnata. In conclusione, i sistemi operativi di time sharing e di real time hanno approcci diversi nella gestione del tempo dei processi. Mentre i sistemi operativi di time sharing suddividono il tempo in fette assegnate a ogni processo, i sistemi operativi di real time assegnano intervalli di tempo molto brevi a ogni attività in modo ciclico.devono dare tempi di risposta molto rapidi. Ci sono delle operazioni che devono avere massima priorità rispetto ad altre, quindi i sistemi operativi di real-time devono gestire opportunamente certi tipi di processo che devono entrare in esecuzione rispetto a tutti gli altri. Hanno una logica nella gestione dei processi che è un po' diversa rispetto ai sistemi che abbiamo visto prima, per esempio gestione di strumentazione, controllo di processo (sistemi di controllo nell'uso di strumentazione che può essere pericolosa per l'operatore, allora il programma che blocca la macchina se interviene qualche situazione di pericolo deve avere massima priorità e deve intervenire molto più velocemente rispetto altre operazioni). Questi sistemi richiedono che il tempo che passa dalla richiesta di esecuzione di specifici processi, fino al completamento degli stessi debba essere minore del tempo prefissato. Sistemi operativi concorrenti Sono quei sistemi che permettono l'esecuzione simultanea di più processi. In questi sistemi, i processi possono essere eseguiti in modo concorrente, cioè possono essere eseguiti in parallelo o in modo alternato. L'obiettivo principale di questi sistemi è quello di massimizzare l'utilizzo delle risorse del sistema, in modo da ottenere una maggiore efficienza e velocità di esecuzione dei processi. Inoltre, questi sistemi devono garantire la correttezza e la coerenza dei dati condivisi tra i processi, utilizzando opportune tecniche di sincronizzazione e di gestione delle risorse. Sistemi operativi distribuiti Sono quei sistemi che permettono l'esecuzione di processi su più macchine, collegate tra loro tramite una rete. In questi sistemi, i processi possono essere eseguiti in modo distribuito, cioè possono essere eseguiti su macchine diverse, ma comunicano tra loro per scambiarsi informazioni e coordinare le loro attività. L'obiettivo principale di questi sistemi è quello di fornire una maggiore scalabilità e affidabilità, in modo da poter gestire un numero elevato di utenti e garantire la disponibilità dei servizi anche in caso di guasti o malfunzionamenti di una o più macchine. Sistemi operativi multiprocessore Sono quei sistemi che permettono l'esecuzione di processi su più processori, all'interno di una singola macchina. In questi sistemi, i processi possono essere eseguiti in modo parallelo, cioè possono essere eseguiti contemporaneamente su più processori. L'obiettivo principale di questi sistemi è quello di ottenere una maggiore potenza di calcolo e una maggiore velocità di esecuzione dei processi, sfruttando la parallelizzazione delle operazioni. Inoltre, questi sistemi devono garantire la correttezza e la coerenza dei dati condivisi tra i processi, utilizzando opportune tecniche di sincronizzazione e di gestione delle risorse.operativi che vengono utilizzati su macchine che hanno architetture molto più complesse della macchina di Von Neumann. Pensiamo di avere una macchina che ha più CPU, ogni CPU ha la propria memoria centrale e poi c'è una memoria comune. La concorrenza, ossia l'utilizzo concorrente di questi processori richiede un'organizzazione molto più complessa. Il sistema operativo può essere eseguito contemporaneamente da più CPU oppure da una sola CPU master. Ci sono varie soluzioni per gestire sistemi concorrenti, ci sono varie CPU che gestiscono compiti diversi, ci sono CPU pari e la gestione dell'intero istea è delegata a quella che si libera in un certo istante per esempio.
Ultime due slide- Esercizi stampa.
Strutture informative
Tutte le informazioni che vogliamo siano elaborate da un calcolatore devono essere memorizzate nella sua memoria in modo opportuno e nel modo migliore per poterle gestire in modo efficiente, i programmi
cheandiamo a scrivere devono gestire grosse moli di dati non due numeri da sommare, quindi a seconda del problema che si deve risolvere il tipo di dati e informazioni da elaborare hanno caratteristiche diverse, anche dal punto di vista della logica con cui devono essere organizzate. Le informazioni possono essere di vario tipo, non solo numeriche ma anche alfanumeriche e di tipo diverso. Cerchiamo di capire quali sono le strutture che possiamo utilizzare a seconda del tipo di problema da affrontare. In particolare quello che affronteremo per primo sarà la strutturazione logica dei dati che servono per risolvere un determinato problema e poi affronteremo legata a questo tipo di strutture, la loro rappresentazione interna al calcolatore, cioè come questi dati e legami logici che li caratterizzano possono essere rappresentati all'interno della memoria che sappiamo essere una sequenza lineare di celle. Quando abbiamo bisogno di trattare delle informazioni non èSufficiente dire devo sommare dei numeri, devo fare delle operazioni sulle stringhe, ma è anche importante capire come questi dati che abbiamo bisogno di elaborare sono legati tra di loro attraverso diverse relazioni logiche. Un insieme di dati e lastr