Gestió de la memòria

De Viquipèdia
Dreceres ràpides: navegació, cerca

En informàtica, la gestió de la memòria és proveir de porcions de la memòria als processos a mesura que els vagin necessitant, i alliberar aquests 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.

Objectius[modifica | modifica el codi]

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[modifica | modifica el codi]

Les funcions principals de la gestió de memòria en sistemes operatius multi tasca 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 moment 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 secundaria temporalment al tornar a la memòria principal molt possiblement no podrà tornar a 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 nivell de memòria del sistema.

Espais d'adreces dels processos[modifica | modifica el codi]

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 mesura de l'arquitectura del processador i del component de maquinari encarregat d'aquesta transformació.

Unitats de gestió de memòria[modifica | modifica el codi]

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[modifica | modifica el codi]

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[modifica | modifica el codi]

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 dos 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 secundaria es diu intercanvi (swap).

Partició variable[modifica | modifica el codi]

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

Fragmentació[modifica | modifica el codi]

La fragmentació és un problema que sorgeix en la gestió de la memòria. Segons els 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[modifica | modifica el codi]

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

Fragmentació externa[modifica | modifica el codi]

En el cas de fer particions variables, el problema succeïx 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ó.

Sistemes d'assignació no contigua de memòria[modifica | modifica el codi]

Segmentació[modifica | modifica el codi]

Article principal: Segmentació de memòria

Paginació[modifica | modifica el codi]

Article principal: Paginació de memòria

Memòria virtual[modifica | modifica el codi]

Article principal: Memòria virtual

Intercanvi (swapping)[modifica | modifica el codi]

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 al disc dur) 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.

Vegeu també[modifica | modifica el codi]