Sistema operativo - Guida rapida
Un sistema operativo (OS) è un'interfaccia tra un utente di computer e l'hardware del computer. Un sistema operativo è un software che esegue tutte le attività di base come la gestione dei file, la gestione della memoria, la gestione dei processi, la gestione di input e output e il controllo di dispositivi periferici come unità disco e stampanti.
Alcuni sistemi operativi popolari includono il sistema operativo Linux, il sistema operativo Windows, VMS, OS / 400, AIX, z / OS, ecc.
Definizione
Un sistema operativo è un programma che funge da interfaccia tra l'utente e l'hardware del computer e controlla l'esecuzione di tutti i tipi di programmi.
Di seguito sono riportate alcune importanti funzioni di un sistema operativo.
- Gestione della memoria
- Gestione del processore
- Gestione dei dispositivi
- Gestione dei file
- Security
- Controllo sulle prestazioni del sistema
- Contabilità del lavoro
- Errore nel rilevamento degli aiuti
- Coordinamento tra altri software e utenti
Gestione della memoria
La gestione della memoria si riferisce alla gestione della memoria primaria o della memoria principale. La memoria principale è un ampio array di parole o byte in cui ogni parola o byte ha il proprio indirizzo.
La memoria principale fornisce uno storage veloce a cui si può accedere direttamente dalla CPU. Perché un programma possa essere eseguito, deve essere nella memoria principale. Un sistema operativo esegue le seguenti attività per la gestione della memoria:
Tiene traccia della memoria primaria, ovvero quale parte di essa è utilizzata da chi, quale parte non è utilizzata.
Nella multiprogrammazione, il sistema operativo decide quale processo riceverà la memoria, quando e quanto.
Alloca la memoria quando un processo lo richiede.
Disalloca la memoria quando un processo non ne ha più bisogno o è stato terminato.
Gestione del processore
Nell'ambiente multiprogrammazione, il sistema operativo decide quale processo riceve il processore quando e per quanto tempo. Questa funzione è chiamataprocess scheduling. Un sistema operativo esegue le seguenti attività per la gestione del processore:
Tiene traccia del processore e dello stato del processo. Il programma responsabile di questa attività è noto cometraffic controller.
Alloca il processore (CPU) a un processo.
Disalloca il processore quando un processo non è più necessario.
Gestione dei dispositivi
Un sistema operativo gestisce la comunicazione del dispositivo tramite i rispettivi driver. Svolge le seguenti attività per la gestione del dispositivo:
Tiene traccia di tutti i dispositivi. Il programma responsabile di questa attività è noto comeI/O controller.
Decide quale processo riceve il dispositivo quando e per quanto tempo.
Alloca il dispositivo in modo efficiente.
Disalloca i dispositivi.
Gestione dei file
Un file system è normalmente organizzato in directory per una facile navigazione e utilizzo. Queste directory possono contenere file e altre direzioni.
Un sistema operativo esegue le seguenti attività per la gestione dei file:
Tiene traccia di informazioni, posizione, usi, stato ecc. Le strutture collettive sono spesso note come file system.
Decide chi ottiene le risorse.
Alloca le risorse.
Disalloca le risorse.
Altre attività importanti
Di seguito sono riportate alcune delle attività importanti svolte da un sistema operativo:
Security - Tramite password e altre tecniche simili, impedisce l'accesso non autorizzato a programmi e dati.
Control over system performance - Ritardi di registrazione tra la richiesta di un servizio e la risposta dal sistema.
Job accounting - Tenere traccia del tempo e delle risorse utilizzate da vari lavori e utenti.
Error detecting aids - Produzione di dump, tracce, messaggi di errore e altri aiuti per il debug e il rilevamento degli errori.
Coordination between other softwares and users - Coordinamento e assegnazione di compilatori, interpreti, assemblatori e altri software ai vari utenti dei sistemi informatici.
I sistemi operativi esistono dalla prima generazione di computer e continuano a evolversi nel tempo. In questo capitolo, discuteremo alcuni dei tipi importanti di sistemi operativi più comunemente usati.
Sistema operativo batch
Gli utenti di un sistema operativo batch non interagiscono direttamente con il computer. Ogni utente prepara il proprio lavoro su un dispositivo off-line come le schede perforate e lo invia all'operatore del computer. Per velocizzare l'elaborazione, i lavori con esigenze simili vengono raggruppati insieme ed eseguiti come gruppo. I programmatori lasciano i loro programmi all'operatore e l'operatore ordina quindi i programmi con requisiti simili in batch.
I problemi con i sistemi batch sono i seguenti:
- Mancanza di interazione tra l'utente e il lavoro.
- La CPU è spesso inattiva, perché la velocità dei dispositivi I / O meccanici è inferiore a quella della CPU.
- Difficile fornire la priorità desiderata.
Sistemi operativi time-sharing
Il time-sharing è una tecnica che consente a molte persone, situate in vari terminali, di utilizzare contemporaneamente un particolare sistema informatico. Il time-sharing o il multitasking è un'estensione logica della multiprogrammazione. Il tempo del processore condiviso tra più utenti contemporaneamente viene definito condivisione del tempo.
La principale differenza tra i sistemi batch multiprogrammati e i sistemi time-sharing è che nel caso di sistemi batch multiprogrammati, l'obiettivo è massimizzare l'uso del processore, mentre nei sistemi time-sharing l'obiettivo è ridurre al minimo il tempo di risposta.
Più lavori vengono eseguiti dalla CPU passando da uno all'altro, ma gli scambi si verificano così frequentemente. Pertanto, l'utente può ricevere una risposta immediata. Ad esempio, in un'elaborazione di transazione, il processore esegue ogni programma utente in un breve burst o quantum di calcolo. Cioè, sengli utenti sono presenti, quindi ogni utente può ottenere un quantum temporale. Quando l'utente invia il comando, il tempo di risposta è di pochi secondi al massimo.
Il sistema operativo utilizza la pianificazione della CPU e la multiprogrammazione per fornire a ciascun utente una piccola porzione di tempo. I sistemi informatici progettati principalmente come sistemi batch sono stati modificati in sistemi di condivisione del tempo.
I vantaggi dei sistemi operativi in multiproprietà sono i seguenti:
- Offre il vantaggio di una risposta rapida.
- Evita la duplicazione del software.
- Riduce il tempo di inattività della CPU.
Gli svantaggi dei sistemi operativi time-sharing sono i seguenti:
- Problema di affidabilità.
- Questione di sicurezza e integrità dei programmi utente e dei dati.
- Problema di comunicazione dei dati.
Sistema operativo distribuito
I sistemi distribuiti utilizzano più processori centrali per servire più applicazioni in tempo reale e più utenti. I lavori di elaborazione dei dati vengono distribuiti di conseguenza tra i processori.
I processori comunicano tra loro attraverso varie linee di comunicazione (come bus ad alta velocità o linee telefoniche). Questi sono indicati comeloosely coupled systemso sistemi distribuiti. I processori in un sistema distribuito possono variare in dimensione e funzione. Questi processori sono indicati come siti, nodi, computer e così via.
I vantaggi dei sistemi distribuiti sono i seguenti:
- Con la funzione di condivisione delle risorse, un utente in un sito potrebbe essere in grado di utilizzare le risorse disponibili in un altro.
- Velocizza lo scambio di dati tra loro tramite posta elettronica.
- Se un sito si guasta in un sistema distribuito, i siti rimanenti possono potenzialmente continuare a funzionare.
- Migliore servizio ai clienti.
- Riduzione del carico sul computer host.
- Riduzione dei ritardi nel trattamento dei dati.
Sistema operativo di rete
Un sistema operativo di rete viene eseguito su un server e fornisce al server la capacità di gestire dati, utenti, gruppi, sicurezza, applicazioni e altre funzioni di rete. Lo scopo principale del sistema operativo di rete è consentire l'accesso condiviso a file e stampanti tra più computer in una rete, in genere una rete locale (LAN), una rete privata o ad altre reti.
Esempi di sistemi operativi di rete includono Microsoft Windows Server 2003, Microsoft Windows Server 2008, UNIX, Linux, Mac OS X, Novell NetWare e BSD.
I vantaggi dei sistemi operativi di rete sono i seguenti:
- I server centralizzati sono altamente stabili.
- La sicurezza è gestita dal server.
- Gli aggiornamenti a nuove tecnologie e hardware possono essere facilmente integrati nel sistema.
- L'accesso remoto ai server è possibile da diverse posizioni e tipi di sistemi.
Gli svantaggi dei sistemi operativi di rete sono i seguenti:
- Costo elevato di acquisto e gestione di un server.
- Dipendenza da una posizione centrale per la maggior parte delle operazioni.
- Sono necessari manutenzione e aggiornamenti regolari.
Sistema operativo in tempo reale
Un sistema in tempo reale è definito come un sistema di elaborazione dati in cui l'intervallo di tempo richiesto per elaborare e rispondere agli input è così piccolo da controllare l'ambiente. Il tempo impiegato dal sistema per rispondere a un input e visualizzare le informazioni aggiornate richieste è definito comeresponse time. Quindi, in questo metodo, il tempo di risposta è molto inferiore rispetto all'elaborazione in linea.
I sistemi in tempo reale vengono utilizzati quando ci sono requisiti di tempo rigidi per il funzionamento di un processore o il flusso di dati e i sistemi in tempo reale possono essere utilizzati come dispositivo di controllo in un'applicazione dedicata. Un sistema operativo in tempo reale deve avere vincoli di tempo fissi e ben definiti, altrimenti il sistema fallirà. Ad esempio, esperimenti scientifici, sistemi di imaging medico, sistemi di controllo industriale, sistemi d'arma, robot, sistemi di controllo del traffico aereo, ecc.
Esistono due tipi di sistemi operativi in tempo reale.
Sistemi hard real-time
I sistemi hard real-time garantiscono che le attività critiche vengano completate in tempo. Nei sistemi hard real-time, l'archiviazione secondaria è limitata o mancante ei dati vengono archiviati nella ROM. In questi sistemi, la memoria virtuale non viene quasi mai trovata.
Sistemi soft real-time
I sistemi soft in tempo reale sono meno restrittivi. Un'attività critica in tempo reale ottiene la priorità su altre attività e mantiene la priorità fino al completamento. I sistemi soft real-time hanno un'utilità limitata rispetto ai sistemi hard real-time. Ad esempio, multimedia, realtà virtuale, progetti scientifici avanzati come esplorazione sottomarina e rover planetari, ecc.
Un sistema operativo fornisce servizi sia agli utenti che ai programmi.
- Fornisce ai programmi un ambiente da eseguire.
- Fornisce agli utenti i servizi per eseguire i programmi in modo conveniente.
Di seguito sono riportati alcuni servizi comuni forniti da un sistema operativo:
- Esecuzione del programma
- Operazioni di I / O
- Manipolazione del file system
- Communication
- Rilevamento degli errori
- Assegnazione delle risorse
- Protection
Esecuzione del programma
I sistemi operativi gestiscono molti tipi di attività, dai programmi utente ai programmi di sistema come spooler di stampa, server dei nomi, file server, ecc. Ciascuna di queste attività è incapsulata come un processo.
Un processo include il contesto di esecuzione completo (codice da eseguire, dati da manipolare, registri, risorse del sistema operativo in uso). Di seguito sono riportate le principali attività di un sistema operativo rispetto alla gestione del programma:
- Carica un programma in memoria.
- Esegue il programma.
- Gestisce l'esecuzione del programma.
- Fornisce un meccanismo per la sincronizzazione dei processi.
- Fornisce un meccanismo per la comunicazione del processo.
- Fornisce un meccanismo per la gestione dei deadlock.
Operazione di I / O
Un sottosistema I / O comprende dispositivi I / O e il relativo software del driver. I driver nascondono agli utenti le peculiarità di specifici dispositivi hardware.
Un sistema operativo gestisce la comunicazione tra utente e driver di dispositivo.
- Per operazione di I / O si intende un'operazione di lettura o scrittura con qualsiasi file o qualsiasi dispositivo I / O specifico.
- Il sistema operativo fornisce l'accesso al dispositivo I / O richiesto quando richiesto.
Manipolazione del file system
Un file rappresenta una raccolta di informazioni correlate. I computer possono archiviare i file sul disco (memoria secondaria), per scopi di archiviazione a lungo termine. Esempi di supporti di memorizzazione includono nastro magnetico, disco magnetico e unità disco ottico come CD, DVD. Ciascuno di questi supporti ha le proprie proprietà come velocità, capacità, velocità di trasferimento dati e metodi di accesso ai dati.
Un file system è normalmente organizzato in directory per una facile navigazione e utilizzo. Queste directory possono contenere file e altre direzioni. Di seguito sono riportate le principali attività di un sistema operativo rispetto alla gestione dei file:
- Il programma deve leggere un file o scrivere un file.
- Il sistema operativo dà l'autorizzazione al programma per l'operazione su file.
- L'autorizzazione varia da sola lettura, lettura-scrittura, negata e così via.
- Il sistema operativo fornisce un'interfaccia all'utente per creare / eliminare file.
- Il sistema operativo fornisce un'interfaccia all'utente per creare / eliminare directory.
- Il sistema operativo fornisce un'interfaccia per creare il backup del file system.
Comunicazione
In caso di sistemi distribuiti che sono un insieme di processori che non condividono memoria, periferiche o un orologio, il sistema operativo gestisce le comunicazioni tra tutti i processi. Più processi comunicano tra loro attraverso linee di comunicazione nella rete.
Il sistema operativo gestisce le strategie di routing e connessione e i problemi di contesa e sicurezza. Di seguito sono riportate le principali attività di un sistema operativo rispetto alla comunicazione:
- Due processi richiedono spesso il trasferimento dei dati tra di loro
- Entrambi i processi possono essere su un computer o su computer diversi, ma sono collegati tramite una rete di computer.
- La comunicazione può essere implementata con due metodi, tramite Shared Memory o Message Passing.
Gestione degli errori
Gli errori possono verificarsi sempre e ovunque. Può verificarsi un errore nella CPU, nei dispositivi I / O o nell'hardware della memoria. Di seguito sono riportate le principali attività di un sistema operativo rispetto alla gestione degli errori:
- Il sistema operativo verifica costantemente eventuali errori.
- Il sistema operativo intraprende un'azione appropriata per garantire un'elaborazione corretta e coerente.
Gestione delle risorse
In caso di ambiente multiutente o multi-tasking, le risorse come la memoria principale, i cicli della CPU e l'archiviazione dei file devono essere allocate a ciascun utente o lavoro. Di seguito sono riportate le principali attività di un sistema operativo rispetto alla gestione delle risorse:
- Il sistema operativo gestisce tutti i tipi di risorse utilizzando gli scheduler.
- Gli algoritmi di pianificazione della CPU vengono utilizzati per un migliore utilizzo della CPU.
Protezione
Considerando un sistema informatico con più utenti e l'esecuzione simultanea di più processi, i vari processi devono essere protetti dalle attività degli altri.
La protezione si riferisce a un meccanismo o un modo per controllare l'accesso di programmi, processi o utenti alle risorse definite da un sistema informatico. Di seguito sono riportate le principali attività di un sistema operativo rispetto alla protezione:
- Il sistema operativo garantisce che tutti gli accessi alle risorse di sistema siano controllati.
- Il sistema operativo garantisce che i dispositivi I / O esterni siano protetti da tentativi di accesso non validi.
- Il sistema operativo fornisce funzionalità di autenticazione per ogni utente tramite password.
Elaborazione in lotti
L'elaborazione in batch è una tecnica in cui un sistema operativo raccoglie i programmi ei dati insieme in un batch prima dell'inizio dell'elaborazione. Un sistema operativo esegue le seguenti attività relative all'elaborazione batch:
Il sistema operativo definisce un lavoro che ha una sequenza predefinita di comandi, programmi e dati come una singola unità.
Il sistema operativo mantiene un numero di lavori in memoria e li esegue senza alcuna informazione manuale.
I lavori vengono elaborati in base all'ordine di presentazione, ovvero, primo arrivato, primo servito.
Quando un lavoro completa la sua esecuzione, la sua memoria viene rilasciata e l'output del lavoro viene copiato in uno spool di output per la stampa o l'elaborazione successiva.
Vantaggi
L'elaborazione in batch richiede gran parte del lavoro dell'operatore al computer.
Miglioramento delle prestazioni quando un nuovo lavoro viene avviato non appena il lavoro precedente è terminato, senza alcun intervento manuale.
Svantaggi
- Difficile eseguire il debug del programma.
- Un lavoro potrebbe entrare in un ciclo infinito.
- A causa della mancanza di uno schema di protezione, un lavoro batch può influire sui lavori in sospeso.
Multitasking
Il multitasking si verifica quando più lavori vengono eseguiti dalla CPU contemporaneamente passando da uno all'altro. Le opzioni si verificano così frequentemente che gli utenti possono interagire con ogni programma mentre è in esecuzione. Un sistema operativo svolge le seguenti attività relative al multitasking:
L'utente fornisce istruzioni al sistema operativo o direttamente a un programma e riceve una risposta immediata.
Il sistema operativo gestisce il multitasking nel modo in cui può gestire più operazioni / eseguire più programmi alla volta.
I sistemi operativi multitasking sono noti anche come sistemi di condivisione del tempo.
Questi sistemi operativi sono stati sviluppati per fornire un utilizzo interattivo di un sistema informatico a un costo ragionevole.
Un sistema operativo a tempo condiviso utilizza il concetto di pianificazione e multiprogrammazione della CPU per fornire a ciascun utente una piccola porzione di una CPU a tempo condiviso.
Ogni utente ha almeno un programma separato in memoria.
Un programma che viene caricato in memoria ed è in esecuzione viene comunemente chiamato process.
Quando un processo viene eseguito, in genere viene eseguito solo per un tempo molto breve prima che termini o sia necessario eseguire l'I / O.
Poiché l'I / O interattivo in genere viene eseguito a velocità inferiori, il completamento potrebbe richiedere molto tempo. Durante questo periodo, una CPU può essere utilizzata da un altro processo.
Il sistema operativo consente agli utenti di condividere il computer contemporaneamente. Poiché ogni azione o comando in un sistema a tempo condiviso tende ad essere breve, è necessario solo un po 'di tempo della CPU per ogni utente.
Poiché il sistema passa rapidamente la CPU da un utente / programma al successivo, a ciascun utente viene data l'impressione di avere la propria CPU, mentre in realtà una CPU viene condivisa tra molti utenti.
Multiprogrammazione
La condivisione del processore, quando due o più programmi risiedono in memoria contemporaneamente, viene definita multiprogramming. La multiprogrammazione presuppone un unico processore condiviso. La multiprogrammazione aumenta l'utilizzo della CPU organizzando i lavori in modo che la CPU ne abbia sempre uno da eseguire.
La figura seguente mostra il layout della memoria per un sistema multiprogrammazione.
Un sistema operativo esegue le seguenti attività relative alla multiprogrammazione.
Il sistema operativo conserva in memoria più lavori contemporaneamente.
Questa serie di lavori è un sottoinsieme dei lavori conservati nel pool di lavori.
Il sistema operativo seleziona e inizia a eseguire uno dei lavori in memoria.
I sistemi operativi multiprogrammazione monitorano lo stato di tutti i programmi attivi e le risorse di sistema utilizzando programmi di gestione della memoria per garantire che la CPU non sia mai inattiva, a meno che non ci siano lavori da elaborare.
Vantaggi
- Utilizzo della CPU elevato ed efficiente.
- L'utente sente che molti programmi sono assegnati alla CPU quasi contemporaneamente.
Svantaggi
- È richiesta la pianificazione della CPU.
- Per ospitare molti lavori in memoria, è necessaria la gestione della memoria.
Interattività
L'interattività si riferisce alla capacità degli utenti di interagire con un sistema informatico. Un sistema operativo esegue le seguenti attività relative all'interattività:
- Fornisce all'utente un'interfaccia per interagire con il sistema.
- Gestisce i dispositivi di input per ricevere input dall'utente. Ad esempio, la tastiera.
- Gestisce i dispositivi di output per mostrare gli output all'utente. Ad esempio, Monitor.
Il tempo di risposta del sistema operativo deve essere breve, poiché l'utente invia e attende il risultato.
Sistema in tempo reale
I sistemi in tempo reale sono generalmente sistemi integrati e dedicati. Un sistema operativo esegue le seguenti attività correlate all'attività del sistema in tempo reale.
- In tali sistemi, i sistemi operativi in genere leggono e reagiscono ai dati del sensore.
- Il Sistema Operativo deve garantire la risposta agli eventi entro periodi di tempo prestabiliti per assicurare il corretto funzionamento.
Ambiente distribuito
Un ambiente distribuito si riferisce a più CPU o processori indipendenti in un sistema informatico. Un sistema operativo esegue le seguenti attività relative all'ambiente distribuito:
Il sistema operativo distribuisce le logiche di calcolo tra diversi processori fisici.
I processori non condividono la memoria o un orologio. Ogni processore ha invece la propria memoria locale.
Il sistema operativo gestisce le comunicazioni tra i processori. Comunicano tra loro attraverso varie linee di comunicazione.
Spooling
Spooling è l'acronimo di operazioni periferiche simultanee in linea. Lo spooling si riferisce all'inserimento dei dati di vari lavori di I / O in un buffer. Questo buffer è un'area speciale della memoria o del disco rigido accessibile ai dispositivi I / O.
Un sistema operativo esegue le seguenti attività relative all'ambiente distribuito:
Gestisce lo spooling dei dati dei dispositivi I / O poiché i dispositivi hanno velocità di accesso ai dati diverse.
Mantiene il buffer di spooling che fornisce una stazione di attesa in cui i dati possono riposare mentre il dispositivo più lento recupera.
Mantiene il calcolo parallelo a causa del processo di spooling poiché un computer può eseguire I / O in modo parallelo. Diventa possibile che il computer legga i dati da un nastro, scriva i dati su disco e li scriva su una stampante a nastro mentre sta svolgendo il suo compito di elaborazione.
Vantaggi
- L'operazione di spooling utilizza un disco come un buffer molto grande.
- Lo spooling è in grado di sovrapporre le operazioni di I / E per un lavoro con le operazioni del processore per un altro lavoro.
Processi
Un processo è fondamentalmente un programma in esecuzione. L'esecuzione di un processo deve procedere in modo sequenziale.
Un processo è definito come un'entità che rappresenta l'unità di lavoro di base da implementare nel sistema.
Per dirla in termini semplici, scriviamo i nostri programmi per computer in un file di testo e quando eseguiamo questo programma, diventa un processo che esegue tutte le attività menzionate nel programma.
Quando un programma viene caricato in memoria e diventa un processo, può essere diviso in quattro sezioni: stack, heap, testo e dati. L'immagine seguente mostra un layout semplificato di un processo all'interno della memoria principale:
SN | Componente e descrizione |
---|---|
1 | Stack Lo Stack di processo contiene i dati temporanei come parametri di metodo / funzione, indirizzo di ritorno e variabili locali. |
2 | Heap Questa è la memoria allocata dinamicamente a un processo durante il suo tempo di esecuzione. |
3 | Text Ciò include l'attività corrente rappresentata dal valore di Program Counter e il contenuto dei registri del processore. |
4 | Data Questa sezione contiene le variabili globali e statiche. |
Programma
Un programma è un pezzo di codice che può essere una singola riga o milioni di righe. Un programma per computer viene solitamente scritto da un programmatore di computer in un linguaggio di programmazione. Ad esempio, ecco un semplice programma scritto in linguaggio di programmazione C -
#include <stdio.h>
int main() {
printf("Hello, World! \n");
return 0;
}
Un programma per computer è una raccolta di istruzioni che esegue un'attività specifica quando viene eseguita da un computer. Quando confrontiamo un programma con un processo, possiamo concludere che un processo è un'istanza dinamica di un programma per computer.
Una parte di un programma per computer che esegue un'attività ben definita è nota come algorithm. Una raccolta di programmi per computer, biblioteche e dati correlati è denominata filesoftware.
Ciclo di vita del processo
Quando un processo viene eseguito, passa attraverso stati diversi. Queste fasi possono differire nei diversi sistemi operativi e anche i nomi di questi stati non sono standardizzati.
In generale, un processo può avere uno dei seguenti cinque stati alla volta.
SN | Stato e descrizione |
---|---|
1 | Start Questo è lo stato iniziale quando un processo viene avviato / creato per la prima volta. |
2 | Ready Il processo è in attesa di essere assegnato a un processore. I processi pronti sono in attesa di avere il processore assegnato loro dal sistema operativo in modo che possano essere eseguiti. Il processo può entrare in questo stato dopoStart stato o durante l'esecuzione ma interrotto dallo scheduler per assegnare la CPU a qualche altro processo. |
3 | Running Una volta che il processo è stato assegnato a un processore dallo scheduler del sistema operativo, lo stato del processo viene impostato su running e il processore esegue le sue istruzioni. |
4 | Waiting Il processo passa allo stato di attesa se deve attendere una risorsa, ad esempio attendere l'input dell'utente o attendere che un file diventi disponibile. |
5 | Terminated or Exit Una volta che il processo termina la sua esecuzione, o è terminato dal sistema operativo, viene spostato nello stato terminato dove attende di essere rimosso dalla memoria principale. |
Blocco di controllo del processo (PCB)
Un blocco di controllo del processo è una struttura di dati mantenuta dal sistema operativo per ogni processo. Il PCB è identificato da un ID di processo intero (PID). Un PCB conserva tutte le informazioni necessarie per tenere traccia di un processo come elencato di seguito nella tabella -
SN | Informazioni e descrizione |
---|---|
1 | Process State Lo stato corrente del processo, ovvero se è pronto, in esecuzione, in attesa o altro. |
2 | Process privileges Ciò è necessario per consentire / impedire l'accesso alle risorse di sistema. |
3 | Process ID Identificazione univoca per ogni processo nel sistema operativo. |
4 | Pointer Un puntatore al processo genitore. |
5 | Program Counter Program Counter è un puntatore all'indirizzo della prossima istruzione da eseguire per questo processo. |
6 | CPU registers Vari registri della CPU in cui il processo deve essere memorizzato per l'esecuzione per lo stato di esecuzione. |
7 | CPU Scheduling Information Priorità del processo e altre informazioni di pianificazione necessarie per pianificare il processo. |
8 | Memory management information Ciò include le informazioni della tabella delle pagine, dei limiti di memoria, della tabella dei segmenti a seconda della memoria utilizzata dal sistema operativo. |
9 | Accounting information Ciò include la quantità di CPU utilizzata per l'esecuzione del processo, i limiti di tempo, l'ID di esecuzione ecc. |
10 | IO status information Ciò include un elenco di dispositivi I / O assegnati al processo. |
L'architettura di un PCB dipende completamente dal sistema operativo e può contenere informazioni diverse in sistemi operativi diversi. Ecco uno schema semplificato di un PCB:
Il PCB viene mantenuto per un processo per tutta la sua durata e viene eliminato al termine del processo.
Definizione
La schedulazione del processo è l'attività del process manager che gestisce la rimozione del processo in esecuzione dalla CPU e la selezione di un altro processo sulla base di una particolare strategia.
La pianificazione dei processi è una parte essenziale di un sistema operativo multiprogrammazione. Tali sistemi operativi consentono di caricare più di un processo alla volta nella memoria eseguibile e il processo caricato condivide la CPU utilizzando il multiplexing temporale.
Code di pianificazione del processo
Il sistema operativo mantiene tutti i PCB nelle code di pianificazione dei processi. Il sistema operativo mantiene una coda separata per ciascuno degli stati del processo e i PCB di tutti i processi nello stesso stato di esecuzione vengono inseriti nella stessa coda. Quando lo stato di un processo viene modificato, il relativo PCB viene scollegato dalla coda corrente e spostato nella coda del nuovo stato.
Il sistema operativo mantiene le seguenti importanti code di pianificazione dei processi:
Job queue - Questa coda mantiene tutti i processi nel sistema.
Ready queue- Questa coda mantiene un insieme di tutti i processi che risiedono nella memoria principale, pronti e in attesa di essere eseguiti. In questa coda viene sempre inserito un nuovo processo.
Device queues - I processi bloccati a causa dell'indisponibilità di un dispositivo I / O costituiscono questa coda.
Il sistema operativo può utilizzare diverse politiche per gestire ciascuna coda (FIFO, Round Robin, Priorità, ecc.). Lo scheduler del sistema operativo determina come spostare i processi tra le code ready ed run che possono avere solo una voce per core del processore sul sistema; nel diagramma sopra, è stato unito alla CPU.
Modello di processo a due stati
Il modello di processo a due stati si riferisce agli stati in esecuzione e non in esecuzione descritti di seguito:
SN | Stato e descrizione |
---|---|
1 | Running Quando viene creato un nuovo processo, entra nel sistema come nello stato di esecuzione. |
2 | Not Running I processi che non sono in esecuzione vengono tenuti in coda, in attesa del proprio turno di esecuzione. Ogni voce nella coda è un puntatore a un particolare processo. La coda viene implementata utilizzando l'elenco collegato. L'utilizzo del dispatcher è il seguente. Quando un processo viene interrotto, tale processo viene trasferito nella coda di attesa. Se il processo è stato completato o interrotto, il processo viene scartato. In entrambi i casi, il dispatcher seleziona quindi un processo dalla coda da eseguire. |
Schedulatori
Gli schedulatori sono software di sistema speciali che gestiscono la pianificazione dei processi in vari modi. Il loro compito principale è selezionare i lavori da inviare al sistema e decidere quale processo eseguire. Gli scheduler sono di tre tipi:
- Scheduler a lungo termine
- Scheduler a breve termine
- Scheduler a medio termine
Scheduler a lungo termine
È anche chiamato a job scheduler. Uno scheduler a lungo termine determina quali programmi sono ammessi al sistema per l'elaborazione. Seleziona i processi dalla coda e li carica in memoria per l'esecuzione. Il processo viene caricato nella memoria per la pianificazione della CPU.
L'obiettivo principale del programma di pianificazione dei lavori è fornire una combinazione equilibrata di lavori, come vincolato a I / O e vincolato al processore. Controlla anche il grado di multiprogrammazione. Se il grado di multiprogrammazione è stabile, il tasso medio di creazione del processo deve essere uguale al tasso medio di partenza dei processi che lasciano il sistema.
Su alcuni sistemi, lo scheduler a lungo termine potrebbe non essere disponibile o minimo. I sistemi operativi con condivisione del tempo non hanno uno scheduler a lungo termine. Quando un processo cambia lo stato da nuovo a pronto, viene utilizzato lo scheduler a lungo termine.
Scheduler a breve termine
È anche chiamato come CPU scheduler. Il suo obiettivo principale è aumentare le prestazioni del sistema in base al set di criteri scelto. È il passaggio dallo stato di pronto allo stato di esecuzione del processo. Lo scheduler della CPU seleziona un processo tra i processi pronti per essere eseguiti e assegna la CPU a uno di essi.
Gli scheduler a breve termine, noti anche come dispatcher, decidono quale processo eseguire successivamente. Gli scheduler a breve termine sono più veloci degli scheduler a lungo termine.
Scheduler a medio termine
La programmazione a medio termine fa parte di swapping. Rimuove i processi dalla memoria. Riduce il grado di multiprogrammazione. Lo scheduler a medio termine è incaricato di gestire i processi out scambiati.
Un processo in esecuzione può essere sospeso se effettua una richiesta di I / O. Un processo sospeso non può avanzare verso il completamento. In questa condizione, per rimuovere il processo dalla memoria e fare spazio per altri processi, il processo sospeso viene spostato nella memoria secondaria. Questo processo è chiamatoswappinge si dice che il processo venga sostituito o implementato. Lo scambio può essere necessario per migliorare il mix di processo.
Confronto tra Scheduler
SN | Scheduler a lungo termine | Scheduler a breve termine | Scheduler a medio termine |
---|---|---|---|
1 | È un pianificatore di lavori | È uno scheduler della CPU | È uno scheduler di scambio di processi. |
2 | La velocità è inferiore rispetto allo scheduler a breve termine | La velocità è la più veloce tra le altre due | La velocità è tra scheduler sia a breve che a lungo termine. |
3 | Controlla il grado di multiprogrammazione | Fornisce un controllo minore sul grado di multiprogrammazione | Riduce il grado di multiprogrammazione. |
4 | È quasi assente o minimo nel sistema di condivisione del tempo | È anche minimo nel sistema di condivisione del tempo | Fa parte dei sistemi di condivisione del tempo. |
5 | Seleziona i processi dal pool e li carica in memoria per l'esecuzione | Seleziona quei processi che sono pronti per essere eseguiti | Può reintrodurre il processo in memoria e l'esecuzione può essere continuata. |
Cambio di contesto
Un cambio di contesto è il meccanismo per memorizzare e ripristinare lo stato o il contesto di una CPU nel blocco Process Control in modo che l'esecuzione di un processo possa essere ripresa dallo stesso punto in un secondo momento. Utilizzando questa tecnica, un selettore di contesto consente a più processi di condividere una singola CPU. Il cambio di contesto è una parte essenziale delle funzionalità di un sistema operativo multitasking.
Quando lo scheduler commuta la CPU dall'esecuzione di un processo all'esecuzione di un altro, lo stato del processo in esecuzione corrente viene memorizzato nel blocco di controllo del processo. Dopodiché, lo stato del processo da eseguire successivamente viene caricato dal proprio PCB e utilizzato per impostare il PC, i registri, ecc. A quel punto, può iniziare l'esecuzione del secondo processo.
I cambi di contesto richiedono molte risorse di calcolo poiché il registro e lo stato della memoria devono essere salvati e ripristinati. Per evitare la quantità di tempo di cambio di contesto, alcuni sistemi hardware utilizzano due o più set di registri del processore. Quando si cambia il processo, le seguenti informazioni vengono memorizzate per un uso successivo.
- Contatore di programma
- Informazioni sulla pianificazione
- Valore del registro di base e limite
- Registro attualmente utilizzato
- Stato modificato
- Informazioni sullo stato I / O
- Informazioni contabili
Un Process Scheduler pianifica diversi processi da assegnare alla CPU in base a particolari algoritmi di pianificazione. Ci sono sei popolari algoritmi di pianificazione dei processi di cui parleremo in questo capitolo:
- Pianificazione FCFS (First-Come, First-Served)
- Pianificazione Shortest-Job-Next (SJN)
- Pianificazione prioritaria
- Tempo rimanente più breve
- Programmazione Round Robin (RR)
- Pianificazione delle code a più livelli
Questi algoritmi sono entrambi non-preemptive or preemptive. Gli algoritmi non preventivi sono progettati in modo che una volta che un processo entra nello stato di esecuzione, non può essere anticipato fino a quando non completa il tempo assegnato, mentre la pianificazione preventiva si basa sulla priorità in cui uno scheduler può anticipare un processo in esecuzione a bassa priorità in qualsiasi momento quando una priorità alta il processo entra in uno stato pronto.
Primo arrivato, primo servito (FCFS)
- I lavori vengono eseguiti in base all'ordine di arrivo.
- Si tratta di un algoritmo di pianificazione non preventivo e preventivo.
- Facile da capire e implementare.
- La sua implementazione è basata sulla coda FIFO.
- Scarse prestazioni poiché il tempo di attesa medio è elevato.
Wait time di ogni processo è il seguente:
Processi | Tempo di attesa: Orario di servizio - Orario di arrivo |
---|---|
P0 | 0 - 0 = 0 |
P1 | 5-1 = 4 |
P2 | 8-2 = 6 |
P3 | 16-3 = 13 |
Tempo di attesa medio: (0 + 4 + 6 + 13) / 4 = 5,75
Lavoro più breve successivo (SJN)
Questo è anche noto come shortest job firsto SJF
Questo è un algoritmo di pianificazione non preventivo e preventivo.
Il miglior approccio per ridurre al minimo i tempi di attesa.
Facile da implementare nei sistemi batch in cui il tempo di CPU richiesto è noto in anticipo.
Impossibile implementare in sistemi interattivi in cui il tempo di CPU richiesto non è noto.
L'elaboratore dovrebbe sapere in anticipo quanto tempo richiederà il processo.
Dati: tabella dei processi e ora di arrivo, ora di esecuzione
Processi | Orario di arrivo | Tempo di esecuzione | Tempo di servizio |
---|---|---|---|
P0 | 0 | 5 | 0 |
P1 | 1 | 3 | 5 |
P2 | 2 | 8 | 14 |
P3 | 3 | 6 | 8 |
Waiting time di ogni processo è il seguente:
Processi | Tempo di attesa |
---|---|
P0 | 0 - 0 = 0 |
P1 | 5-1 = 4 |
P2 | 14 - 2 = 12 |
P3 | 8-3 = 5 |
Tempo di attesa medio: (0 + 4 + 12 + 5) / 4 = 21/4 = 5,25
Pianificazione basata su priorità
La pianificazione prioritaria è un algoritmo non preventivo e uno degli algoritmi di pianificazione più comuni nei sistemi batch.
Ad ogni processo viene assegnata una priorità. Il processo con la massima priorità deve essere eseguito per primo e così via.
I processi con la stessa priorità vengono eseguiti in base all'ordine di arrivo.
La priorità può essere decisa in base ai requisiti di memoria, ai requisiti di tempo o a qualsiasi altro requisito di risorse.
Dato: tabella dei processi e loro ora di arrivo, ora di esecuzione e priorità. Qui stiamo considerando che 1 è la priorità più bassa.
Processi | Orario di arrivo | Tempo di esecuzione | Priorità | Tempo di servizio |
---|---|---|---|---|
P0 | 0 | 5 | 1 | 0 |
P1 | 1 | 3 | 2 | 11 |
P2 | 2 | 8 | 1 | 14 |
P3 | 3 | 6 | 3 | 5 |
Waiting time di ogni processo è il seguente:
Processi | Tempo di attesa |
---|---|
P0 | 0 - 0 = 0 |
P1 | 11 - 1 = 10 |
P2 | 14 - 2 = 12 |
P3 | 5-3 = 2 |
Tempo di attesa medio: (0 + 10 + 12 + 2) / 4 = 24/4 = 6
Tempo rimanente più breve
Il tempo residuo più breve (SRT) è la versione preventiva dell'algoritmo SJN.
Il processore viene assegnato al lavoro più vicino al completamento, ma può essere preceduto da un lavoro pronto più recente con tempi più brevi per il completamento.
Impossibile implementare in sistemi interattivi in cui il tempo di CPU richiesto non è noto.
Viene spesso utilizzato in ambienti batch in cui è necessario dare la preferenza a lavori brevi.
Round Robin Scheduling
Round Robin è l'algoritmo di pianificazione preventiva del processo.
A ogni processo viene fornito un tempo di correzione per l'esecuzione, è chiamato a quantum.
Una volta che un processo viene eseguito per un determinato periodo di tempo, viene interrotto e altri processi vengono eseguiti per un determinato periodo di tempo.
Il cambio di contesto viene utilizzato per salvare gli stati dei processi anticipati.
Wait time di ogni processo è il seguente:
Processi | Tempo di attesa: Orario di servizio - Orario di arrivo |
---|---|
P0 | (0-0) + (12-3) = 9 |
P1 | (3 - 1) = 2 |
P2 | (6 - 2) + (14 - 9) + (20 - 17) = 12 |
P3 | (9 - 3) + (17 - 12) = 11 |
Tempo medio di attesa: (9 + 2 + 12 + 11) / 4 = 8.5
Pianificazione delle code a più livelli
Le code a più livelli non sono un algoritmo di pianificazione indipendente. Fanno uso di altri algoritmi esistenti per raggruppare e programmare lavori con caratteristiche comuni.
- Vengono mantenute più code per processi con caratteristiche comuni.
- Ogni coda può avere i propri algoritmi di pianificazione.
- Le priorità vengono assegnate a ciascuna coda.
Ad esempio, i lavori associati alla CPU possono essere pianificati in una coda e tutti i lavori associati a I / O in un'altra coda. Il Process Scheduler seleziona quindi alternativamente i lavori da ciascuna coda e li assegna alla CPU in base all'algoritmo assegnato alla coda.
Cos'è Thread?
Un thread è un flusso di esecuzione attraverso il codice del processo, con un proprio contatore di programma che tiene traccia di quale istruzione eseguire successivamente, registri di sistema che contengono le sue variabili di lavoro correnti e uno stack che contiene la cronologia di esecuzione.
Un thread condivide con i suoi thread peer poche informazioni come segmento di codice, segmento di dati e file aperti. Quando un thread altera un elemento della memoria del segmento di codice, tutti gli altri thread lo vedono.
Un thread è anche chiamato a lightweight process. I thread forniscono un modo per migliorare le prestazioni dell'applicazione tramite il parallelismo. I thread rappresentano un approccio software per migliorare le prestazioni del sistema operativo riducendo l'overhead thread equivale a un processo classico.
Ogni thread appartiene esattamente a un processo e nessun thread può esistere al di fuori di un processo. Ogni thread rappresenta un flusso di controllo separato. I thread sono stati utilizzati con successo nell'implementazione di server di rete e server web. Forniscono inoltre una base adeguata per l'esecuzione parallela di applicazioni su multiprocessori a memoria condivisa. La figura seguente mostra il funzionamento di un processo a thread singolo e multithread.
Differenza tra processo e thread
SN | Processi | Filo |
---|---|---|
1 | Il processo è pesante o richiede molte risorse. | Il filo è leggero e richiede meno risorse di un processo. |
2 | Il cambio di processo richiede l'interazione con il sistema operativo. | Il cambio di thread non deve interagire con il sistema operativo. |
3 | In più ambienti di elaborazione, ogni processo esegue lo stesso codice ma ha la propria memoria e le proprie risorse di file. | Tutti i thread possono condividere lo stesso insieme di file aperti, processi figli. |
4 | Se un processo è bloccato, nessun altro può essere eseguito fino a quando il primo processo non viene sbloccato. | Mentre un thread è bloccato e in attesa, può essere eseguito un secondo thread nella stessa attività. |
5 | Più processi senza l'utilizzo di thread utilizzano più risorse. | Più processi a thread utilizzano meno risorse. |
6 | In più processi ogni processo opera indipendentemente dagli altri. | Un thread può leggere, scrivere o modificare i dati di un altro thread. |
Vantaggi di Thread
- I thread riducono al minimo il tempo di cambio di contesto.
- L'uso dei thread fornisce la concorrenza all'interno di un processo.
- Comunicazione efficiente.
- È più economico creare e cambiare contesto i thread.
- I thread consentono l'utilizzo di architetture multiprocessore su scala ed efficienza maggiori.
Tipi di filo
I thread vengono implementati nei seguenti due modi:
User Level Threads - Thread gestiti dall'utente.
Kernel Level Threads - Thread gestiti dal sistema operativo che agiscono sul kernel, un core del sistema operativo.
Thread a livello utente
In questo caso, il kernel di gestione dei thread non è a conoscenza dell'esistenza dei thread. La libreria di thread contiene codice per la creazione e la distruzione di thread, per il passaggio di messaggi e dati tra thread, per la pianificazione dell'esecuzione dei thread e per il salvataggio e il ripristino dei contesti dei thread. L'applicazione inizia con un singolo thread.
Vantaggi
- Il cambio di thread non richiede privilegi in modalità kernel.
- Il thread a livello utente può essere eseguito su qualsiasi sistema operativo.
- La pianificazione può essere specifica dell'applicazione nel thread a livello utente.
- I thread a livello utente sono veloci da creare e gestire.
Svantaggi
- In un tipico sistema operativo, la maggior parte delle chiamate di sistema si blocca.
- L'applicazione multithread non può sfruttare il multiprocessing.
Thread a livello di kernel
In questo caso, la gestione dei thread viene eseguita dal kernel. Non è presente alcun codice di gestione dei thread nell'area dell'applicazione. I thread del kernel sono supportati direttamente dal sistema operativo. Qualsiasi applicazione può essere programmata per essere multithread. Tutti i thread all'interno di un'applicazione sono supportati all'interno di un singolo processo.
Il kernel conserva le informazioni di contesto per il processo nel suo insieme e per i singoli thread all'interno del processo. La pianificazione dal kernel viene eseguita su base thread. Il kernel esegue la creazione, la pianificazione e la gestione dei thread nello spazio del kernel. I thread del kernel sono generalmente più lenti da creare e gestire rispetto ai thread utente.
Vantaggi
- Il kernel può pianificare contemporaneamente più thread dallo stesso processo su più processi.
- Se un thread in un processo è bloccato, il kernel può pianificare un altro thread dello stesso processo.
- Le routine del kernel stesse possono essere multithread.
Svantaggi
- I thread del kernel sono generalmente più lenti da creare e gestire rispetto ai thread utente.
- Il trasferimento del controllo da un thread a un altro all'interno dello stesso processo richiede un cambio di modalità al kernel.
Modelli multithreading
Alcuni sistemi operativi forniscono un thread a livello utente combinato e una funzione thread a livello di kernel. Solaris è un buon esempio di questo approccio combinato. In un sistema combinato, più thread all'interno della stessa applicazione possono essere eseguiti in parallelo su più processori e una chiamata di sistema di blocco non deve bloccare l'intero processo. I modelli multithreading sono di tre tipi
- Molti a molti relazione.
- Molti a uno.
- Rapporto uno a uno.
Molti a molti modello
Il modello molti-a-molti multiplexa un numero qualsiasi di thread utente su un numero uguale o inferiore di thread del kernel.
Il diagramma seguente mostra il modello di threading molti-a-molti in cui 6 thread a livello utente sono multiplexing con 6 thread a livello di kernel. In questo modello, gli sviluppatori possono creare tutti i thread utente necessari ei thread del kernel corrispondenti possono essere eseguiti in parallelo su una macchina multiprocessore. Questo modello fornisce la massima precisione sulla concorrenza e quando un thread esegue una chiamata di sistema di blocco, il kernel può pianificare un altro thread per l'esecuzione.
Molti a un modello
Il modello many-to-one associa molti thread a livello utente a un thread a livello di kernel. La gestione dei thread viene eseguita nello spazio utente dalla libreria di thread. Quando il thread effettua una chiamata di sistema di blocco, l'intero processo verrà bloccato. Solo un thread alla volta può accedere al kernel, quindi più thread non possono essere eseguiti in parallelo su multiprocessori.
Se le librerie di thread a livello utente sono implementate nel sistema operativo in modo tale che il sistema non le supporti, i thread del kernel utilizzano le modalità di relazione molti-a-uno.
Modello uno a uno
Esiste una relazione uno a uno del thread a livello utente con il thread a livello di kernel. Questo modello fornisce più concorrenza rispetto al modello molti-a-uno. Consente inoltre l'esecuzione di un altro thread quando un thread effettua una chiamata di sistema di blocco. Supporta più thread da eseguire in parallelo sui microprocessori.
Lo svantaggio di questo modello è che la creazione del thread utente richiede il thread del kernel corrispondente. OS / 2, Windows NT e Windows 2000 utilizzano un modello di relazione uno a uno.
Differenza tra thread a livello di utente e thread a livello di kernel
SN | Thread a livello utente | Thread a livello di kernel |
---|---|---|
1 | I thread a livello utente sono più veloci da creare e gestire. | I thread a livello di kernel sono più lenti da creare e gestire. |
2 | L'implementazione avviene tramite una libreria di thread a livello di utente. | Il sistema operativo supporta la creazione di thread del kernel. |
3 | Il thread a livello utente è generico e può essere eseguito su qualsiasi sistema operativo. | Il thread a livello di kernel è specifico del sistema operativo. |
4 | Le applicazioni multi-thread non possono sfruttare il multiprocessing. | Le routine del kernel stesse possono essere multithread. |
La gestione della memoria è la funzionalità di un sistema operativo che gestisce o gestisce la memoria primaria e sposta i processi avanti e indietro tra la memoria principale e il disco durante l'esecuzione. La gestione della memoria tiene traccia di ogni singola posizione di memoria, indipendentemente dal fatto che sia assegnata a un processo o che sia gratuita. Controlla la quantità di memoria da allocare ai processi. Decide quale processo otterrà la memoria a che ora. Tiene traccia ogni volta che una parte della memoria viene liberata o non allocata e di conseguenza aggiorna lo stato.
Questo tutorial ti insegnerà i concetti di base relativi alla gestione della memoria.
Spazio degli indirizzi del processo
Lo spazio degli indirizzi del processo è l'insieme di indirizzi logici a cui fa riferimento un processo nel proprio codice. Ad esempio, quando si utilizza l'indirizzamento a 32 bit, gli indirizzi possono variare da 0 a 0x7fffffff; ovvero 2 ^ 31 numeri possibili, per una dimensione teorica totale di 2 gigabyte.
Il sistema operativo si occupa di mappare gli indirizzi logici agli indirizzi fisici al momento dell'allocazione della memoria al programma. Esistono tre tipi di indirizzi utilizzati in un programma prima e dopo l'allocazione della memoria:
SN | Indirizzi di memoria e descrizione |
---|---|
1 | Symbolic addresses Gli indirizzi utilizzati in un codice sorgente. I nomi delle variabili, le costanti e le etichette delle istruzioni sono gli elementi di base dello spazio degli indirizzi simbolici. |
2 | Relative addresses Al momento della compilazione, un compilatore converte gli indirizzi simbolici in indirizzi relativi. |
3 | Physical addresses Il caricatore genera questi indirizzi nel momento in cui un programma viene caricato nella memoria principale. |
Gli indirizzi virtuali e fisici sono gli stessi negli schemi di associazione degli indirizzi in fase di compilazione e in fase di caricamento. Gli indirizzi virtuali e fisici differiscono nello schema di associazione degli indirizzi in fase di esecuzione.
L'insieme di tutti gli indirizzi logici generati da un programma è indicato come a logical address space. L'insieme di tutti gli indirizzi fisici corrispondenti a questi indirizzi logici è denominato aphysical address space.
La mappatura del runtime dall'indirizzo virtuale a quello fisico viene eseguita dall'unità di gestione della memoria (MMU) che è un dispositivo hardware. MMU utilizza il seguente meccanismo per convertire l'indirizzo virtuale in indirizzo fisico.
Il valore nel registro di base viene aggiunto a ogni indirizzo generato da un processo utente, che viene trattato come offset nel momento in cui viene inviato in memoria. Ad esempio, se il valore del registro di base è 10000, un tentativo da parte dell'utente di utilizzare la posizione dell'indirizzo 100 verrà riallocato dinamicamente alla posizione 10100.
Il programma utente si occupa di indirizzi virtuali; non vede mai i veri indirizzi fisici.
Caricamento statico vs dinamico
La scelta tra caricamento statico o dinamico deve essere effettuata al momento dello sviluppo del programma per computer. Se devi caricare il tuo programma in modo statico, al momento della compilazione, i programmi completi verranno compilati e collegati senza lasciare alcun programma esterno o dipendenza dal modulo. Il linker combina il programma oggetto con altri moduli oggetto necessari in un programma assoluto, che include anche indirizzi logici.
Se stai scrivendo un programma caricato dinamicamente, il tuo compilatore compilerà il programma e per tutti i moduli che desideri includere dinamicamente, verranno forniti solo i riferimenti e il resto del lavoro verrà svolto al momento dell'esecuzione.
Al momento del caricamento, con static loading, il programma assoluto (ei dati) vengono caricati in memoria per avviare l'esecuzione.
Se stai usando dynamic loading, le routine dinamiche della libreria vengono archiviate su un disco in forma rilocabile e vengono caricate in memoria solo quando sono necessarie al programma.
Collegamento statico vs dinamico
Come spiegato sopra, quando viene utilizzato il collegamento statico, il linker combina tutti gli altri moduli necessari a un programma in un unico programma eseguibile per evitare qualsiasi dipendenza dal runtime.
Quando viene utilizzato il collegamento dinamico, non è necessario collegare il modulo o la libreria effettivi con il programma, piuttosto viene fornito un riferimento al modulo dinamico al momento della compilazione e del collegamento. Le librerie di collegamento dinamico (DLL) in Windows e gli oggetti condivisi in Unix sono buoni esempi di librerie dinamiche.
Scambio
Lo scambio è un meccanismo in cui un processo può essere scambiato temporaneamente dalla memoria principale (o spostato) nella memoria secondaria (disco) e rendere tale memoria disponibile ad altri processi. In un secondo momento, il sistema ripristina il processo dalla memoria secondaria alla memoria principale.
Sebbene le prestazioni siano generalmente influenzate dal processo di scambio, aiuta a eseguire più e grandi processi in parallelo e questo è il motivo Swapping is also known as a technique for memory compaction.
Il tempo totale impiegato dal processo di scambio include il tempo necessario per spostare l'intero processo su un disco secondario e quindi per copiarlo nuovamente in memoria, nonché il tempo impiegato dal processo per recuperare la memoria principale.
Supponiamo che il processo dell'utente abbia una dimensione di 2048 KB e che su un disco rigido standard in cui verrà eseguito lo scambio abbia una velocità di trasferimento dati di circa 1 MB al secondo. Il trasferimento effettivo del processo 1000K alla o dalla memoria richiederà
2048KB / 1024KB per second
= 2 seconds
= 2000 milliseconds
Considerando ora il tempo di entrata e uscita, ci vorranno 4000 millisecondi completi più altre spese generali in cui il processo compete per riguadagnare la memoria principale.
Allocazione della memoria
La memoria principale di solito ha due partizioni:
Low Memory - Il sistema operativo risiede in questa memoria.
High Memory - I processi utente sono tenuti in una memoria elevata.
Il sistema operativo utilizza il seguente meccanismo di allocazione della memoria.
SN | Allocazione e descrizione della memoria |
---|---|
1 | Single-partition allocation In questo tipo di allocazione, lo schema del registro di rilocazione viene utilizzato per proteggere i processi utente l'uno dall'altro e dalla modifica del codice e dei dati del sistema operativo. Il registro di rilocazione contiene il valore dell'indirizzo fisico più piccolo mentre il registro limite contiene un intervallo di indirizzi logici. Ogni indirizzo logico deve essere inferiore al registro limite. |
2 | Multiple-partition allocation In questo tipo di allocazione, la memoria principale è suddivisa in un numero di partizioni di dimensioni fisse in cui ciascuna partizione dovrebbe contenere un solo processo. Quando una partizione è libera, un processo viene selezionato dalla coda di input e viene caricato nella partizione libera. Quando il processo termina, la partizione diventa disponibile per un altro processo. |
Frammentazione
Quando i processi vengono caricati e rimossi dalla memoria, lo spazio di memoria libero viene suddiviso in piccoli pezzi. A volte succede che i processi non possono essere assegnati ai blocchi di memoria considerando le loro piccole dimensioni e i blocchi di memoria rimangono inutilizzati. Questo problema è noto come frammentazione.
La frammentazione è di due tipi:
SN | Frammentazione e descrizione |
---|---|
1 | External fragmentation Lo spazio di memoria totale è sufficiente per soddisfare una richiesta o per risiedervi un processo, ma non è contiguo, quindi non può essere utilizzato. |
2 | Internal fragmentation Il blocco di memoria assegnato al processo è più grande. Una parte della memoria viene lasciata inutilizzata, poiché non può essere utilizzata da un altro processo. |
Il diagramma seguente mostra come la frammentazione può causare uno spreco di memoria e una tecnica di compattazione può essere utilizzata per creare più memoria libera dalla memoria frammentata -
La frammentazione esterna può essere ridotta mediante la compattazione o la riproduzione casuale dei contenuti della memoria per collocare tutta la memoria libera in un unico grande blocco. Per rendere fattibile la compattazione, il trasferimento dovrebbe essere dinamico.
La frammentazione interna può essere ridotta assegnando efficacemente la partizione più piccola ma abbastanza grande per il processo.
Paging
Un computer può indirizzare più memoria rispetto alla quantità fisicamente installata nel sistema. Questa memoria extra è in realtà chiamata memoria virtuale ed è una sezione di un disco impostato per emulare la RAM del computer. La tecnica di paging gioca un ruolo importante nell'implementazione della memoria virtuale.
Il paging è una tecnica di gestione della memoria in cui lo spazio degli indirizzi del processo viene suddiviso in blocchi chiamati della stessa dimensione pages(la dimensione è una potenza di 2, tra 512 byte e 8192 byte). La dimensione del processo viene misurata nel numero di pagine.
Allo stesso modo, la memoria principale è divisa in piccoli blocchi di memoria (fisica) di dimensioni fisse chiamati frames e la dimensione di un frame è mantenuta uguale a quella di una pagina per avere un utilizzo ottimale della memoria principale ed evitare la frammentazione esterna.
Traduzione di indirizzi
Viene chiamato l'indirizzo della pagina logical address e rappresentato da page number e il offset.
Logical Address = Page number + page offset
Viene chiamato l'indirizzo del frame physical address e rappresentato da a frame number e il offset.
Physical Address = Frame number + page offset
Una struttura dati chiamata page map table viene utilizzato per tenere traccia della relazione tra una pagina di un processo e un frame nella memoria fisica.
Quando il sistema assegna un frame a una pagina, traduce questo indirizzo logico in un indirizzo fisico e crea una voce nella tabella delle pagine da utilizzare durante l'esecuzione del programma.
Quando un processo deve essere eseguito, le sue pagine corrispondenti vengono caricate in qualsiasi frame di memoria disponibile. Supponiamo che tu abbia un programma di 8Kb ma la tua memoria possa contenere solo 5Kb in un dato momento, quindi il concetto di paging verrà visualizzato. Quando un computer esaurisce la RAM, il sistema operativo (OS) sposta le pagine di memoria inattive o indesiderate nella memoria secondaria per liberare RAM per altri processi e le ripristina quando necessario dal programma.
Questo processo continua durante l'intera esecuzione del programma in cui il sistema operativo continua a rimuovere le pagine inattive dalla memoria principale e le scrive sulla memoria secondaria e le riporta quando richiesto dal programma.
Vantaggi e svantaggi del cercapersone
Ecco un elenco di vantaggi e svantaggi del cercapersone:
Il paging riduce la frammentazione esterna, ma soffre comunque di frammentazione interna.
Il paging è semplice da implementare e considerato una tecnica di gestione della memoria efficiente.
A causa della stessa dimensione delle pagine e dei frame, lo scambio diventa molto facile.
La tabella delle pagine richiede spazio di memoria aggiuntivo, quindi potrebbe non essere adatta per un sistema con una piccola RAM.
Segmentazione
La segmentazione è una tecnica di gestione della memoria in cui ogni lavoro è suddiviso in più segmenti di dimensioni diverse, uno per ogni modulo che contiene pezzi che svolgono funzioni correlate. Ogni segmento è in realtà uno spazio di indirizzi logici diverso del programma.
Quando un processo deve essere eseguito, la sua segmentazione corrispondente viene caricata nella memoria non contigua sebbene ogni segmento venga caricato in un blocco contiguo di memoria disponibile.
La gestione della memoria di segmentazione funziona in modo molto simile al paging, ma qui i segmenti sono di lunghezza variabile mentre, come nel paging, le pagine sono di dimensione fissa.
Un segmento di programma contiene la funzione principale del programma, le funzioni di utilità, le strutture di dati e così via. Il sistema operativo mantiene un filesegment map tableper ogni processo e un elenco di blocchi di memoria liberi insieme ai numeri di segmento, la loro dimensione e le posizioni di memoria corrispondenti nella memoria principale. Per ogni segmento, la tabella memorizza l'indirizzo iniziale del segmento e la lunghezza del segmento. Un riferimento a una posizione di memoria include un valore che identifica un segmento e un offset.
Un computer può indirizzare più memoria rispetto alla quantità fisicamente installata nel sistema. Questa memoria extra viene effettivamente chiamatavirtual memory ed è una sezione di un disco rigido che è impostata per emulare la RAM del computer.
Il principale vantaggio visibile di questo schema è che i programmi possono essere più grandi della memoria fisica. La memoria virtuale ha due scopi. Innanzitutto, ci consente di estendere l'uso della memoria fisica utilizzando il disco. In secondo luogo, ci consente di avere la protezione della memoria, perché ogni indirizzo virtuale viene tradotto in un indirizzo fisico.
Di seguito sono riportate le situazioni in cui non è necessario caricare completamente il programma nella memoria principale.
Le routine di gestione degli errori scritti dall'utente vengono utilizzate solo quando si è verificato un errore nei dati o nel calcolo.
Alcune opzioni e funzionalità di un programma possono essere utilizzate raramente.
A molte tabelle viene assegnata una quantità fissa di spazio degli indirizzi anche se viene effettivamente utilizzata solo una piccola quantità della tabella.
La capacità di eseguire un programma che è solo parzialmente in memoria contrasterebbe molti vantaggi.
Sarebbe necessario un numero inferiore di I / O per caricare o scambiare ogni programma utente in memoria.
Un programma non sarebbe più vincolato dalla quantità di memoria fisica disponibile.
Ogni programma utente potrebbe richiedere meno memoria fisica, più programmi potrebbero essere eseguiti contemporaneamente, con un corrispondente aumento dell'utilizzo della CPU e del throughput.
I moderni microprocessori destinati all'uso generico, un'unità di gestione della memoria o MMU, sono incorporati nell'hardware. Il compito della MMU è tradurre gli indirizzi virtuali in indirizzi fisici. Di seguito viene fornito un esempio di base:
La memoria virtuale è comunemente implementata dalla paginazione a richiesta. Può anche essere implementato in un sistema di segmentazione. La segmentazione della domanda può essere utilizzata anche per fornire memoria virtuale.
Paging su richiesta
Un sistema di paging a richiesta è abbastanza simile a un sistema di paging con scambio in cui i processi risiedono nella memoria secondaria e le pagine vengono caricate solo su richiesta, non in anticipo. Quando si verifica un cambio di contesto, il sistema operativo non copia nessuna delle pagine del vecchio programma sul disco o nessuna delle pagine del nuovo programma nella memoria principale Invece, inizia semplicemente a eseguire il nuovo programma dopo aver caricato la prima pagina e lo recupera pagine del programma man mano che vengono referenziati.
Durante l'esecuzione di un programma, se il programma fa riferimento a una pagina che non è disponibile nella memoria principale perché è stata sostituita un po 'prima, il processore tratta questo riferimento di memoria non valido come un page fault e trasferisce il controllo dal programma al sistema operativo per richiedere di nuovo la pagina in memoria.
Vantaggi
Di seguito sono riportati i vantaggi del cercapersone a richiesta:
- Ampia memoria virtuale.
- Uso più efficiente della memoria.
- Non ci sono limiti al grado di multiprogrammazione.
Svantaggi
Il numero di tabelle e la quantità di overhead del processore per la gestione degli interrupt di pagina sono maggiori rispetto al caso delle semplici tecniche di gestione a pagine.
Algoritmo di sostituzione della pagina
Gli algoritmi di sostituzione delle pagine sono le tecniche con cui un sistema operativo decide quali pagine di memoria sostituire, scrive su disco quando è necessario allocare una pagina di memoria. Il paging si verifica ogni volta che si verifica un errore di pagina e una pagina libera non può essere utilizzata per la contabilità a scopo di allocazione per motivo che le pagine non sono disponibili o il numero di pagine libere è inferiore a quelle richieste.
Quando si fa nuovamente riferimento alla pagina che è stata selezionata per la sostituzione ed è stata paginata, deve essere letta dal disco e ciò richiede il completamento dell'I / O. Questo processo determina la qualità dell'algoritmo di sostituzione della pagina: minore è il tempo di attesa per i page-in, migliore è l'algoritmo.
Un algoritmo di sostituzione della pagina esamina le informazioni limitate sull'accesso alle pagine fornite dall'hardware e cerca di selezionare quali pagine devono essere sostituite per ridurre al minimo il numero totale di pagine perse, bilanciandolo con i costi di archiviazione primaria e il tempo del processore dell'algoritmo si. Esistono molti algoritmi di sostituzione della pagina diversi. Valutiamo un algoritmo eseguendolo su una particolare stringa di riferimento di memoria e calcolando il numero di page fault,
Stringa di riferimento
La stringa di riferimenti alla memoria è chiamata stringa di riferimento. Le stringhe di riferimento vengono generate artificialmente o tracciando un dato sistema e registrando l'indirizzo di ogni riferimento di memoria. Quest'ultima scelta produce un gran numero di dati, dove notiamo due cose.
Per una data dimensione di pagina, dobbiamo considerare solo il numero di pagina, non l'intero indirizzo.
Se abbiamo un riferimento a una pagina p, quindi qualsiasi riferimento immediatamente successivo alla pagina pnon causerà mai un errore di pagina. La pagina p sarà in memoria dopo il primo riferimento; i riferimenti immediatamente seguenti non saranno critici.
Ad esempio, considera la seguente sequenza di indirizzi: 123,215,600,1234,76,96
Se la dimensione della pagina è 100, la stringa di riferimento è 1,2,6,12,0,0
Algoritmo First In First Out (FIFO)
La pagina più vecchia nella memoria principale è quella che verrà selezionata per la sostituzione.
Facile da implementare, mantenere un elenco, sostituire le pagine dalla coda e aggiungere nuove pagine in testa.
Algoritmo di pagina ottimale
Un algoritmo di sostituzione della pagina ottimale ha il tasso di errori di pagina più basso di tutti gli algoritmi. Esiste un algoritmo di sostituzione della pagina ottimale, chiamato OPT o MIN.
Sostituisci la pagina che non verrà utilizzata per il periodo di tempo più lungo. Usa il tempo in cui una pagina deve essere utilizzata.
Algoritmo meno utilizzato (LRU)
La pagina che nella memoria principale non è stata utilizzata da più tempo è quella che verrà selezionata per la sostituzione.
Facile da implementare, mantenere un elenco, sostituire le pagine guardando indietro nel tempo.
Algoritmo di buffering della pagina
- Per avviare rapidamente un processo, mantieni un pool di frame gratuiti.
- In caso di errore di pagina, selezionare una pagina da sostituire.
- Scrivi la nuova pagina nel frame del pool libero, contrassegna la tabella delle pagine e riavvia il processo.
- Ora scrivi la pagina sporca dal disco e posiziona il frame che contiene la pagina sostituita nel pool libero.
Algoritmo meno frequentemente utilizzato (LFU)
La pagina con il conteggio più piccolo è quella che verrà selezionata per la sostituzione.
Questo algoritmo soffre della situazione in cui una pagina viene utilizzata pesantemente durante la fase iniziale di un processo, ma poi non viene mai più utilizzata.
Algoritmo utilizzato più di frequente (MFU)
Questo algoritmo si basa sull'argomento che la pagina con il conteggio più piccolo è stata probabilmente appena introdotta e deve ancora essere utilizzata.
Uno dei compiti importanti di un sistema operativo è quello di gestire vari dispositivi I / O tra cui mouse, tastiere, touch pad, unità disco, adattatori display, dispositivi USB, schermo bitmap, LED, convertitore analogico-digitale, On / interruttore di spegnimento, connessioni di rete, I / O audio, stampanti ecc.
Un sistema di I / O è necessario per prendere una richiesta di I / O dell'applicazione e inviarla al dispositivo fisico, quindi prendere la risposta che arriva dal dispositivo e inviarla all'applicazione. I dispositivi I / O possono essere suddivisi in due categorie:
Block devices- Un dispositivo a blocchi è quello con cui il conducente comunica inviando interi blocchi di dati. Ad esempio, dischi rigidi, fotocamere USB, Disk-On-Key ecc.
Character devices- Un dispositivo a caratteri è quello con cui il conducente comunica inviando e ricevendo singoli caratteri (byte, ottetti). Ad esempio, porte seriali, porte parallele, schede audio ecc
Controller del dispositivo
I driver di dispositivo sono moduli software che possono essere collegati a un sistema operativo per gestire un particolare dispositivo. Il sistema operativo richiede l'aiuto dei driver di dispositivo per gestire tutti i dispositivi I / O.
Il controller del dispositivo funziona come un'interfaccia tra un dispositivo e un driver di dispositivo. Le unità I / O (tastiera, mouse, stampante, ecc.) Sono tipicamente costituite da un componente meccanico e un componente elettronico in cui il componente elettronico è chiamato controller del dispositivo.
C'è sempre un controller di dispositivo e un driver di dispositivo per ogni dispositivo per comunicare con i sistemi operativi. Un controller di dispositivo potrebbe essere in grado di gestire più dispositivi. Come interfaccia, il suo compito principale è convertire il flusso di bit seriale in un blocco di byte, eseguire la correzione degli errori se necessario.
Qualsiasi dispositivo connesso al computer è collegato tramite una spina e una presa e la presa è collegata a un controller del dispositivo. Di seguito è riportato un modello per il collegamento di CPU, memoria, controller e dispositivi I / O in cui CPU e controller dei dispositivi utilizzano tutti un bus comune per la comunicazione.
I / O sincrono vs asincrono
Synchronous I/O - In questo schema, l'esecuzione della CPU attende mentre l'I / O procede
Asynchronous I/O - L'I / O procede contemporaneamente all'esecuzione della CPU
Comunicazione con i dispositivi I / O
La CPU deve disporre di un modo per passare le informazioni a e da un dispositivo I / O. Sono disponibili tre approcci per comunicare con la CPU e il dispositivo.
- Istruzione speciale I / O
- I / O mappato in memoria
- Accesso diretto alla memoria (DMA)
Istruzione speciale I / O
Utilizza le istruzioni della CPU create appositamente per il controllo dei dispositivi I / O. Queste istruzioni in genere consentono l'invio di dati a un dispositivo I / O o la lettura da un dispositivo I / O.
I / O mappato in memoria
Quando si utilizza l'I / O mappato in memoria, lo stesso spazio degli indirizzi è condiviso dalla memoria e dai dispositivi I / O. Il dispositivo è collegato direttamente a determinate posizioni della memoria principale in modo che il dispositivo I / O possa trasferire blocchi di dati alla / dalla memoria senza passare attraverso la CPU.
Durante l'utilizzo di IO mappato in memoria, il sistema operativo alloca il buffer in memoria e informa il dispositivo I / O di utilizzare quel buffer per inviare dati alla CPU. Il dispositivo I / O funziona in modo asincrono con la CPU, interrompe la CPU al termine.
Il vantaggio di questo metodo è che ogni istruzione che può accedere alla memoria può essere utilizzata per manipolare un dispositivo I / O. L'I / O mappato in memoria viene utilizzato per la maggior parte dei dispositivi I / O ad alta velocità come dischi e interfacce di comunicazione.
Accesso diretto alla memoria (DMA)
I dispositivi lenti come le tastiere generano un interrupt alla CPU principale dopo il trasferimento di ogni byte. Se un dispositivo veloce come un disco generava un interrupt per ogni byte, il sistema operativo impiegherebbe la maggior parte del suo tempo a gestire questi interrupt. Quindi un tipico computer utilizza l'hardware di accesso diretto alla memoria (DMA) per ridurre questo sovraccarico.
Direct Memory Access (DMA) significa che la CPU concede l'autorizzazione al modulo I / O per leggere o scrivere nella memoria senza coinvolgimento. Il modulo DMA stesso controlla lo scambio di dati tra la memoria principale e il dispositivo I / O. La CPU è coinvolta solo all'inizio e alla fine del trasferimento e viene interrotta solo dopo che l'intero blocco è stato trasferito.
Direct Memory Access necessita di un hardware speciale chiamato controller DMA (DMAC) che gestisce i trasferimenti di dati e arbitrare l'accesso al bus di sistema. I controllori sono programmati con puntatori sorgente e destinazione (dove leggere / scrivere i dati), contatori per tenere traccia del numero di byte trasferiti e impostazioni, che includono I / O e tipi di memoria, interrupt e stati per i cicli della CPU.
Il sistema operativo utilizza l'hardware DMA come segue:
Passo | Descrizione |
---|---|
1 | Al driver del dispositivo viene chiesto di trasferire i dati del disco a un indirizzo di buffer X. |
2 | Il driver del dispositivo indica quindi al controller del disco di trasferire i dati nel buffer. |
3 | Il controller del disco avvia il trasferimento DMA. |
4 | Il controller del disco invia ogni byte al controller DMA. |
5 | Il controller DMA trasferisce i byte al buffer, aumenta l'indirizzo di memoria, diminuisce il contatore C finché C diventa zero. |
6 | Quando C diventa zero, DMA interrompe la CPU per segnalare il completamento del trasferimento. |
Polling vs interrupt I / O
Un computer deve avere un modo per rilevare l'arrivo di qualsiasi tipo di input. Ci sono due modi in cui ciò può accadere, noto comepolling e interrupts. Entrambe queste tecniche consentono al processore di gestire eventi che possono verificarsi in qualsiasi momento e che non sono correlati al processo attualmente in esecuzione.
Polling I / O
Il polling è il modo più semplice per un dispositivo I / O di comunicare con il processore. Il processo di controllo periodico dello stato del dispositivo per vedere se è il momento per la successiva operazione di I / O, è chiamato polling. Il dispositivo I / O inserisce semplicemente le informazioni in un registro di stato e il processore deve venire e ottenere le informazioni.
La maggior parte delle volte, i dispositivi non richiedono attenzione e quando uno lo fa dovrà attendere fino a quando non verrà interrogato dal programma di polling. Questo è un metodo inefficiente e gran parte del tempo dei processori viene sprecato in sondaggi non necessari.
Confronta questo metodo con un insegnante che chiede continuamente a ogni studente di una classe, uno dopo l'altro, se ha bisogno di aiuto. Ovviamente il metodo più efficiente sarebbe che uno studente informasse l'insegnante ogni volta che necessita di assistenza.
Interrompe l'I / O
Uno schema alternativo per gestire l'I / O è il metodo basato sugli interrupt. Un'interruzione è un segnale al microprocessore da un dispositivo che richiede attenzione.
Un controller di dispositivo mette un segnale di interrupt sul bus quando ha bisogno dell'attenzione della CPU quando la CPU riceve un interrupt, salva il suo stato corrente e invoca il gestore di interrupt appropriato utilizzando il vettore di interrupt (indirizzi delle routine del sistema operativo per gestire vari eventi). Quando il dispositivo di interruzione è stato risolto, la CPU continua con il suo compito originale come se non fosse mai stata interrotta.
Il software I / O è spesso organizzato nei seguenti livelli:
User Level Libraries- Fornisce un'interfaccia semplice al programma utente per eseguire input e output. Per esempio,stdio è una libreria fornita dai linguaggi di programmazione C e C ++.
Kernel Level Modules - Questo fornisce il driver del dispositivo per interagire con il controller del dispositivo e i moduli I / O indipendenti dal dispositivo utilizzati dai driver del dispositivo.
Hardware - Questo livello include hardware reale e controller hardware che interagiscono con i driver del dispositivo e rendono vivo l'hardware.
Un concetto chiave nella progettazione del software I / O è che dovrebbe essere indipendente dal dispositivo dove dovrebbe essere possibile scrivere programmi che possono accedere a qualsiasi dispositivo I / O senza dover specificare il dispositivo in anticipo. Ad esempio, un programma che legge un file come input dovrebbe essere in grado di leggere un file su un disco floppy, su un disco rigido o su un CD-ROM, senza dover modificare il programma per ogni dispositivo diverso.
I driver di periferica
I driver di dispositivo sono moduli software che possono essere collegati a un sistema operativo per gestire un particolare dispositivo. Il sistema operativo richiede l'aiuto dei driver di dispositivo per gestire tutti i dispositivi I / O. I driver di dispositivo incapsulano il codice dipendente dal dispositivo e implementano un'interfaccia standard in modo tale che il codice contenga letture / scritture di registro specifiche del dispositivo. Il driver del dispositivo, viene generalmente scritto dal produttore del dispositivo e fornito insieme al dispositivo su un CD-ROM.
Un driver di dispositivo esegue i seguenti lavori:
- Per accettare la richiesta dal software indipendente dal dispositivo sopra ad esso.
- Interagisci con il controller del dispositivo per acquisire e fornire I / O ed eseguire la gestione degli errori richiesta
- Assicurarsi che la richiesta venga eseguita correttamente
Il modo in cui un driver di dispositivo gestisce una richiesta è il seguente: Supponiamo che arrivi una richiesta per leggere un blocco N. Se il driver è inattivo nel momento in cui arriva una richiesta, inizia a eseguire la richiesta immediatamente. Altrimenti, se l'autista è già impegnato con qualche altra richiesta, inserisce la nuova richiesta nella coda delle richieste in sospeso.
Gestori di interrupt
Un gestore di interrupt, noto anche come routine di servizio di interrupt o ISR, è un pezzo di software o più specificamente una funzione di callback in un sistema operativo o più specificamente in un driver di dispositivo, la cui esecuzione è attivata dalla ricezione di un interrupt.
Quando si verifica l'interruzione, la procedura di interruzione fa tutto ciò che è necessario per gestire l'interruzione, aggiorna le strutture dei dati e riattiva il processo che era in attesa di un'interruzione.
Il meccanismo di interrupt accetta un indirizzo ─ un numero che seleziona una specifica routine / funzione di gestione degli interrupt da un piccolo insieme. Nella maggior parte delle architetture, questo indirizzo è un offset memorizzato in una tabella chiamata tabella vettoriale di interrupt. Questo vettore contiene gli indirizzi di memoria di gestori di interrupt specializzati.
Software I / O indipendente dal dispositivo
La funzione di base del software indipendente dal dispositivo è eseguire le funzioni di I / O comuni a tutti i dispositivi e fornire un'interfaccia uniforme al software a livello utente. Sebbene sia difficile scrivere software completamente indipendente dal dispositivo, possiamo scrivere alcuni moduli comuni a tutti i dispositivi. Di seguito è riportato un elenco di funzioni del software I / O indipendente dal dispositivo:
- Interfacciamento uniforme per i driver di dispositivo
- Denominazione del dispositivo: nomi mnemonici mappati ai numeri di dispositivo principali e secondari
- Protezione del dispositivo
- Fornire una dimensione del blocco indipendente dal dispositivo
- Buffering perché i dati provenienti da un dispositivo non possono essere memorizzati nella destinazione finale.
- Allocazione dello spazio di archiviazione su dispositivi a blocchi
- Assegnazione e rilascio di dispositivi dedicati
- Segnalazione errori
Software I / O spazio utente
Queste sono le librerie che forniscono un'interfaccia più ricca e semplificata per accedere alle funzionalità del kernel o, in definitiva, interattive con i driver di dispositivo. La maggior parte del software di I / O a livello utente consiste in procedure di libreria con alcune eccezioni come il sistema di spooling, che è un modo per gestire i dispositivi di I / O dedicati in un sistema multiprogrammazione.
Le librerie di I / O (ad esempio, stdio) sono nello spazio utente per fornire un'interfaccia al software di I / O indipendente dal dispositivo residente nel sistema operativo. Ad esempio putchar (), getchar (), printf () e scanf () sono esempi di stdio della libreria I / O a livello utente disponibile nella programmazione C.
Sottosistema I / O del kernel
Il sottosistema I / O del kernel è responsabile di fornire molti servizi relativi all'I / O. Di seguito sono riportati alcuni dei servizi forniti.
Scheduling- Il kernel pianifica una serie di richieste I / O per determinare un buon ordine in cui eseguirle. Quando un'applicazione emette una chiamata di sistema I / O di blocco, la richiesta viene inserita nella coda di quel dispositivo. Lo scheduler I / O del kernel riorganizza l'ordine della coda per migliorare l'efficienza complessiva del sistema e il tempo di risposta medio sperimentato dalle applicazioni.
Buffering - Il sottosistema I / O del kernel mantiene un'area di memoria nota come bufferche memorizza i dati durante il trasferimento tra due dispositivi o tra un dispositivo con un'operazione dell'applicazione. Il buffering viene eseguito per far fronte a una mancata corrispondenza di velocità tra il produttore e il consumatore di un flusso di dati o per adattarsi tra dispositivi che hanno dimensioni di trasferimento dati diverse.
Caching- Il kernel mantiene la memoria cache che è la regione della memoria veloce che contiene copie dei dati. L'accesso alla copia cache è più efficiente rispetto all'originale.
Spooling and Device Reservation- Uno spool è un buffer che contiene l'output per un dispositivo, come una stampante, che non può accettare flussi di dati interlacciati. Il sistema di spool copia i file di spool accodati sulla stampante uno alla volta. In alcuni sistemi operativi, lo spooling è gestito da un processo daemon di sistema. In altri sistemi operativi, è gestito da un thread nel kernel.
Error Handling - Un sistema operativo che utilizza la memoria protetta può proteggersi da molti tipi di errori hardware e dell'applicazione.
File
Un file è una raccolta denominata di informazioni correlate che viene registrata su una memoria secondaria come dischi magnetici, nastri magnetici e dischi ottici. In generale, un file è una sequenza di bit, byte, righe o record il cui significato è definito dal creatore del file e dall'utente.
Struttura dei file
Una struttura di file dovrebbe essere conforme a un formato richiesto che il sistema operativo possa comprendere.
Un file ha una certa struttura definita in base al suo tipo.
Un file di testo è una sequenza di caratteri organizzata in righe.
Un file sorgente è una sequenza di procedure e funzioni.
Un file oggetto è una sequenza di byte organizzata in blocchi comprensibili dalla macchina.
Quando il sistema operativo definisce diverse strutture di file, contiene anche il codice per supportare queste strutture di file. Unix, MS-DOS supportano un numero minimo di strutture di file.
Tipo di file
Il tipo di file si riferisce alla capacità del sistema operativo di distinguere diversi tipi di file come file di testo, file di origine e file binari, ecc. Molti sistemi operativi supportano molti tipi di file. Il sistema operativo come MS-DOS e UNIX ha i seguenti tipi di file:
File ordinari
- Questi sono i file che contengono le informazioni sull'utente.
- Questi possono contenere testo, database o programmi eseguibili.
- L'utente può applicare varie operazioni su tali file come aggiungere, modificare, eliminare o persino rimuovere l'intero file.
File di directory
- Questi file contengono un elenco di nomi di file e altre informazioni relative a questi file.
File speciali
- Questi file sono noti anche come file di dispositivo.
- Questi file rappresentano dispositivi fisici come dischi, terminali, stampanti, reti, unità a nastro, ecc.
Questi file sono di due tipi:
Character special files - i dati vengono gestiti carattere per carattere come nel caso di terminali o stampanti.
Block special files - i dati vengono gestiti in blocchi come nel caso di dischi e nastri.
Meccanismi di accesso ai file
Il meccanismo di accesso ai file si riferisce al modo in cui è possibile accedere ai record di un file. Esistono diversi modi per accedere ai file:
- Accesso sequenziale
- Accesso diretto / casuale
- Accesso sequenziale indicizzato
Accesso sequenziale
Un accesso sequenziale è quello in cui si accede ai record in una certa sequenza, ovvero le informazioni nel file vengono elaborate in ordine, un record dopo l'altro. Questo metodo di accesso è il più primitivo. Esempio: i compilatori di solito accedono ai file in questo modo.
Accesso diretto / casuale
Fornisce organizzazione di file ad accesso casuale, accedendo direttamente ai record.
Ogni record ha il proprio indirizzo sul file con l'aiuto del quale è possibile accedervi direttamente per la lettura o la scrittura.
I record non devono essere in alcuna sequenza all'interno del file e non devono essere in posizioni adiacenti sul supporto di memorizzazione.
Accesso sequenziale indicizzato
- Questo meccanismo è costruito sulla base dell'accesso sequenziale.
- Per ogni file viene creato un indice che contiene puntatori a vari blocchi.
- L'indice viene cercato in sequenza e il suo puntatore viene utilizzato per accedere direttamente al file.
Allocazione dello spazio
I file vengono assegnati agli spazi su disco in base al sistema operativo. I sistemi operativi vengono distribuiti seguendo tre modi principali per allocare lo spazio su disco ai file.
- Allocazione contigua
- Allocazione collegata
- Allocazione indicizzata
Allocazione contigua
- Ogni file occupa uno spazio di indirizzi contiguo su disco.
- L'indirizzo del disco assegnato è in ordine lineare.
- Facile da implementare.
- La frammentazione esterna è un problema importante con questo tipo di tecnica di allocazione.
Allocazione collegata
- Ogni file contiene un elenco di collegamenti ai blocchi del disco.
- La directory contiene un collegamento / puntatore al primo blocco di un file.
- Nessuna frammentazione esterna
- Utilizzato efficacemente nel file ad accesso sequenziale.
- Inefficiente in caso di file ad accesso diretto.
Allocazione indicizzata
- Fornisce soluzioni ai problemi di allocazione contigua e collegata.
- Viene creato un blocco indice con tutti i puntatori ai file.
- Ogni file ha il proprio blocco indice che memorizza gli indirizzi dello spazio su disco occupato dal file.
- Directory contiene gli indirizzi dei blocchi indice dei file.
La sicurezza si riferisce alla fornitura di un sistema di protezione alle risorse del sistema del computer come CPU, memoria, disco, programmi software e, soprattutto, dati / informazioni memorizzati nel sistema del computer. Se un programma per computer viene eseguito da un utente non autorizzato, può causare gravi danni al computer o ai dati in esso memorizzati. Quindi un sistema informatico deve essere protetto da accessi non autorizzati, accessi dannosi alla memoria di sistema, virus, worm, ecc. Discuteremo i seguenti argomenti in questo capitolo.
- Authentication
- Password monouso
- Minacce al programma
- Minacce di sistema
- Classificazioni di sicurezza informatica
Autenticazione
L'autenticazione si riferisce all'identificazione di ogni utente del sistema e all'associazione dei programmi in esecuzione a tali utenti. È responsabilità del sistema operativo creare un sistema di protezione che garantisca l'autenticità di un utente che esegue un particolare programma. I sistemi operativi generalmente identificano / autenticano gli utenti utilizzando i seguenti tre modi:
Username / Password - L'utente deve inserire un nome utente e una password registrati con il sistema operativo per accedere al sistema.
User card/key - L'utente deve perforare la scheda nello slot della scheda o inserire la chiave generata dal generatore di chiavi nell'opzione fornita dal sistema operativo per accedere al sistema.
User attribute - fingerprint/ eye retina pattern/ signature - L'utente deve passare il proprio attributo tramite il dispositivo di input designato utilizzato dal sistema operativo per accedere al sistema.
Password monouso
Le password monouso forniscono protezione aggiuntiva insieme alla normale autenticazione. Nel sistema One-Time Password, è richiesta una password univoca ogni volta che l'utente tenta di accedere al sistema. Una volta utilizzata una password monouso, non può essere riutilizzata. Le password monouso vengono implementate in vari modi.
Random numbers- Agli utenti vengono fornite schede con numeri stampati insieme agli alfabeti corrispondenti. Il sistema richiede numeri corrispondenti a pochi alfabeti scelti a caso.
Secret key- All'utente viene fornito un dispositivo hardware che può creare un ID segreto mappato con l'ID utente. Il sistema richiede tale ID segreto che deve essere generato ogni volta prima del login.
Network password - Alcune applicazioni commerciali inviano password monouso all'utente su cellulare / e-mail registrato, che è necessario inserire prima del login.
Minacce al programma
I processi del sistema operativo e il kernel eseguono l'attività designata come indicato. Se un programma utente ha fatto sì che questi processi eseguissero attività dannose, allora è noto comeProgram Threats. Uno degli esempi comuni di minaccia di programma è un programma installato in un computer che può archiviare e inviare le credenziali dell'utente tramite la rete ad alcuni hacker. Di seguito è riportato l'elenco di alcune minacce note ai programmi.
Trojan Horse - Tale programma intercetta le credenziali di accesso dell'utente e le memorizza per inviarle a un utente malintenzionato che può successivamente accedere al computer e può accedere alle risorse di sistema.
Trap Door - Se un programma progettato per funzionare come richiesto, ha un buco di sicurezza nel suo codice ed esegue un'azione illegale all'insaputa dell'utente, allora è chiamato ad avere una botola.
Logic Bomb- La bomba logica è una situazione in cui un programma si comporta male solo quando sono soddisfatte determinate condizioni, altrimenti funziona come un vero programma. È più difficile da rilevare.
Virus- Il virus come suggerisce il nome può replicarsi sul sistema informatico. Sono altamente pericolosi e possono modificare / eliminare file utente, sistemi di crash. Un virus è generalmente un piccolo codice incorporato in un programma. Quando l'utente accede al programma, il virus inizia a essere incorporato in altri file / programmi e può rendere il sistema inutilizzabile per l'utente
Minacce di sistema
Per minacce di sistema si intende l'uso improprio dei servizi di sistema e delle connessioni di rete per mettere in difficoltà l'utente. Le minacce di sistema possono essere utilizzate per lanciare minacce di programma su una rete completa chiamata attacco di programma. Le minacce di sistema creano un ambiente tale che le risorse del sistema operativo / i file utente vengono utilizzati in modo improprio. Di seguito è riportato l'elenco di alcune ben note minacce di sistema.
Worm- Worm è un processo che può soffocare le prestazioni di un sistema utilizzando le risorse di sistema a livelli estremi. Un processo worm genera le sue più copie in cui ciascuna copia utilizza le risorse di sistema, impedendo a tutti gli altri processi di ottenere le risorse richieste. I processi dei worm possono persino arrestare un'intera rete.
Port Scanning - La scansione delle porte è un meccanismo o un mezzo mediante il quale un hacker può rilevare le vulnerabilità del sistema per effettuare un attacco al sistema.
Denial of Service- Gli attacchi Denial of Service normalmente impediscono all'utente di fare un uso legittimo del sistema. Ad esempio, un utente potrebbe non essere in grado di utilizzare Internet se la negazione del servizio attacca le impostazioni del contenuto del browser.
Classificazioni di sicurezza informatica
Secondo i criteri di valutazione del sistema di computer affidabile del Dipartimento della Difesa degli Stati Uniti, ci sono quattro classificazioni di sicurezza nei sistemi informatici: A, B, C e D. Si tratta di specifiche ampiamente utilizzate per determinare e modellare la sicurezza dei sistemi e delle soluzioni di sicurezza. Di seguito è riportata la breve descrizione di ciascuna classificazione.
SN | Tipo di classificazione e descrizione |
---|---|
1 | Type A Il livello più alto. Utilizza specifiche di progettazione formali e tecniche di verifica. Garantisce un elevato grado di garanzia della sicurezza del processo. |
2 | Type B Fornisce un sistema di protezione obbligatorio. Avere tutte le proprietà di un sistema di classe C2. Allega un'etichetta di riservatezza a ogni oggetto. È di tre tipi.
|
3 | Type C Fornisce protezione e responsabilità dell'utente utilizzando funzionalità di controllo. È di due tipi.
|
4 | Type D Livello più basso. Protezione minima. MS-DOS, Windows 3.1 rientrano in questa categoria. |
Linux è una delle versioni popolari del sistema operativo UNIX. È open source poiché il suo codice sorgente è disponibile gratuitamente. È gratuito. Linux è stato progettato considerando la compatibilità UNIX. Il suo elenco di funzionalità è abbastanza simile a quello di UNIX.
Componenti del sistema Linux
Il sistema operativo Linux ha principalmente tre componenti
Kernel- Il kernel è la parte centrale di Linux. È responsabile di tutte le principali attività di questo sistema operativo. Consiste di vari moduli e interagisce direttamente con l'hardware sottostante. Il kernel fornisce l'astrazione richiesta per nascondere i dettagli hardware di basso livello al sistema o ai programmi applicativi.
System Library- Le librerie di sistema sono funzioni o programmi speciali che utilizzano i programmi applicativi o le utilità di sistema che accedono alle funzionalità del kernel. Queste librerie implementano la maggior parte delle funzionalità del sistema operativo e non richiedono i diritti di accesso al codice del modulo del kernel.
System Utility - I programmi di utilità di sistema sono responsabili di svolgere attività specializzate a livello individuale.
Modalità kernel vs modalità utente
Il codice del componente del kernel viene eseguito in una speciale modalità privilegiata chiamata kernel modecon pieno accesso a tutte le risorse del computer. Questo codice rappresenta un singolo processo, viene eseguito in uno spazio di indirizzi singolo e non richiede alcun cambio di contesto e quindi è molto efficiente e veloce. Il kernel esegue ogni processo e fornisce servizi di sistema ai processi, fornisce accesso protetto all'hardware ai processi.
Il codice di supporto che non è necessario per eseguire in modalità kernel si trova nella libreria di sistema. I programmi utente e altri programmi di sistema funzionano inUser Modeche non ha accesso all'hardware di sistema e al codice del kernel. I programmi / utilità utente utilizzano le librerie di sistema per accedere alle funzioni del kernel per ottenere le attività di basso livello del sistema.
Caratteristiche di base
Di seguito sono riportate alcune delle caratteristiche importanti del sistema operativo Linux.
Portable- Portabilità significa che il software può funzionare su diversi tipi di hardware allo stesso modo. Il kernel Linux ei programmi applicativi supportano la loro installazione su qualsiasi tipo di piattaforma hardware.
Open Source- Il codice sorgente di Linux è disponibile gratuitamente ed è un progetto di sviluppo basato sulla comunità. Più team lavorano in collaborazione per migliorare le capacità del sistema operativo Linux ed è in continua evoluzione.
Multi-User - Linux è un sistema multiutente significa che più utenti possono accedere contemporaneamente alle risorse di sistema come memoria / ram / programmi applicativi.
Multiprogramming - Linux è un sistema multiprogrammazione significa che più applicazioni possono essere eseguite contemporaneamente.
Hierarchical File System - Linux fornisce una struttura di file standard in cui sono organizzati i file di sistema / file utente.
Shell- Linux fornisce uno speciale programma interprete che può essere utilizzato per eseguire i comandi del sistema operativo. Può essere utilizzato per eseguire vari tipi di operazioni, richiamare programmi applicativi. eccetera.
Security - Linux fornisce la sicurezza dell'utente utilizzando funzionalità di autenticazione come protezione con password / accesso controllato a file specifici / crittografia dei dati.
Architettura
La figura seguente mostra l'architettura di un sistema Linux:
L'architettura di un sistema Linux è costituita dai seguenti livelli:
Hardware layer - L'hardware è costituito da tutti i dispositivi periferici (RAM / HDD / CPU ecc.).
Kernel - È il componente principale del sistema operativo, interagisce direttamente con l'hardware, fornisce servizi di basso livello ai componenti di livello superiore.
Shell- Un'interfaccia per il kernel, che nasconde la complessità delle funzioni del kernel agli utenti. La shell prende i comandi dall'utente ed esegue le funzioni del kernel.
Utilities - Programmi di utilità che forniscono all'utente la maggior parte delle funzionalità di un sistema operativo.