Taula de pàgines
Una taula de pàgines és l'estructura de dades utilitzada per un sistema de memòria virtual en un sistema operatiu d'ordinador per emmagatzemar la correspondència entre adreces virtuals i adreces físiques. Les adreces virtuals són utilitzades pel programa executat pel procés d'accés, mentre que les adreces físiques són utilitzades pel maquinari, o més concretament, pel subsistema de memòria d'accés aleatori (RAM). La taula de pàgines és un component clau de la traducció d'adreces virtuals que és necessària per accedir a les dades de la memòria.[1]
Paper de la taula de pàgines
[modifica]En els sistemes operatius que utilitzen memòria virtual, cada procés té la impressió que està treballant amb grans seccions contigües de memòria. Físicament, la memòria de cada procés es pot dispersar per diferents àrees de memòria física o s'hauria mogut (apagat) a un emmagatzematge secundari, normalment a una unitat de disc dur (HDD) o unitat d'estat sòlid (SSD).
Quan un procés demana accés a les dades de la seva memòria, és responsabilitat del sistema operatiu mapar l'adreça virtual proporcionada pel procés amb l'adreça física de la memòria real on s'emmagatzemen les dades. La taula de pàgines és on el sistema operatiu emmagatzema els seus mapes d'adreces virtuals a adreces físiques, amb cada mapeig també conegut com a entrada de taula de pàgines (PTE).[2][3]
El procés de traducció
[modifica]La unitat de gestió de memòria (MMU) dins de la CPU emmagatzema una memòria cau dels mapes utilitzats recentment de la taula de pàgines del sistema operatiu. Això s'anomena memòria intermèdia de traducció (TLB), que és una memòria cau associativa.
Quan cal traduir una adreça virtual a una adreça física, primer es cerca el TLB. Si es troba una coincidència, que es coneix com a hit TLB, es retorna l'adreça física i l'accés a la memòria pot continuar. Tanmateix, si no hi ha cap coincidència, que s'anomena TLB miss, l'MMU o el gestor de TLB miss del sistema operatiu normalment buscarà l'assignació d'adreces a la taula de pàgines per veure si existeix una assignació, que s'anomena pas de pàgina . Si n'hi ha, es torna a escriure al TLB, cosa que s'ha de fer perquè el maquinari accedeix a la memòria a través del TLB en un sistema de memòria virtual i es reinicia la instrucció d'error, cosa que també pot passar en paral·lel. La traducció posterior donarà lloc a un hit TLB i l'accés a la memòria continuarà.[4]
Falles de traducció
[modifica]La cerca de la taula de pàgines pot fallar, provocant un error de pàgina, per dos motius:
- La cerca pot fallar si no hi ha cap traducció disponible per a l'adreça virtual, el que significa que l'adreça virtual no és vàlida. Això es produirà normalment a causa d'un error de programació i el sistema operatiu ha de prendre alguna acció per solucionar el problema. En els sistemes operatius moderns, provocarà que s'enviï un senyal d'error de segmentació al programa infractor.
- La cerca també pot fallar si la pàgina actualment no resideix a la memòria física. Això passarà si la pàgina sol·licitada s'ha mogut de la memòria física per fer espai per a una altra pàgina. En aquest cas, la pàgina es desplaça a un magatzem secundari situat en un mitjà com una unitat de disc dur (aquest magatzem secundari, o "magatzem de còpia de seguretat", sovint s'anomena partició d'intercanvi si és una partició de disc, o un fitxer d'intercanvi) ., fitxer d'intercanvi o fitxer de pàgina si és un fitxer). Quan això succeeix, la pàgina s'ha de treure del disc i tornar-la a la memòria física. S'utilitza un mecanisme similar per als fitxers assignats a la memòria, que s'assignen a la memòria virtual i es carreguen a la memòria física a petició.
Algunes MMU desencadenen una fallada de pàgina per altres motius, independentment de si la pàgina resideix o no a la memòria física i està assignada a l'espai d'adreces virtuals d'un procés:
- Intentar escriure quan la taula de pàgines té el bit de només lectura establert provoca un error de pàgina. Aquesta és una part normal de la implementació de molts sistemes operatius de copy-on-write; també pot ocórrer quan es fa una escriptura en una ubicació des de la qual el procés pot llegir però a la qual no es permet escriure, en aquest cas es lliura un senyal al procés.
Intentar executar codi quan la taula de pàgines té el bit NX (bit sense execució) establert a la taula de pàgines provoca un error de pàgina. Això pot ser utilitzat per un sistema operatiu, en combinació amb el bit de només lectura, per proporcionar una funció Write XOR Execute que atura alguns tipus d'explotacions.
Dades de la taula de marcs
[modifica]Els sistemes de taules de pàgines més simples sovint mantenen una taula de marcs i una taula de pàgines. La taula de marcs conté informació sobre quins marcs s'assignen. En sistemes més avançats, la taula de marcs també pot contenir informació sobre a quin espai d'adreces pertany una pàgina, informació d'estadístiques o altra informació de fons.
Tipus de taula de pàgines
[modifica]Hi ha diversos tipus de taules de pàgines, que estan optimitzades per a diferents requisits. Essencialment, una taula de pàgines senzilla ha d'emmagatzemar l'adreça virtual, l'adreça física que es troba "a sota" d'aquesta adreça virtual i, possiblement, alguna informació de l'espai d'adreces.
Referències
[modifica]- ↑ «Page Table Entries in Page Table» (en anglès americà), 26-10-2017. [Consulta: 16 setembre 2023].
- ↑ «Virtual Memory» (en anglès). umd.edu. [Consulta: 28 setembre 2015].
- ↑ «Page Table Management» (en anglès). kernel.org. [Consulta: 28 setembre 2015].
- ↑ «Page tables (CS 4410, Summer 2015)» (en anglès). [Consulta: 16 setembre 2023].