# data[].attributes.headline
MANCA IL MODELLO ONION SKIN E IL CICLO DI VITA DI UN PROCESSO

# data[].attributes.subject
MANCA IL MODELLO ONION SKIN E IL CICLO DI VITA DI UN PROCESSO

# data[].attributes.body
realizzata dall'MMU (Memory Management Unit) permette di eseguire programmi parzialmente caricati in memoria se è presente l'istruzione eseguibile in memoria (e possibilmente anche quelle vicine)

la memoria virtuale può essere realizzata in 3 modi:
-paginazione (programma e memoria divisi in pagine di dimensione fissa)
-segmentazione (programma suddiviso in segmenti eterogenei)
-segmentazione paginata (programma diviso in segmenti a loro volta divisi in pagine)

# data[].attributes.body
i moduli devono:
-mantenere un alto grado di indipendenza
-comunicare attraverso le primitive da essi implementati
-far in modo che la sua struttura interna deve poter essere modificata senza che gli altri moduli se ne accorgano
-essere visibili solo attraverso le loro primitive.
Il SO gestisce i Processi= una qualunque attività svolta dal SO= programma in Esecuzione.
P=(C,S)
-sezione di testo(C) codice del programma
-stato di esecuzione(S) composto da:
- program counter
- valori dei registri della CPU
-stack con i dati relativi all'esecuzione

# data[].attributes.body
la memoria viene suddivisa in diverse partizioni uguali le une alle altre, rendendo il numero di processi allocabili limitato ad un certo numero invariabile e se un  programma non corrisponde alle dimensioni della partizione si avrà uno spreco di memoria o una mancata esecuzione del processo nell'eventualità in cui quest'ultimo sia di dimensioni inferiori o maggiori; questa soluzione in compenso comporta un carico di lavoro inferioreda svolgere per il sistema operativo

# data[].attributes.body
si suddivide la memoria segmenti che compongono i 2 blocchi principali di lunghezza fissa o variabile uno contenente i dati e l'altro i codici da eseguire

in questo modo si ottimizzano tempi e consumi della memoria ma si aumenta la complessità del sistema operativo

per ogni segmento è necessario conoscere:
- se è presente in memoria ( bit P)
- l'indirizzo dal quale ha inizio (indirizzo di impianto IDI)
- la posizione sul disco (ID)
- la sua dimensione (DS)

struttura degli indirizzi logici:
composti dalla coppia:
<segmento(numero del segmento di sistema);offset(posizione della cella presente nel segmento)>

supporto segmentazione
nella tabella dei segmenti è presente una entry per ogni segmento

entry= coppia <base(indirizzo della prima cella nello spazio fisico);limite(dimensione del segmento)

# data[].attributes.body
il programma da allocare viene suddiviso in vari "blocchi" detti pagine logiche e la memoria fisica viene divisa in parti di ugual dimensione rispetto alle stesse.

è necessario conoscere:
- se occupa una pagina fisica
- la pagina fisica occupata
- la posizione del disco sulla pagina logica

viene utilizzata una tabella contenente:
- un bit P (costituisce il flag di presenza)
- un gruppo di bit ID (indicano la posizione nel disco della prima parola della pagina logica)
- un bit M (costituisce il flag di modifica)

nel caso in cui le pagine logiche siano differenti da quelle fisiche:
- pagine fisiche<pagine logiche= il programma viene caricato solo in parte in memoria
-pagine fisiche>pagine logiche= il programma viene caricato in memoria per intero

esecuzione del programma in memoria:
- è richiesta almeno una pagina fisica libera
- è sufficiente caricare una sola pagina logica in memoria per eseguire il programma (la prima pagina)
ma generalmente se ne caricano un numero maggiore per aumentare l'efficienza

# data[].attributes.body
Allocazione in informatica è un termine che indica l'assegnazione a un programma di una determinata area di memoria oppure l'assegnazione ad un file di un determinato spazio su disco.

l'allocazione può avvenire in diverse modalità:
- CONTIGUA
suddivisa a sua volta in:

-A PARTIZIONI MULTIPLE (multiprogrammazione)
che si dividono in
-fisse (di uguali dimensioni)
-variabili (

-A PARTIZIONI SINGOLE (un processo per volta)
-NON CONTIGUA
suddivisa in:
-PAGINAZIONE
-SEGMENTAZIONE
tecniche utilizzate nel caso un programma sia di dimensioni paragonabili a quelle della memoria centrale

QUALI SONO LE DIFFERENZE TRA ALLOCAZIONE CONTIGUA E NON CONTIGUA?

# data[].attributes.body
-PRONTO: attente che gli venga assegnata la CPU
-ESECUZIONE
-ATTESA(O BLOCCATO)
-quando richiede un operazione da I/O
-PRONTO:quando attente di essere caricato nella memoria centrale

# data[].attributes.body
-sistema Multi-programmati: (può caricare simultaneamente più programmi)
-sistema time sharing (La CPU permette all'utente di interaggire con più programmi grazie alla sua frequenza)
-sistema Multi-processore( i suoi processi condividono il bus di sistema, il clock)
- sistema distribuiti (insieme di processori che non condividono ne memoria ne clock)

NEPPURE QUESTI

# data[].attributes.body
- Sono  dei processi di sistema che fungono da interfaccia tra l'utente e il dispositivo
- adattano i programmi dal formato virtuale a quello dello reale, cioè a quello della periferica in uso
- sono i driver assieme al meccanismo hardware e al gestore dei processi che rende possibile la contemporaneità della fase di esecuzione e di I/O di un processo

# data[].attributes.body
esistono fari tipi di SO:
-sistema dedicato( utilizza un solo utente per volta)
- sistema batch( l'utente non interagisce con l'esecuzione del processo
-sistema interattivo multiutente( grazie all'uso del time sharing della CPU da la possibilità di interaggire col programma)
- sistema real time( nati dall'esigenza che alcuni processi devono essere eleborati un tempo preciso

QUESTI NON VE LI CHIEDERò

# data[].attributes.body
vengono identificate con una lettera
Per funziona re hanno bisogna che dei driver vengano installati e possono essere:
-autointallanti
- necessitano di intallazione manuale

# data[].attributes.body
- adatta la mod. d'uso alle singole periferiche
- usa dei driver che gli "insegnano" come usare le periferiche

# data[].attributes.body
Possono essere componenti hardware esterni, fare parte o meno del case che contiene la CPU, possono essere collegate via radio o cavo e possono anche avere un micro processore.

# data[].attributes.body
i più "famosi" sistemi operativi sono ad esempio: Windows, Mac e Linux, ma cos'è un sistema operativo? un SO è un gruppo di programmi(software) che gestisce il funzionamento del computer, è composto da un hard disk, dal Kermel(nucleo del SO) e l'unica parte del SO che rimane in memoria( viene isolata dallo shell)

# data[].attributes.body
- creazione
- spostamento
- copia
- rinominazione
- cancellazione
- interrogazione
- modifica proprietà

# data[].attributes.body
- nome
- contenuto
- tipo
- identificatore
- informazioni

# data[].attributes.body
E' un array di byte ciascuno con indirizzo. dove vengono memorizzati dati e programmi. Più di un singolo programma può essere caricato simultaneamente.

# data[].attributes.body
le directory organizzano file e altre directory all'interno del file system
I pathname sono il nome del file espresso in processo e servono a localizzare ogni entità nel file system.

PATHNAME ASSOLUTI: quando il percorso parte dalla radice e finisce con il file
PATHNAME RELATIVO. quando il percorso parte dala directionary corrente.

# data[].attributes.headline
Cos'è il file system  e come possiamo suddividerli

# data[].attributes.subject
Cos'è il file system  e come possiamo suddividerli

# data[].attributes.body
-si occupa della gestione delle informazioni

-ha una struttura ad albero, la quale è logica e non ha alcuna relazione con l'organizzazione su disco

-provvede alla virtualizzazione di memorie di massa e genera una macchina costituita da più elementi indipendenti, i quali possono accedere a tutte le risorse virtuali.

Ci sono più tipi di file sistem, dedicati a  diversi sistemi operativi e si possono classificare così:
-quelli destinati a organizzare i dati su un disco locale, detti PER UNITA' LOCALI
-oppure quelli destinati a condividere dati tra più computer collegati ad una rete comune, superando le differenze tra i sistemi operativi e quindi tra i file system locali. Essi sono i FILE SYSTEM DISTRIBUITI.

Ecco la struttura ad albero/radice (ROOT)

# data[].attributes.body
-monitora chi usa la memoria e quanta ne sta utilizzando.
-decide a quali attività dare la precedenza pe essere eseguite  quando si libera dello spazio in memoria
-alloca e dealloca spazi di memoria
-evita che i programmi capitino in zone di memoria non destinate a loro (PROTEZIONE)
-realizza collegamenti (binding) tra memoria logica e memoria fisica

# data[].attributes.body
Gli indirizzi possonon essere:
-logici, ossia gli indirizzi creati dal programma in esecuzione o "run-time" che localizzano celle all'interno del suo spazio logico
-simbolico: conducono a dati di memoria tramite simboli nei programmi in forma sorgente
-fisico, indirizzi di celle in memoria a livello hardware. Ad essi vengono associati indirizzi logici e simbolici.