Anteprima
Vedrai una selezione di 10 pagine su 52
Calcolatori - Sistemi operativi Pag. 1 Calcolatori - Sistemi operativi Pag. 2
Anteprima di 10 pagg. su 52.
Scarica il documento per vederlo tutto.
Calcolatori - Sistemi operativi Pag. 6
Anteprima di 10 pagg. su 52.
Scarica il documento per vederlo tutto.
Calcolatori - Sistemi operativi Pag. 11
Anteprima di 10 pagg. su 52.
Scarica il documento per vederlo tutto.
Calcolatori - Sistemi operativi Pag. 16
Anteprima di 10 pagg. su 52.
Scarica il documento per vederlo tutto.
Calcolatori - Sistemi operativi Pag. 21
Anteprima di 10 pagg. su 52.
Scarica il documento per vederlo tutto.
Calcolatori - Sistemi operativi Pag. 26
Anteprima di 10 pagg. su 52.
Scarica il documento per vederlo tutto.
Calcolatori - Sistemi operativi Pag. 31
Anteprima di 10 pagg. su 52.
Scarica il documento per vederlo tutto.
Calcolatori - Sistemi operativi Pag. 36
Anteprima di 10 pagg. su 52.
Scarica il documento per vederlo tutto.
Calcolatori - Sistemi operativi Pag. 41
1 su 52
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

CPU.

Linux può in molti aspetti essere compreso senza considerare l'esistenza di molti processori.

Un processo è eseguito da un solo processore e non viene influenzato dall'esistenza di altri

processori; noi parleremo di processo corrente al singolare, anche se in realtà ne esiste uno

per ogni processore.

Esiste inoltre una funzione get_current(), che restituisce il processo corrente del processore

che la esegue.

Kernel non-preemptable

Il Kernel di Linux non è preembtabile, cioè è proibita la preemption quando un processo

esegue codice del sistema operativo.

S.O. e gestione del HW

Le risorse che il sistema operativo deve gestire sono fondamentalmente le seguenti

• Processore: deve essere assegnato all'esecuzione dei diversi processi e del s.o. stesso

• Memoria: deve contenere i programmi (codice e dati) eseguiti nei diversi processi e il

s.o. stesso

• Periferiche: devono essere gestite in funzione delle richieste dei diversi processi.

Il sistema operativo deve adattarsi nel tempo all'evoluzione delle tecnologie hardware, in

particolare delle periferiche.

Adattamento di Linux all'evoluzione delle periferiche

Per rendere relativamente trasparenti le caratteristiche delle periferiche rispetto ai programmi

Calcolatori Pagina 15

Per rendere relativamente trasparenti le caratteristiche delle periferiche rispetto ai programmi

applicativi:

• l'accesso alle periferiche avviene assimilandole a dei file

• Un programma non ha necessità di conoscere i dettagli realizzativi della periferica

stessa

• Il gestore (driver) della periferica si occupa di gestire le caratteristiche della stessa e di

farla comunicare con il processo.

Per rendere semplice l'evoluzione del sistema per supportare una nuova periferica sono utili

due caratteristiche

• Poter aggiungere con relativa facilità al s.o. il software di gestione di una nuova

periferica, detto gestore di periferica (device driver)

• Permettere di configurare un sistema solo con i gestori delle periferiche effettivamente

utilizzate

Linux fornice la possibilità di inserire nel sistema novi moduli software, detti

kernel_modules, senza dover ricompilare l'intero sistema (possono essere caricati

dinamicamente nel sistema durante l'esecuzione, solo quando sono necessari).

Lo spazio di indirizzamento messo a disposizione dei moduli è il doppio rispetto a quello del

sistema di base.

Dipendenza dall'Architettura HW

Alcune funzioni dipendono dalle peculiarità dell'Hardware e sono implementate in maniera

diverse per le diverse architetture (spesso includono codice Assembler).

Nella fase di link del S.O. per una certa architettura viene scelta l'implementazione

opportuna.

Strutture dati per la gestione dei processi

L'informazione relativa ad ogni processo è rappresentata in strutture dati mantenute dal S.O.

Per il processo in esecuzione una parte del contesto, detta Contesto Hardware, è

rappresentata dal contenuto dei registri della CPU.

Anche tale parte deve essere salvata nelle strutture dati quando il processo cessa l'esecuzione,

in modo da poter essere ripristinata quando il processo tornerà in esecuzione.

Le strutture dati utilizzate per rappresentare il contesto di un processo sono 2:

• Una struttura dati, forse la più fondamentale del nucleo, che chiameremo Descrittore di

processo.

L'indirizzo del Descrittore costituisce un identificatore univoco del processo.

• Una pila di sistema operativo (sPila) del processo.

Esiste una diversa sPila per ogni processo.

Descrittore del Processo

Questa struttura viene allocata dinamicamente nella memoria dinamica del Nucleo ogni volta

che viene creato un nuovo processo. Calcolatori Pagina 16

Meccanismi HW di supporto al Sistema Operativo

lunedì 14 gennaio 2019 15:50

La realizzazione di un SO multiprogrammato richiede da parte dell'Hardware la disponibilità

di alcuni meccanismi fondamentali.

Alcune funzionalità del x64 sono inutilmente complesse, quindi ne verrà fornita una versione

semplificata.

Nel x64 esistono numero registri a 64 bit:

• Registri usabili dal programmatore, che citeremo solo quando serviranno

• Registro PC (program counter)

• Registro SP (stack pointer)

Pila:

Nel x64 la pila cresce da indirizzi alti verso indirizzi bassi (come nel MIPS), ma il

decremento e l'incremento dello SP sono svolti nella stessa istruzione di scrittura in memoria.

Push e Pop della pila richiedono una sola istruzione ciascuna.

Salto a funzione:

Il x64, a differenza del MIPS, salva il valore dell'indirizzo di ritorno sulla pila, non in un

registro.

L'istruzione di salto a funzione esegue le seguenti operazioni:

• Il registro SP viene decrementato

• Il valore del PC incrementato viene salvato sulla pila.

L'istruzione di ritorno da funzione preleva il valore di PC dalla pila incrementando poi lo SP.

Strutture dati ad accesso HW

Sono registri e strutture dati in memoria che l'Hardware accede autonomamente per eseguire

alcune operazioni.

Il S.O. può accedere a tali strutture per:

• Impostare dei valori che governano il funzionamento dell'HW

• Leggere dei valori per conoscere lo stato dell'hardware.

Registro di stato, PSR:

• Contiene l'informazione di stato che caratterizza la situazione del processore (escluse

alcune informazioni per le quali indicheremo dei registri dedicati a contenerle).

Tutti gli aspetti descritti relativamente al PSR non corrispondono ai reali meccanismi del x64,

che sono più complessi.

Modo di funzionamento

Istruzioni privilegiate

Il processore ha la possibilità di funzionare in due stati o modi diversi:

• modo Utente (detto anche non privilegiato)

• Modo Supervisore (detto anche kernel o privilegiato)

Il processore in modo S può eseguire tutte le proprie istruzioni e può accedere a tutta la

propria memoria.

Il processore in modo U può eseguire solo una parte delle proprie istruzioni e può accedere

solo a una parte della propria memoria.

Le istruzioni eseguibili solo quando il processore è in modo S sono dette istruzioni

privilegiate (ad esempio, istruzioni di I/O o di arresto della macchina).

Quando viene eseguito il S.O. il processore è in modo S, mentre quando vengono eseguiti i

normali programmi esso è in modo U.

Nel x64 esistono 4 modi, con livelli crescenti di privilegio, ma Linux ne usa solo i 2 estremi.

Il modo di funzionamento è rappresentato da un bit del PSR.

Chiamata al Sistema Operativo

Esiste un'istruzione, syscall, non privilegiata, che realizza un salto al S.O..

Calcolatori Pagina 17

Esiste un'istruzione, syscall, non privilegiata, che realizza un salto al S.O..

Syscall opera nel modo seguente:

• Il valore del PC incrementato viene salvato sulla pila

• Il valore del PSR viene salvato sulla pila

• Nel PC e nel PSR vengono caricati i valori presenti in una struttura dati ad accesso HW

detta Vettore di Syscall.

Linux realizza il vettore di syscall durante la fase di avviamento del sistema, con la coppia:

• Indirizzo della funzione system_call()

• PSR opportuno per l'esecuzione di system_call()

Questa funzione costituisce quindi il punto di entrata unico per tutti i servizi di sistema di

Linux.

Ritorno dal sistema operativo

Esiste un'istruzione sysret, privilegiata, che esegue le seguenti operazioni:

• Caricare nel PSR il valore presente sulla pila

• Carica nel PC il valore presente sulla pila

In Linux l'istruzione sysret è eseguita alla fine della funzione system_call().

Questa funzione costituisce quindi il punto di uscita dal Sistema Operativo e di ritorno al

processo che ha invocato il servizio.

Modello della memoria - Protezione del S.O.

Quando il processore è in modo U non può accedere alle zone di memoria riservate al S.O.

Viceversa, quando il processore è in modo S deve poter accedere sia alla memoria del S.O.,

sia alla memoria dei processi.

Struttura degli indirizzi:

• Spazio di indirizzamento potenziale del x64 è di byte

Al momento l'architettura limita lo spazio virtuale utilizzabile a , cioè 256 Tb; tale spazio

di archiviazione è suddiviso nei 2 sottospazi di modo U ed S, ambedue da byte:

• Lo spazio di modo U occupa i primi byte (da a )

• Lo spazio di modo S occupa i byte di indirizzo più alto )

Gli indirizzi intermedi sono detti non-canonici e se utilizzati generano un errore.

La CPU in modo S può utilizzare tutti gli indirizzi canonici.

In modo U la generazione di un indirizzo superiore a genera un

errore.

Richiami di Paginazione

La memoria del x64 è gestita tramite paginazione, le cui seguenti caratteristiche sono

sufficienti alla comprensione del nucleo:

• La memoria è suddivisa in unità dette pagine, di dimensione 4kb (12bit di offset)

• Le pagine costituiscono unità di allocazione della memoria (es. della pila o dello heap)

• Ogni indirizzo prodotto dalla CPU (virtuale) viene trasformato in un indirizzo fisico

prima di accedere alla memoria fisica: questa trasformazione è detta mappatura

virtuale/fisica.

• La mappatura è descritta da una struttura dati detta Tabella delle pagine.

Commutazione della pila nel cambio di modo

La pila utilizzata implicitamente dalla CPU nello svolgimento delle istruzioni (ad esempio

nel salto a funzione) è puntata dal registro SP.

Per realizzare il S.O. è necessario fare in modo che la pila utilizzata durante il funzionamento

in modo S sia diversa da quella utilizzata durante il funzionamento in modo U.

Per questo motivo, quando la CPU cambia modo di funzionamento deve anche poter

sostituire il valore di SP.

In questo modo la CPU utilizza una pila diversa quando opera in modi diversi.

Indicheremo con sPila e uPila le due pile quando necessario (allocate nei corrispondenti

spazi virtuali di modo U e S, ognuna costituita da 2 pagine = 8Kb).

Commutazione di pila Calcolatori Pagina 18

Commutazione di pila

Nella commutazione da modo U a modo S la commutazione di pila avviene prima del

salvataggio di informazioni sulla stessa.

L'indirizzo di ritorno a modo U deve essere salvato su sPila.

Nel ritorno da modo S a modo U l'informazione per il ritorno verrà prelevata da sPila, cioè

prima di commutare a uPila.

Sono necessarie opportune strutture dati, noi useremo un modello semplificato rispetto a

quello del x64, basato su 2 celle USP e SSP:

• SSP contiene il valore da caricare in SP al momento del passaggio al modo S; è

compito del sistema operativo garantire che tale registro contenga il valore corretto,

cioè quello relativo alla sPila del processo in esecuzion

Dettagli
Publisher
A.A. 2018-2019
52 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher AndreaNocito di informazioni apprese con la frequenza delle lezioni di Architettura dei calcolatori e sistemi operativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Milano o del prof Pelagatti Giuseppe.