# Gestió de la memòria

En informàtica, la gestió de la memòria (o bé administració de memòria) és proveir de porcions de la memòria als processos a mesura que els vagin necessitant, i alliberar aquestes porcions de memòria a mesura que ja no la necessitin. La gestió de la memòria és un procés crític per al correcte funcionament del sistema. Tot i que durant els inicis de la informàtica els usuaris eren els responsables de fer aquesta gestió, actualment el responsable en sol ser el sistema operatiu.
Seguint amb el concepte de màquina virtual d'un sistema operatiu (la màquina virtual és aquella màquina més senzilla d'utilitzar que el sistema operatiu ofereix als usuaris i aplicacions del sistema) amb la memòria tenim també un nivell d'abstracció més i utilitzem el que s'anomena memòria virtual que separa l'espai lògic d'adreces de l'espai d'adreces real, que permet que mitjançant tècniques com l'intercanvi (swapping) es pugui fer un millor ús de la memòria RAM.
La part del sistema operatiu que administra la memòria és l'administrador de memòria. La seva funció és clara: portar en un registre les parts de memòria que s'estan utilitzant i les que no. D'aquesta manera, reservarà espai de memòria per als nous processos i alliberarà l'espai dels processos que han finalitzat. També s'encarrega de gestionar l'intercanvi de dades entre memòria i disc, sempre que els processos siguin tan grans que no càpiguen d'un sol cop a la memòria.

## Objectius

Els objectius principals de la gestió de memòria són:
* proveir d'espai suficient de memòria per tal d'executar múltiples processos alhora (programació multi tasca).
* proveir d'un nivell satisfactori de rendiment de cara als usuaris del sistema.
* protegir els recursos dels programes.
* compartir, si es desitja, informació entre els processos del sistema utilitzant memòria compartida.
* fer que la gestió de la memòria sigui el més transparent possible per als programadors.

## Funcions

Les funcions principals de la gestió de memòria en sistemes operatius multitasca són:
* Recol·locació: en sistemes on s'utilitza memòria virtual, els programes que es troben a la memòria principal han de ser capaços de ser tornats a situar en diferents parts de la memòria en diferents moments de la seva execució. Això passa per què un procés que mitjançant una operació d'intercanvi (swapping) ha estat mogut de la memòria principal a la memòria secundària temporalment en tornar a la memòria principal molt possiblement no podrà tornar a col·locar-se al mateix lloc. Els sistemes operatius han de ser capaços de fer aquestes operacions de forma que les referències de memòria del codi del programa sempre apuntin al lloc correcte.
* Protecció: els processos no han de ser capaços d'utilitzar la memòria d'altres processos sense permís. Això és el que s'anomena protecció de la memòria i preveu que tant el codi maliciós com el codi erroni d'un programa pugui interferir amb el correcte funcionament d'altres processos del sistema.
* Memòria compartida: tot i l'existència de la protecció de memòria en força casos els processos han de ser capaços d'intercanviar informació accedint a parts compartides de memòria.
* Organització lògica de la memòria: el sistema de gestió de la memòria és l'encarregat d'organitzar la memòria en parts lògiques. Hi ha diferents formes d'organitzar la memòria lògicament però les més conegudes són la segmentació i la paginació.
* Organització física de la memòria: la memòria està organitzada en nivells jeràrquics (memòria principal, memòria secundària). Els sistemes operatius s'han d'encarregar dels fluxes d'informació entre els diferents nivells de memòria del sistema.

## Espais d'adreces dels processos

L'espai d'adreces lògiques del procés són les adreces utilitzades pel programa i solen ser identificadors de les diferents parts del programa. Són adreces locals en el sentit que l'entorn on s'hagin d'executar no té importància.
L'espai d'adreces físiques del procés són les adreces assignades al procés en temps de càrrega, és a dir són el lloc físic on realment resideixen les dades del programa.
La propietat de la reubicació fa referència a la capacitat dels programes a ser carregats per tal de ser posteriorment executats en qualsevol posició de memòria. Si no fos així, seria necessari saber totes les adreces d'un programa en temps de compilació. Hi ha dos tipus de reubicacions:
* Reubicació estàtica: la reubicació del procés es realitza durant la càrrega del programa a memòria per tal de ser executat. Aquests sistemes no permeten la reubicació del procés durant la seva execució i no és un sistema gaire flexible en aquest sentit. Aquests sistemes s'utilitzen en sistemes operatius molt concrets on no es necessita reubicació de processos en temps d'execució.
* Reubicació dinàmica: en aquest cas la traducció d'adreces lògiques a físiques es fa durant el temps d'execució del programa. Durant l'execució del procés tots els accessos a memòria són reubicats abans d'accedir a la memòria física. Aquest mecanisme és completament transparent per al programador i els usuaris.
La transformació d'adreces de memòria depèn en gran manera de l'arquitectura del processador i del component de maquinari encarregat d'aquesta transformació.

## Unitats de gestió de memòria

Les unitats de gestió de memòria també conegudes per les inicials angleses MMU (Memory Managment Units) són un component de maquinari encarregat de gestionar l'accés a la memòria des de la CPU. La seva funció principal és la conversió d'adreces virtuals en adreces físiques.

## Sistemes d'assignació contigua de memòria

Els primers sistemes operatius no tenien cap sistema de gestió de la memòria. Es tractava de sistemes bàsicament monoprocés on els processos no s'executaven paral·lelament sinó seqüencialment. Amb l'aparició de la multiprogramació van aparèixer els primers sistemes de gestió de la memòria en particions.

### Partició estàtica

Durant l'arrancada del sistema es reparteix la memòria en diferents trossos normalment de diferents mides. Cada tros que es crea s'anomena partició. Les particions es mantenen fins a la propera arrancada del sistema i no es poden fer modificacions.
La informació de les particions es guarda en una taula (inici de la partició, mida, estat). Quan es vol executar un procés que no és a la memòria principal el sistema busca una partició lliure on assignar-lo. Hi ha 2 polítiques típiques d'assignació:
* Assignar la partició més escaient per al procés. Es fa un ús més eficient de la memòria però és més lent.
* Assignar la primera partició lliure. Més ràpid però menys eficient en ús de memòria.
Quan no hi ha particions lliures hi ha dues opcions:
* Deixar el procés en espera.
* Obligar un procés que està resident en memòria a deixar la seva partició lliure per tal que la pugui utilitzar el nou procés.
El procés de passar l'espai d'adreces d'un procés de la memòria principal a la secundària es diu intercanvi (swap).

### Partició variable

Aquests tipus de sistemes generen les particions de la memòria de forma dinàmica a mesura que es necessita la memòria.

## Fragmentació

La fragmentació és un problema que sorgeix en la gestió de la memòria. Segons el procediment utilitzat per a gestionar la memòria aquesta no s'utilitza sempre de la forma més eficient. Hi ha diferents tipus de fragmentació de la memòria:

### Fragmentació interna

En el cas de particions estàtiques, sempre acaba succeint que part de la informació d'algunes particions no s'utilitza per al procés. Aquesta fragmentació s'anomena interna.

### Fragmentació externa

En el cas de fer particions variables, el problema succeeix a mesura que els processos van alliberant particions i els espais de memòria lliures deixen de ser contigus. Per això, es fa necessari acabar compactant la memòria, procés que reorganitza tots els processos residents per tal que ocupin un espai contigu de memòria. Aquest procés, però, és molt costós en temps d'execució.

## Intercanvi (swapping)

L'intercanvi o swap és el procés de moure porcions de memòria de la memòria principal (típicament la RAM) a un espai d'intercanvi (típicament a un dispositiu físic) o viceversa. Es parla de swap in quan es mou la informació de disc a RAM i de swap out quan la transmissió d'informació és entre la RAM i el disc. Els termes intercanvi i paginació sovint es confonen però no són exactament el mateix. L'intercanvi de dades entre la RAM i el disc dur es pot dur a terme sobre pàgines o sobre segment i té per tant un sentit més generalista.

## Referències

* ↑ «memory management from FOLDOC». [Consulta: 22 setembre 2024].
* ↑ «Memory Management Glossary: M — Memory Management Reference 4.0 documentation». [Consulta: 22 setembre 2024].
* ↑ «Memory Management in Operating System» (en anglès americà), 18-08-2021. [Consulta: 25 setembre 2024].
* ↑ «What is memory management in a computer environment?» (en anglès). [Consulta: 25 setembre 2024].

## Vegeu també

* Àrea de memòria alta
* Àrea de memòria superior
* Bank switching
* Memòria convencional
* Memòria estesa
* Memòria expandida
* Memòria virtual
* Mode irreal
* Paginació de memòria