Professional Documents
Culture Documents
virtual
Enric Morancho Llena
Dolors Royo Vallés
PID_00215286
© FUOC • PID_00215286 La memòria virtual
Cap part d'aquesta publicació, incloent-hi el disseny general i la coberta, no pot ser copiada,
reproduïda, emmagatzemada o transmesa de cap manera ni per cap mitjà, tant si és elèctric com
químic, mecànic, òptic, de gravació, de fotocòpia o per altres mètodes, sense l'autorització
prèvia per escrit dels titulars del copyright.
© FUOC • PID_00215286 La memòria virtual
Índex
Introducció.................................................................................................. 5
Objectius....................................................................................................... 6
2. Suport de maquinari........................................................................ 9
2.1. Funcionalitats mínimes que ha d’oferir una MMU .................... 9
2.2. Consideracions d’eficiència ......................................................... 10
Resum............................................................................................................ 24
Activitats...................................................................................................... 25
Exercicis d'autoavaluació........................................................................ 26
Solucionari.................................................................................................. 28
Glossari......................................................................................................... 29
Bibliografia................................................................................................. 30
Annexos........................................................................................................ 31
© FUOC • PID_00215286 5 La memòria virtual
Introducció
Objectius
Els materials didàctics d’aquest mòdul contenen les eines necessàries perquè
assoliu els objectius següents:
Vegeu també
L’objectiu principal de la memòria�virtual és oferir als processos una
visió idealitzada de la memòria. En el mòdul “Gestió de memò-
ria” de l’assignatura Sistemes
operatius es presenta el con-
cepte de memòria virtual.
Entre d’altres coses, aquesta idealització permet que cada procés disposi, com
a mínim, d’un espai d’adreces (espai lògic) per a ell sol, independent dels de
la resta de processos en execució; a més a més, pot permetre als processos dis-
posar d’un espai lògic de mida superior al de la memòria física instal·lada. Per
tant, la memòria virtual amaga als processos diverses problemàtiques relacio-
nades amb la memòria com ara la compartició de la memòria física entre di-
versos processos, la fragmentació externa, el fet de tenir tota la memòria física
ocupada i haver de gestionar una jerarquia de memòria... Tot i el cost de pro-
gramari i maquinari de les implementacions de memòria virtual, els avantat-
ges de disposar de memòria virtual són considerables.
Alguns dels avantatges són, per exemple, simplificar la tasca del programador, reduir el
temps de càrrega dels programes (per a començar a executar un programa, no cal que
estigui carregat totalment a la memòria física), permetre l’augment del grau de multipro-
gramació (la suma de les mides dels espais lògics de tots els processos pot superar la capa-
citat de la memòria física amb escreix), permetre compartir dades i codi entre processos...
(1)
En l’assignatura que tracta de sistemes operatius es veu una possible imple- En anglès, swap area.
mentació de memòria virtual basada en paginació. Aquesta implementació
utilitza un maquinari especialitzat anomenat memory management unit (MMU)
que tradueix dinàmicament, és a dir, en temps d’execució, les adreces lògiques
generades pels processos en adreces físiques. A més, disposa d’un espai en disc
(àrea d’intercanvi1) per a poder emmagatzemar tota aquella informació que,
en un moment donat, no pot ser emmagatzemada a la memòria física.
b) Algunes de les tasques que ha de dur a terme una implementació de me- Implementació de
mòria virtual poden ser relativament complexes i poden variar d’una versió memòria virtual
a una altra del sistema operatiu. Per tant, aquestes tasques acostumen a ser Alguns exemples de les tas-
implementades per codi propi del sistema operatiu, és a dir, estan implemen- ques que ha de dur a terme
una implementació de memò-
tades per programari. ria virtual són decidir quina
part de l’espai lògic d’un pro-
cés es troba a la memòria físi-
ca i quina a l’àrea d’intercanvi,
En aquest mòdul farem un breu repàs al component de maquinari de les im- decidir quantes pàgines pot
plementacions de memòria virtual i veurem en detall el component de pro- tenir carregades el procés a
la memòria, portar pàgines
gramari de la implementació de memòria virtual. des de l’àrea d’intercanvi a la
memòria física (swap-in), i a
l’inrevés, des de la memòria fí-
sica a l’àrea d’intercanvi (swap-
out)...
© FUOC • PID_00215286 9 La memòria virtual
2. Suport de maquinari
Aquest apartat fa un breu repàs del suport de maquinari necessari per a imple-
mentar memòria virtual basada en paginació. A més, es faran algunes consi-
deracions que cal tenir en compte en una implementació de memòria virtual.
(2)
MMU és la sigla de memory ma-
Les funcionalitats�mínimes que ha d’oferir l’MMU que implementi 2 nagement unit.
(3)
1)�Mecanisme�de�traducció. Tradueix cada adreça lògica generada per un pro- Bit�de�validesa: indica si la pàgi-
na pertany a l’espai lògic del pro-
cés a l’adreça física equivalent. Un sistema de gestió de memòria basat en pagi-
cés.
nació divideix l’espai lògic i l’espai físic en porcions de mida fixa anomenades Bit�de�presència: indica si una pà-
gina vàlida està carregada a la me-
pàgines. L’MMU descompon les adreces lògiques en dos components (identifi- mòria física.
cador de pàgina i desplaçament dins de la pàgina). Per a fer la traducció, con-
(4)
sulta una taula de pàgines en què cada entrada conté l’identificador de trama En anglès, read only.
(pàgina física) on s’emmagatzema la pàgina lògica i també un seguit de bits
(5)
de control –com a mínim, validesa i presència3, però en pot tenir altres com En anglès, dirty bit.
Taula de pàgines
La taula de pàgines és inicialitzada pel sistema operatiu en crear el procés. A mesura que
el procés s’executa, el sistema operatiu l’actualitza.
(6)
2)�Generació�d’excepcions. En cas que el mecanisme de traducció no pugui En anglès, page fault.
fer la traducció, l’MMU generarà una excepció. L’MMU pot generar diversos
tipus d’excepcions, però les més habituals són: adreça lògica invàlida (genera-
da quan el procés intenta accedir a una pàgina invàlida) i fallada de pàgina6
(generada quan el procés intenta accedir a una pàgina vàlida però que no és
present a la memòria física perquè es troba a l’àrea d’intercanvi).
Les rutines de tractament per a aquestes excepcions són rutines pròpies del
sistema operatiu. Quan es produeixi una excepció, el sistema operatiu pren-
drà el control de la situació i intentarà posar remei al problema: si no és pos-
sible solucionar-lo, el sistema operatiu avortarà el procés; si és possible soluci-
onar-lo, el sistema operatiu farà reprendre l’execució del procés des de l’accés
a memòria que ha provocat l’excepció.
© FUOC • PID_00215286 10 La memòria virtual
Si un procés intenta accedir a una pàgina vàlida però que no està present a la memòria
física, la rutina d’atenció a l’excepció de fallada de pàgina llegirà a l’àrea d’intercanvi la
pàgina sol·licitada i la copiarà a memòria física (possiblement, també calgui copiar la pà-
gina de memòria física que se sobreescriu a l’àrea d’intercanvi), actualitzarà les estructu-
res de dades del sistema operatiu relatives a memòria virtual i farà que el procés continuï
l’execució des de l’accés a memòria que ha provocat l’excepció.
Un altre escenari que pot provocar una excepció és el desbordament de la pila d’execució,
és a dir, quan un procés intenta empilar alguna dada a aquesta pila (per exemple, una
variable local, un paràmetre d’una rutina, l’adreça de retorn a una funció...) però resulta
que aquesta ja és plena, ja que en crear el procés, el sistema operatiu assigna un determi-
nat nombre de pàgines lògiques a la pila. Si aquest nombre resulta insuficient, s’acabarà
produint un desbordament de la pila. Aquest escenari provoca que el procés intenti acce-
dir a una pàgina marcada com a invàlida. La rutina del sistema operatiu que atén aquesta
excepció intentarà augmentar la mida de la pila d’execució i farà que el procés es torni
a executar des de la instrucció que ha provocat el desbordament de la pila. En cas que
la mida de la pila d’execució ja hagi arribat a la mida màxima que permet el sistema
operatiu, la rutina de tractament a l’excepció farà avortar el procés.
Figura 1. Implementació d’una MMU basada en paginació que suporti memòria virtual
1)�Estructura�de�la�taula�de�pàgines
2)�TLB�(translation�lookaside�buffer).
(7)
Conceptualment, la traducció d’adreces basada en paginació requereix fer dos TLB és la sigla de translation lo-
okaside buffer.
accessos a memòria física per a cada referència a memòria lògica: el primer per
a accedir a l’entrada corresponent de la taula de pàgines i el segon per a accedir (8)
En anglès, TLB miss.
realment a la dada. Com que aquest sobrecost no és tolerable, els sistemes de
traducció basats en paginació acostumen a disposar d’una memòria cau que
Vegeu també
conté les darreres entrades utilitzades de la taula de pàgines. Aquesta memòria
rep el nom de TLB7. Abans d’accedir a la taula de pàgines, l’MMU accedeix La localitat temporal i espacial
es tracten en l’annex 1, “Loca-
al TLB: si la traducció es troba al TLB, no caldrà accedir a la taula de pàgines; litat temporal i localitat espaci-
al d’un procés” d’aquest mò-
altrament, es produeix una fallada de TLB8 i caldrà accedir a la taula de pàgines dul didàctic.
(com si no hi hagués TLB). Els TLB són molt eficaços i estalvien una part molt
important dels accessos a la taula de pàgines perquè els accessos a memòria
dels processos exhibeixen localitat temporal i espacial, amb la qual cosa és
habitual que un procés accedeixi múltiples vegades a una mateixa pàgina.
(9)
La gestió de les fallades de TBL depèn de l’arquitectura. Per exemple, en el En anglès, page walk.
cas d’IA-32, les fallades de TBL són gestionades directament pel maquinari; és
responsabilitat del maquinari buscar la traducció a la taula de pàgines9 i actu-
alitzar el contingut del TLB. En canvi, altres arquitectures generen una excep-
ció i és el sistema operatiu el qui s’encarrega d’accedir a la taula de pàgines i
d’actualitzar el contingut del TLB.
© FUOC • PID_00215286 12 La memòria virtual
En cas de canvi de context, en algunes arquitectures cal invalidar el contingut Processador Intel Core i7
del TLB perquè les traduccions emmagatzemades en el TLB són vàlides úni-
Com a referència, el processa-
cament per al procés que estava en execució. Altres arquitectures permeten dor Intel Core i7 disposa d’un
identificar les traduccions corresponents a accessos propis del sistema opera- TLB organitzat en dos nivells.
El primer nivell conté 64 tra-
tiu; aquestes traduccions no s’invaliden en cas de canvi de context. Finalment, duccions i el segon nivell 512
traduccions. Tant el primer
altres arquitectures permeten associar una mena d’identificador de procés a com el segon nivell són me-
mòries cau amb associativitat
les entrades del TLB; en aquest cas, no cal invalidar el contingut del TLB quan 4. Quan cal fer una traducció,
es produeix un canvi de context. es consulta el primer nivell de
TLB; si no es troba la traduc-
ció, es consulta el segon nivell
de TLB; si tampoc no es troba
(fallada de TBL), cal accedir la
taula de pàgines emmagatze-
mada en memòria.
© FUOC • PID_00215286 13 La memòria virtual
Quan un procés fa una referència a una adreça dins el seu espai lògic, es calcula
a quina pàgina lògica correspon i, a continuació l’MMU comprova si aques-
ta pàgina està carregada a la memòria. En el cas que no hi sigui, es produeix
una excepció de tipus fallada de pàgina. La rutina d’atenció a aquesta excep-
ció és l’encarregada de portar la pàgina a la memòria principal des de l’àrea
d’intercanvi. Aquesta tasca no és senzilla, ja que si no hi ha pàgines lliures a
la memòria principal s’ha de prendre una decisió: o bé es bloqueja el procés i
s’espera que algun altre procés finalitzi l’execució i deixi pàgines de la memò-
ria lliures, o bé s’escull una pàgina de la memòria principal i es porta a l’àrea
d’intercanvi per fer lloc a la pàgina que ha generat la fallada de pàgina.
des a l’hora de carregar una nova pàgina a la memòria. Per tant, la política Una única excepció a aquesta
d’emplaçament no afectarà l’eficiència del gestor de la memòria virtual pagi- política de gestió de memòria
basada en paginació serien les
nada. pàgines utilitzades per disposi-
tius d’entrada/sortida que tre-
ballen directament amb direc-
cions físiques de memòria. De
En un sistema amb paginació pura (sota demanda), només es carrega una pà- totes maneres, aquestes pàgi-
gina a la memòria principal quan es produeix una fallada de pàgina amb una nes acostumen a estar assigna-
des al sistema operatiu i mai
adreça que fa referència a la pàgina en qüestió. Una altra alternativa és que, no estaran disponibles per als
processos.
aprofitant la localitat espacial dels accessos a memòria, a més de carregar la
pàgina que ha provocat la fallada també es carreguin un cert nombre addici-
(10)
onal de pàgines lògicament contigües a la que ha provocat la fallada. Aquesta En anglès, prefetching.
10
alternativa rep el nom de precerca .
© FUOC • PID_00215286 14 La memòria virtual
Una política trivial de descàrrega de pàgines consisteix a descarregar una pà- Vegeu també
gina (i actualitzar l’àrea d’intercanvi, si cal) quan sigui necessari carregar una
Recordeu que la localitat espa-
nova pàgina i no sigui possible carregar-la en cap trama lliure. Ara bé, la ma- cial es tracta en l’annex 1, “Lo-
joria de sistemes operatius intenten disposar sempre d’algunes trames lliu- calitat temporal i localitat es-
pacial d’un procés” d’aquest
res abans que siguin necessàries; per exemple, algunes rutines de tractament mòdul didàctic.
Fallades de pàgina
S’han proposat diverses polítiques de reemplaçament i, molt probable-
ment, cada sistema operatiu implementa una política diferent. En qual- Cada cop que es produeix una
fallada de pàgina es genera
sevol cas, una política�de�reemplaçament ha de tenir com a objectiu una excepció que ha de ser
tractada pel sistema operatiu,
que el percentatge de fallades de pàgina (taxa de fallades de pàgina) res- amb el canvi conseqüent de
pecte al total de referències efectuades a la memòria física sigui com més mode d’execució i transferèn-
cia de control a una rutina prò-
petit millor. pia del sistema operatiu. Com
aquestes accions tenen un cost
computacional apreciable, una
taxa excessivament gran de
fallades de pàgina pot impac-
En alguns sistemes operatius (com ara Linux) la política de reemplaçament tria tar de manera apreciable en el
únicament pàgines assignades a processos, en cap cas no escollirà una pàgina rendiment de la màquina.
Per als exemples proposats en els subapartats següents suposarem que els pro-
cessos disposen d’un nombre determinat de pàgines de la memòria física (tres).
Inicialment, en començar a executar el procés, totes estan lliures. En tots els
exemples, si no es diu el contrari, suposem un reemplaçament local.
(11)
L’algorisme FIFO11 és fàcil d’implementar (només cal una memòria intermè- FIFO és la sigla de first in, first
out.
12
dia circular i un punter), però té algunes mancances, com ara les següents:
(12)
En anglès, buffer.
• A l’hora d’escollir una pàgina candidata no es té en compte si una pàgina
ha estat molt referenciada o no. Això pot fer que es tregui de la memòria
una pàgina que s’utilitza moltíssim i, per tant, indirectament augmentem
les possibilitats que es produeixin més fallades de pàgina.
L’anomalia de Belady
Vegem un exemple concret per a il·lustrar el fet que un augment del nombre de pàgines
carregades a la memòria no implica una disminució del nombre de fallades de pàgina.
(13)
A la figura 4 mostrem el resultat d’aplicar l’algorisme de reemplaçament LRU13 LRU és la sigla de least recently
used.
a la seqüència de referències a la memòria que hem proposat com a exemple:
© FUOC • PID_00215286 18 La memòria virtual
En general, l’algorisme LRU té més bon rendiment que el FIFO, però el cost
d’implementació de l’LRU és molt més costós que el FIFO.
b) Utilitzant una pila. La idea és mantenir una estructura de tipus pila amb
el nombre de pàgines que es referencien. Sempre que es fa una referència a
una pàgina, aquesta passa al cim de la pila, de manera que les pàgines que fa
menys temps que han estat referenciades es troben a prop del cim de la pila,
i les pàgines que fa més temps que no han estat referenciades són a prop de
la base de la pila. Per a implementar aquest esquema es necessita una llista
doblement encadenada. Efectuar una actualització té un cost més gran que
fer servir els comptadors, perquè s’han d’actualitzar molts punters, però així
evitem fer una cerca de totes les pàgines.
© FUOC • PID_00215286 19 La memòria virtual
Aproximacions�a�l’algorisme�LRU
S’han proposat aproximacions a l’algorisme LRU que fan servir un bit de refe-
rència. S’associa a cada entrada de la taula de pàgines un bit de referència que
s’actualitza (es posa a 1) cada cop que es referencia la pàgina. A continuació
presentem tres d’aquestes aproximacions:
una segona oportunitat. Si decideix que cal donar una segona oportunitat a
una pàgina, l’únic que cal fer és moure el punter a la posició següent de la
memòria intermèdia circular.
© FUOC • PID_00215286 20 La memòria virtual
A l’hora de distribuir la memòria entre els processos trobem dues grans res-
triccions:
© FUOC • PID_00215286 21 La memòria virtual
1)�El�nombre�màxim�de�pàgines�de�la�memòria�física�que�es�poden�assignar
a�un�procés. Aquest nombre està determinat per la mida de la memòria física
del sistema. Si permetem a un únic procés ocupar tota la memòria del sistema,
limitem el grau de multiprogramació.
2)�El�nombre�mínim�de�pàgines�de�la�memòria�física�que�hem�d’assignar�a
un�procés. Aquest nombre està determinat per l’arquitectura del computador
on s’executa el procés. Cal recordar que per a poder executar una instrucció,
totes les pàgines de l’espai lògic a què es fa referència durant l’execució han
d’estar carregades a la memòria.
Per exemple, en un llenguatge màquina en què les instruccions tan sols puguin
tenir un operand a la memòria i totes les referències a la memòria siguin di-
rectes, és a dir, si l’adreça especificada en la instrucció és l’adreça de l’operand,
el pitjor que pot passar és que la instrucció estigui en una pàgina lògica i la
dada estigui en una altra pàgina lògica. Per tant, a tot procés, com a mínim,
se li han d’assignar dues pàgines a la memòria principal.
En canvi, si les referències als operands poden ser adreces indirectes, és a dir, Computadors PDP-8 o
si en la instrucció s’especifica una adreça de la memòria que conté l’adreça de PDP-11
l’operand buscat, llavors per a assegurar que tot procés es podrà executar cor- En els computadors PDP-8 o
rectament al sistema se li han d’assignar almenys tres pàgines de la memòria: els PDP-11, que disposaven
d’una arquitectura de llenguat-
una que contingui la instrucció, una altra amb l’adreça de l’operand i una ter- ge màquina molt complexa
(de tipus CISC), el nombre mí-
cera pàgina que inclogui l’operand. En les arquitectures actuals, de tipus RISC, nim de pàgines que s’havia
d’assignar a un procés per a
en què el llenguatge màquina és molt senzill, les necessitats mínimes solen ser assegurar una execució cor-
de dues pàgines, una per a la instrucció i una altra per a l’operand. recta podia ser considerable;
per exemple, fins a sis en el
PDP-11.
Considerant aquests valors límit, l’algorisme d’assignació haurà de determinar
el nombre de pàgines que pot tenir carregades a memòria cada procés.
Tenint en compte que no tots els processos tenen requisits de memòria iguals,
amb aquesta distribució hi ha casos en què a un procés se li assignen més
pàgines o menys pàgines de les que realment necessita.
© FUOC • PID_00215286 22 La memòria virtual
Hiperpaginació
Un sistema entra en hiperpaginació quan, a causa d’una sobrecàrrega del sistema o d’una
configuració inadequada dels gestors d’assignació i de reemplaçament de pàgines, el sis-
tema està paginant contínuament i no té temps per a executar processos. A conseqüència
d’això, la utilització efectiva de l’UCP és molt baixa, i el planificador podria interpretar
malament aquest descens en el rendiment de l’UCP i incrementar el grau de multipro-
gramació, decisió que agreuja encara més el mal funcionament del sistema, que pot ar-
ribar a col·lapsar-se.
(14)
El model del conjunt de treball14 s’intenta adaptar a la localitat dels processos. En anglès, working set.
determina la mida de la finestra (T), i el nombre de pàgines diferents que es Recordeu que la localitat espa-
referencien dintre la finestra de treball és el que forma el conjunt de treball. cial es tracta a l’annex 1, “Lo-
calitat temporal i localitat es-
Si una pàgina s’utilitza, estarà dintre del conjunt de treball, i si no es fa servir, pacial d’un procés” d’aquest
mòdul didàctic.
sortiran del conjunt de treball T referències després de ser referenciada per
darrera vegada.
Resum
En aquest mòdul didàctic s’ha presentat una descripció detallada del funci-
onament de la gestió de la memòria virtual paginada: s’han descrit les es-
tructures de dades necessàries per a implementar-la (i s’ha destacat el tipus
d’implementació, per maquinari o per programari, més adient per a cadascu-
na) i hem identificat els diferents tipus d’accions que ha de dur a terme un
gestor de la memòria virtual paginada: la càrrega inicial, l’assignació i el reem-
plaçament de pàgines.
En l’última part del mòdul s’han descrit algunes polítiques d’assignació i re-
emplaçament de pàgines de la memòria, que han estat proposades per la bi-
bliografia, i n’hem avaluat els avantatges i els inconvenients.
© FUOC • PID_00215286 25 La memòria virtual
Activitats
1. Una màquina ofereix als usuaris un espai d’adreces virtual de 224 paraules. La màquina té
218 paraules de la memòria física. La memòria virtual s’implementa per paginació, i la mida
de la pàgina és de 256 paraules. Una operació d’usuari genera l’adreça virtual 111234A6 (en
hexadecimal). Expliqueu com estableix el sistema la posició física corresponent a aquesta
adreça.
3. Busqueu informació sobre el format de les entrades de les taules de pàgines (PDE i PTE)
en l’arquitectura IA32. Quina és la diferència entre una PDE i la PTE? Quina és la funció de
cadascun dels bits de control?
4. Compareu el format de les entrades de les taules de pàgines dels processadors Intel de 64
bits amb el format dels processadors Intel de 32 bits.
5. Quan hi ha un canvi de context, què passa amb la informació que tenim a la TLB? Recordeu
que el terme canvi de context fa referència a les accions que porta a terme el sistema quan deixa
d’executar un procés i passa a executar-ne un altre que estava a l’espera per a ser executat.
6. A la TLB, podem tenir informació d’un procés, o de diversos processos a la vegada? Quins
camps hauria de tenir una entrada de la TLB per a poder suportar diversos processos simul-
tàniament?
7. Digueu si les estructures i les tècniques de programació següents són útils en un entorn de
programació amb precerca. Recordeu que heu de tenir en compte que quan es produeix una
fallada de la pàgina k, l’algorisme de precerca carrega a la memòria la pàgina k i la k + 1.
a) La pila.
b) La recerca seqüencial.
c) La recerca dicotòmica.
f) L’adreçament indirecte.
9. Suposeu que en un sistema amb gestió de la memòria virtual paginada apliquem una po-
lítica de reemplaçament que consisteix a examinar cada pàgina regularment i descarregar-la
de la memòria física si no s’ha fet servir des de l’última consulta. Què guanyaríem o perdrí-
em utilitzant aquesta política en lloc d’aplicar la política de reemplaçament LRU o la de la
segona oportunitat?
10. Imagineu que volem utilitzar un algorisme que necessita un bit de referència (com
l’algorisme de la segona oportunitat o bé el que té en compte el conjunt de pàgines de tre-
ball), però el maquinari del sistema no en proporciona. Podríeu proposar alguna manera de
simular el bit de referència? En el cas que fos possible, seria molt costós?
11. Quins problemes poden sorgir si es treuen de la memòria pàgines que intervenen en una
operació d’entrada/sortida per DMA? Com es podrien solucionar?
© FUOC • PID_00215286 26 La memòria virtual
12. Podem tenir algun problema si un algorisme de reemplaçament treu pàgines de la me-
mòria que continguin dades o codi del nucli del sistema operatiu? Per què?
13. Considerem la matriu bidimensional A declarada des del llenguatge d’alt nivell C de la
manera següent: int A[256][256]; podeu assumir que un enter ocupa 4 octets, que la matriu
es carrega a la memòria contigua per files, que A[0][0] es troba a l’adreça 2048 de l’espai lògic
i que el sistema de gestió de memòria és paginat amb una mida de pàgina igual a 1 kB.
A la pàgina 0 (que només conté codi) tenim un petit programa que inicialitza la matriu a 0.
El codi del bucle principal és:
int A[256][256];
for (i=0; i<256; i++) {
for (k=0; k<256; k++) {
A[k][i] = 0;
}
}
a) Suposant que tenim una limitació de tres pàgines físiques, quantes fallades de pàgina es
produiran si s’aplica l’algorisme de reemplaçament LRU? (Negligiu l’accés al codi del progra-
ma i tingueu en compte únicament l’accés a les dades de la matriu.)
c) Feu la mateixa anàlisi dels apartats anteriors a partir d’un sistema amb pàgines de 2 kB.
Suposeu que la matriu està carregada a la memòria per files.
14. La crida al sistema fork() d’Unix crea un procés nou que és una còpia gairebé idèntica del
procés que l’ha invocada. Per a reduir el cost computacional d’aquesta crida, la implementa-
ció d’aquesta crida utilitza una tècnica denominada copy on write (COW). Busqueu informa-
ció per a saber en què consisteix i com està implementada.
Exercicis d'autoavaluació
1. Disposem d’un sistema de gestió de memòria basat en paginació amb les característiques
següents:
• Pàgines de 4 quilobytes.
• Espai lògic de 64 quilobytes
• Espai físic de 32 quilobytes
• Nombre de pàgines físiques que pot arribar a ocupar un procés: 4.
Donada la seqüència següent d’accessos a octet (les adreces estan codificades en hexadecimal)
fetes per un procés: 6b45, 2244, 3540, 6340, 4200, 5001, 2200, 6000, 2000, 4300, 5034, 6002,
2008...
A la pàgina 0 (que únicament conté codi) tenim un petit programa que inicialitza la matriu
a 0. Si el codi del bucle principal és:
© FUOC • PID_00215286 27 La memòria virtual
int A[256][256];
for (i=0; i<256; i++) {
for (k=0; k<256; k++) {
A[k][i] = 0;
}
}
a) Quantes fallades de pàgina es produiran si suposem que el procés pot tenir tres pàgines
de la memòria física, una de les quals sempre té la pàgina que conté el codi i les altres dues
són per a les dades?
c) Què passaria si s’executés el mateix codi, però escrit en llenguatge d’alt nivell Fortran?
© FUOC • PID_00215286 28 La memòria virtual
Solucionari
Exercicis d'autoavaluació
1. Com les pàgines són de 4 kB i les adreces lògiques són de 16 bits, els 4 bits alts de les
adreces lògiques (és a dir, el primer dígit hexadecimal) indiquen el número de pàgina lògica
a la qual s’accedeix.
• LRU
En acabar la cinquena referència, la taula de pàgines tindrà (s’ha assumit que únicament les
pàgines referenciades pel procés són vàlides i que les trames físiques s’assignen començant
pel 0):
• FIFO
Si mirem el patró d’accés a la matriu del codi que s’executa, veiem que s’accedeix a la matriu
per columnes. El primer accés, A[0][0], provoca una fallada de pàgina, i carrega la pàgina
2 a la memòria física. El segon accés, A[1][0], provoca una altra fallada de pàgina, atès que
aquest element es mapa a la pàgina 3 de l’espai lògic del procés. El tercer accés, A[2][0], també
provoca una fallada de pàgina, i així en tots els accessos de la primera columna. Obtindrem
un total de 256 fallades de pàgina.
Quan s’accedeix a la segona columna torna a passar al mateix, ja que tenim carregades a la
memòria les pàgines 257 i 258, i el primer element de la segona columna és a la pàgina 2.
b) Si canviem l’ordre dels bucles, la cosa va millor. L’accés a la matriu es fa per files i, per
tant, aprofitem la localitat espacial de la matriu. El procés funcionarà de la manera següent:
el primer accés a l’element A[0][0] provoca una fallada de pàgina i la pàgina 2 es carrega a
la memòria principal. Els 255 accessos següents no originaran cap fallada de pàgina, perquè
tots els elements de la primera fila de la matriu es mapen a la pàgina 2.
L’accés a l’element A[1][0] tornarà a provocar una fallada de pàgina i la pàgina 3 es carregarà
a la memòria física; els 255 accessos següents no provocaran cap fallada de pàgina. Aquest
esquema es repeteix en totes les files de la matriu.
Per tant, amb el nou codi passem a tenir 256 fallades de pàgina, un nombre molt més raonable
que en el cas anterior. Si s’hagués aplicat la precerca, encara hauríem pogut reduir més el
nombre de fallades de pàgina.
c) En el supòsit que el codi s’hagués escrit en Fortran, els resultats haurien estat a la inversa.
El llenguatge d’alt nivell Fortran introdueix les matrius a la memòria per columnes. L’accés
a les matrius per columnes (com en l’apartat a) és més eficient que l’accés per files.
© FUOC • PID_00215286 29 La memòria virtual
Glossari
bit de presència m Bit associat a cada entrada de la taula de pàgines d’un procés que
indica si una pàgina és present a la memòria física, o no. Si el bit és 0, la pàgina no hi és;
si el bit és 1, la pàgina hi és.
bit de referència m Bit associat a cada entrada de la taula de pàgines d’un procés que
indica si la pàgina ha estat referenciada.
bit de validesa m Bit associat a cada entrada de la taula de pàgines d’un procés que indica
si la pàgina pertany a l’espai lògic del procés.
fallada de pàgina f Situació que es produeix quan s’accedeix a una adreça de l’espai lògic
del procés que no està carregada a la memòria. Després de la fallada es genera una excepció,
i la rutina associada a aquesta excepció s’ocupa de carregar a la memòria la pàgina que ha
provocat la fallada.
memòria virtual paginada f Mètode de gestió de la memòria virtual que divideix l’espai
lògic del procés en pàgines.
precerca f Mecanisme que intenta treure profit de la localitat espacial de les pàgines dels
processos carregant a la memòria, a més de la pàgina que ha provocat una fallada de pàgina,
les k pàgines següents a fi d’evitar fallades de pàgina posteriors durant l’execució del procés.
Bibliografia
Bibliografia bàsica
Silberschatz, A.; Galvin, P.; Gagne. G. (2008). Operating Systems Concepts (8a. ed.). John
Wiley & Sons.
Bibliografia complementària
Bovet, D.; Cesati, M. (2006). Understanding the Linux Kernel (3a. ed.). O’Reilly.
Gorman, M. (2004). Understanding the Linux Virtual Memory Manager. Prentice Hall.
© FUOC • PID_00215286 31 La memòria virtual
Annexos
Annex�1.�Localitat�temporal�i�localitat�espacial�d’un�procés
Vegem un exemple que il·lustra el principi de localitat. Suposem que tenim el procés
següent:
Aquest procés té definit un vector de 1.024 enters. Un enter ocupa 4 octets (32 bits) de
la memòria i, per tant, l’espai que ocupa el vector a la memòria és de 4.096 octets. El
procés inicialitza el contingut del vector, i per això executa el bucle for (i = 0; i < MAX; i
++) amb MAX igual a 1.024. Considerem que el procés s’executa en un sistema dotat de
memòria virtual paginada i que la mida de cada pàgina de la memòria física és igual a 1
kB. Suposem que l’espai d’adreces virtual del procés és el que s’indica a la figura 5.
© FUOC • PID_00215286 32 La memòria virtual
Si ens fixem en les dades, veiem que quan s’accedeix al primer element del vector, v[0],
aquest genera l’adreça lògica 1024, que correspon a la pàgina 1. Les 255 referències se-
güents als elements v[1], v[2], ..., v[255] corresponen a les adreces lògiques 1028, 1032,
1036..., totes mapades a la pàgina 1. Els 256 elements següents del vector, del v[256] al
v[511], generen accessos a la pàgina 2 de l’espai d’adreces virtual del procés. L’accés als
elements següents del vector, del v[512] al v[767], genera l’accés a la pàgina 3 de l’espai
d’adreces virtual i, finalment, les últimes 256 referències accedeixen a la pàgina 4.
1,1,1, ... 1,1,1, 2,2,2, ... 2,2,2, 3,3,3, ... 3,3,3,4,4,4, ... 4,4,4
En analitzar quin tipus de localitat apareix en aquest cas, veiem que, d’una banda, hi
ha localitat temporal mentre s’accedeix als elements d’una mateixa pàgina, i de l’altra,
trobem localitat espacial, ja que els elements del vector ocupen pàgines contigües en
l’espai d’adreces virtual, i aquestes pàgines són referenciades seqüencialment. Per tant,
es compleix la tendència que quan referenciem una pàgina hi ha una probabilitat molt
alta que al cap d’un temps relativament no gaire gran es referenciï la pàgina següent.
Podem treure profit d’aquest comportament del procés per a evitar treure pàgines que
són molt referenciades. Per exemple, si es fa referència contínuament a la pàgina 0, seria
molt poc eficient portar-la al disc mentre s’executa el procés, ja que es produirien moltes
fallades de pàgina i hi hauria un increment del temps total d’execució del procés. Així
doncs, la localitat temporal dels processos ens pot ajudar a definir polítiques per a decidir
quina pàgina és candidata a sortir de la memòria.
Com�es�pot�aprofitar�la�localitat�espacial
Hem vist que en un sistema amb paginació pura només portem pàgines a la
memòria principal si es produeix una fallada de pàgina. Si suposem que els
processos tenen localitat espacial, podem avançar feina i, quan es produeix
una fallada de pàgina, a més de carregar a la memòria la pàgina en qüestió
(pàgina k), hi podem carregar també la pàgina següent, la k + 1 –la pàgina
contigua en l’espai d’adreces lògiques del procés. Aquesta tècnica s’anomena
precerca.
© FUOC • PID_00215286 33 La memòria virtual
Annex�2.�Assignació�de�memòria�en�el�nucli�Linux
Al llarg del cicle de vida dels processos d’usuari, aquests sol·liciten memòria
tant en el moment de la creació (per a ubicar el codi, les dades i la pila del nou
procés) com en temps d’execució (si el procés demana memòria dinàmica, si
cal fer créixer la pila, si es carrega un nou executable utilitzant alguna de les
crides exec). El nucli utilitza la granularitat de pàgina per a assignar/desassignar
memòria als processos d’usuari.
Ara bé, el nucli del sistema operatiu també té necessitats de memòria dinàmi-
ca: memòries intermèdies, estructures de dades... Cal notar que les peticions
de memòria fetes pel nucli de l’SO tenen unes particularitats respecte a les pe-
ticions dels processos d’usuari:
Tot plegat fa que el nucli del sistema operatiu utilitzi un gestor de memòria
específic per a satisfer les seves necessitats de memòria dinàmica. A continua-
ció veurem els gestors de memòria utilitzats pel nucli Linux per a satisfer les
peticions de memòria del nucli mateix.
1)�Espai�d’adreces�lògic�del�nucli�Linux�en�IA-32
Dins del rang d’adreces lògic del nucli Linux, trobem aquestes parts:
2)�Assignació�de�memòria�al�nucli
a)�Assignació�de�pàgines�físicament�contigües:�buddy�system
Aquest gestor permet obtenir pàgines físicament contigües. Ara bé, està disse-
nyat per a intentar minimitzar l’impacte de la fragmentació externa que pot
provocar la contigüitat. El buddy system es fonamenta en dues característiques:
• La unitat d’assignació són blocs de mida una potència de 2 (per tant, podrà
tenir un cert grau de fragmentació interna). Si el nucli sol·licita K pàgines,
i
l’algorisme satisfarà la petició assignant-hi 2 pàgines, en què 2i-1 < K ≤ 2i.
L’exponent i es denomina ordre de la petició.
annex, el nucli Linux instal·lat sobre un processador IA-32 no pot accedir di-
rectament a tot l’espai físic de memòria per sobre d’aquesta adreça. En pro-
cessadors de 64 bits, aquesta zona és buida). Quan el nucli sol·licita memòria
utilitzant el buddy system, ha d’especificar de quina zona la vol.
b)�Assignació�de�memòria�físicament�contigua�(mida�arbitrària)
SLAB�allocator
Aquest gestor està disponible en el nucli de Linux des de la versió 2.2. Les seves
característiques principals són:
• Una slab-cache està formada per una o més lloses. Totes les slabs d’una slab-
cache són de la mateixa mida.
Figura 7. Exemple en què es mostren dues slab-cache, una amb dues lloses (de 3
pàgines) i l’altra amb una llosa (de 2 pàgines)
Cada llosa d’una slab-cache té un d’aquests tres estats: empty (tots els seus ob-
jectes estan marcats com a lliures), partial (alguns objectes estan marcats com
a lliures i altres com a utilitzats) i full (tots els objectes estan marcats com a
utilitzats). Inicialment, la llosa està empty.
Quan el nucli retorna la memòria d’un objecte, només cal marcar l’objecte
com a lliure i, si cal, actualitzar l’estat de la llosa corresponent.
© FUOC • PID_00215286 39 La memòria virtual
Els avantatges d’aquest gestor són que minimitza la fragmentació interna i que
és molt ràpid assignant/desassignant objectes al nucli (observeu que la memò-
ria ha estat preassignada al gestor en crear cada slab-cache). L’inconvenient
principal és la manca d’escalabilitat a sistemes amb molts processadors.
SLUB�allocator
SLOB�allocator
SLOB (simply list of blocks) és un gestor que està implementat pensant en dis-
positius petits i encastats. Per tant, el seu cost computacional és molt inferior
al dels gestors SLAB i SLUB. L’inconvenient d’aquest gestor és que la fragmen-
tació interna li pot fer desaprofitar la memòria disponible.
c)�Assignació�no�contigua
El nucli Linux també pot sol·licitar memòria sense imposar la restricció que
les pàgines de memòria física assignades hagin de ser físicament contigües.
El nucli Linux utilitza aquest tipus d’assignació quan l’usuari instal·la algun
mòdul, en fer entrada/sortida sobre alguns dispositius i quan necessita accedir
a memòria física per sobre de l’adreça física 896 MB.
© FUOC • PID_00215286 40 La memòria virtual