Please enable JavaScript.
Coggle requires JavaScript to display documents.
Le partizioni (2.1), Allocazione a partizioni dinamica, non contigua (2.3)…
Le partizioni (2.1)
Le partizioni sono delle sezioni della memoria centrale, in cui i processi vengono allocati. (ogni processo occupa una partizione quindi ci possono essere tanti processi quante sono le partizioni)
Se le partizioni sono troppo piccole, rendono impossibile il caricamento di processi troppo grandi (tranne se si usano le tecniche di overlay, dove sono gestite dai programmatori che devono indicare al SO come e quando devono caricare le singole parti del programma)
Se le partizioni sono troppo grosse provocano uno spreco di memoria perché i programmi occupano solo una parte della partizione
Il problema delle dimensioni può essere affrontato usando le modalità di partizione statica o dinamica, tutte e 2 usano l'allocazione statica quindi calcolano l'indirizzo fisico solo 1 volta.
Il problema della frammentazione non è completamente risolvibile, in quanto queste partizioni hanno sempre un allocazione contigua, cioè caricano i processi in un unica area continua, senza poterli suddividere su più aree distati tra loro, quindi per poter ottimizzare gli spazi di memoria e eliminare la frammentazione occorre applicare tecniche non contigue.
Allocazione a partizioni dinamica, non contigua (2.3)
Le allocazioni dinamiche riducono il problema della frammentazione ma non lo eliminano, infatti con questa tecnica le partizioni non sono fissate ma vengono create su misura per il processo (insieme alla loro dimensione), che la MMS carica nella memoria centrale, quindi il numero di partizione e la loro dimensione variano durante il tempo.
In questo scenario il problema della frammentazione si pone quando un processo termina e serve caricarne un altro di dimensioni minori, questo crea delle aree libere che però possono essere usate come nuove partizioni (Se però queste aree sono troppo piccole per contenere uno dei processi successivi , potrebbero restare a lungo inutilizzate, ci sarebbe comunque una frammentazione esterna), per ridurre questo problema il memory management system quando deve assegnare una partizione usa una di queste politiche di assegnazione:
First fit:
Il MMS scandisce la tabella delle aree libere assegnando al processo la prima partizione libera che abbia dimensione uguale o maggiore di quella richiesta (se la tabella è ordinata in base agli indirizzi di partenza, saranno frequentemente assegnati indirizzi più bassi della memoria centrale, così ci sarà verso il fondo della memoria un aera libera che potrà essere utilizzata per caricare grandi programmi).
Best fit:
Il MMS scandisce tuta la tabella delle aree libere assegnando al processo più piccolo la più piccola partizione che lo possa contendere, cioè quella che si adatta meglio al programma, le aree più grandi non vengono divise.
Entrambe queste politiche di assegnazione non eliminano il problema della frammentazione, infatti può essere che un programma sia troppo grande e non possa essere caricato perché non c'è un area abbastanza grande
Il memory management system deve poter tenere traccia oltre le partizioni anche delle aree che si liberano e che possono diventare partizioni, per fare ciò usa la tabella delle aree libere
-
-
-
Periodicamente potrà essere fatta una operazione di compattamento dove si recuperano i frammenti esterni per creare un unica ampia partizione ( per fare ciò i programmi devono essere allocati dinamicamente, questo perché un processo deve essere caricato e scaricato in una posizione diversa della memoria centrale ad ogni compattamento)
Allocazione a partizioni statiche, non contigua (2.2)
Una volta fissate le partizioni statiche (la loro dimensione è decisa dal sistemista che consce l'ampiezza media dei programmi che devono essere eseguiti), queste non posso variare a meno che non si riconfiguri il sistema, (questa tecnica è utile solo se le dimensioni dei processi sono note e simili tra loro)
Per non sprecare troppa memoria si divide la memoria in diverse partizioni, piccole, medie, grandi cosa da sfruttarla al meglio (quindi un processo grande sarà allocato in una partizione grande)
Però con questa tecnica si crea un'ampia frammentazione interna lasciando inutilizzata una parte di memoria(tranne se le dimensioni delle partizioni non coincidano casualmente con la dimensione della memoria), e i frammenti non possono né essere recuperati né diventare partizioni, non si può nemmeno attuare tecniche di compattamento perché userebbero le operazioni di swapping non richieste.
Inoltre se un programma è di dimensioni superiori rispetto a quella massima prevista, esso non potrà mai essere caricato tranne se si sfrutta la tecnica i overlay.
Oppure se un processo non può essere caricato perché le partizioni sono occupate ma la somma dello spazio disponibile di tutte le partizioni è maggiore delle dimensioni del processo
La terminazione di un processo e quindi la liberazione di una partizione però o migliorare la situazione o peggiorarla sprecando ulteriormente memoria.
Il memory management system deve poter tenere traccia delle partizioni e per fare ciò usa la tabella delle partizioni
-
IND (indirizzo della memoria centrale, dove inizia della partizione)
-
-