# Orrikatze

Orrikatzea (paging ingelesez), konputagailuen sistema eragiletan, memoria nagusia kudeatzeko software teknika da.
Erabiltzaileen prozesuak alegiazko memorian tamaina finkoko orri izeneko blokeetan zatitzen dira eta memoria fisikoan orri markoak deitzen dira.

## Sarrera

Programek alegiazko helbideak erabiltzen dituzte, hauek helbide fisiko bihurtzeko memoriaren kudeaketarako unitateak (MMU txip multzoa) itzulpena egiten du.Alegiazko memoriadun sistema gehienek (UNIX System V, Linux edo Windows NT--k) orrikatzea izeneko teknika erabiltzen dute.
Bai alegiazko blokeak (orriak) zein bloke fisikoak (orri markoak) tamaina bera izaten dute (normalean 512 byte eta 8 KB bitartean). Alegiazko gunearen eta orri bakoitzaren tamainaren arabera, alegiazko helbide baten luzera aldatu egin daiteke (adibidez, 16 orri izanda eta orri bakoitzak 4KB badu, 16 biteko alegiazko helbide baten 4 bit bloke zenbakia adierazteko izango dira, 2$^4$=16 eta beste 12 desplazamenduarentzako 2$^{12}$=4096). Halaber memoria eta diskoaren artean beti orri oso bat trukatuko da. Prozesu honetan alegiazko orri kopurua (n) beti izango da orri markoena (m) baino handiagoa eta, horrela, beti egongo dira memorian kargatu ez diren n-m orri. Orri bat memoria nagusian edo diskoan dagoen kontrolatzeko, orrien taulako osagai bakoitzak egoera hori adierazten duen bita izaten du (v bita).

## Prozedura

Edozein unean, memoria hainbat prozesuen orriekin dago hartuta, aldiz orri marko batzuk libre daude. Sistema eragileak markoen zerrenda bat gordetzen du eta prozesu bakoitzeko orri taula bat, non prozesu bakoitzak zein markotan dagoen agertzen da. Honela memoria fisikoan markoak ondoz ondoan daude esleituta eta beste prozesuen orriekin tartekatu. Prozesu bateko orri taularen sarreran, orri bakoitzari dagokion markoaren kokapena dago. Helbide logikoak (alegiazko helbideak) orri zenbaki eta orri barruko desplazamendurekin osatzen dira. Orri zenbakia indize bezala erabiltzen da orri taulan, orri taularen sarreran markoaren hasierako helbide dago, zein helbide logiaren desplazamendu gehituz helbide fisikoa osatzen da. prozesu hau konputagailuaren hardwareak burutzen du Prozedura hau jarraituz, prozesu bat memorian kargatzen denean, bere orri guztiak marko libreetan egokitzen dira, bere orri taula betetzen delarik.

### Adibidea

Adibide baten bitartez erakutsi dugu. Taulan, une batean memoriak izan litekeen edukiera bat erakusten da, orriek 4 KByte dituztela. Nola ailegatu da egoera honetara? Bada A, B, D eta E programek 3,2,2,3 orri kopuruekin hurrenez hurren, honela bete baitute memoria.
   * A programa memorian kargatzen da (0,1,2 markoetan)
   * B programa memorian kargatzen da (3,4 markoetan)
   * D programa memorian kargatzen da (5,6 markoetan)
   * B programak bukatzen du bere eginkizuna, bere markoak askatzen ditularik, horregatik ez dira agertzen B programa memorian.
   * E programa memorian kargatzen da. B programak utzitako markoak esleitzen zaizkio eta libre dagoen 7 markoa ere.
Modu honetan, adibideko memoriaren egoera dugu:
Memoria fisiko baten konfigurazio adibidea orrikatze sisteman :
| Marko zenbakia '''' | Programa-orria '''' | Helbide fisikoa '''' |
| 0 | A - 0 | 1000:0000 |
| 1 | A - 1 | 1000:1000 |
| 2 | A - 2 | 1000:2000 |
| 3 | E - 0 | 1000:3000 |
| 4 | E - 1 | 1000:4000 |
| 5 | D - 0 | 1000:5000 |
| 6 | D - 1 | 1000:6000 |
| 7 | E - 2 | 1000:7000 |
Modu honetan, prozesu bakoitzeko orri taula laburtuak honela geratuko lirateke:
A programa :
| Orria'''' | Markoa'''' |
| 0 | 1000:0000 |
| 1 | 1000:1000 |
| 2 | 1000:2000 |
B programa :
| Orria '''' | Markoa '''' |
D programa :
| Orria '''' | Markoa '''' |
| 0 | 1000:5000 |
| 1 | 1000:6000 |
E programa :
| Orria '''' | Markoa '''' |
| 0 | 1000:3000 |
| 1 | 1000:4000 |
| 2 | 1000:7000 |

## Helbide bihurketa orrikatze teknikan

Programa bat bere memoria atzitu nahi duenean ikusiko da atal honetan. A programak 20FE helbide atzitu behar du. Honela jokatzen da:
   * Sistema bitarrean jartzen da helbidea 0010 0000 1111 1110 (20FE)
Oharra: 4 Kbytetako orriak erabiltzen ari garenez, 12 bit (2$^{12}$=4096) hartu behar dira desplazamendurako eta gainerakoak 4 (2$^4$=16,) orriaren zenbakirako, guztira 16 orri direlarik.
   * MMU-k edo memoria kudeatzeko unitateak honela zatitzen du helbidea: 0010 eta 000011111110 = 20FE
| Orri zenbakia | Desplazamendua | Helbide logikoa |
| 0010 | 000011111110 | 20FE |
| 4 bit | 12 bit | 16 bit |
   * 0010: Orriaren zenbakia orri taulan (2 balio sistema hamartarrean)
   * 000011111110 edo 00FE: desplazamendua
0010 zenbakiak sistema hamartarrean 2 balioa du. MMUk A programaren orri taulan, 2 zenbakidun orriaren datuak aztertzen ditu. Bertan “1000:2000” helbide fisikoa dago. Orduan MMUk taulako helbide fisikoari helbide logikoaren desplazamendua (00FE) gehitu dio, “1000:20FE” helbidea fisikoa ebatziz.

## Orri hutsegite kasua

PUZ-ak alegiazko helbide baten orri markoa memoria nagusian (RAM) kargaturik ez badago eta erabili behar badu, orri hutsegitearen gertaera eragiten du. Ondoren kasu honen pausoak:
   * MMU-ak sistema eragileari orri hutsegite izeneko seinalea bidaltzen dio
   * Sistema eragileko orri hutsegitearen etendurak kontrola hartzen du
   * Orri hutsegitea eragin duen prozesua blokeatzen da, sarrera-irteera eragiketaren zain
   * Memoria laguntzailean datuaren kokapena ebazten da
   * Gutxi erabilitako orri marko baten edukia diskora eramaten du, orriak ordezkatzeko algoritmo bat erabiliz. Orri marko hau diskoarekiko aldatuta badago, diskoan idazten da.
   * PUZak eskatutako orria kargatzen da askatu berri den markoan
   * Orri taulan eguneratu ondoren prozesua berriz egikaritzeko egoeran jartzen da
   * Etendurak PUZari ematen dio kontrola orri hutsegitea eragin duen helbidea berriz atzitzeko
Egun erabiltzen diren helbide eremuak direla eta orrien taulen tamainak arazoak sor ditzake (orri eta orri marko kopurua dela eta taula hauen osagai kopurua izugarria da), taula hauek memorian osorik kargatzeak erabilgarritasun galera baitakar. Guzti hau dela eta, gaur egungo sistema gehienek taulak hauek maila bat baino gehiagotan antolatzen dituzte (UNIX edota Windows NT-k maila bi duten taulak erabiltzen dituzte) eta une horretan memorian kargaturik dauden prozesuak egikaritzeko behar diren taulen osagaiak bakarrik egongo dira memorian, eta ez taula osoa.
Sistema eraginkorra izan dadin helbideen itzulpena azkarra izan behar du; hori posible egiteko, itzulpen tauletako gehien erabiltzen diren osagaiak gordetzeko abiadura handiko elkartze eta cache memoriak bateratzen dituzten teknikak erabiltzen dira.

## Erreferentziak

* Deitel , H.M.: Sistemas Operativos. 2ª ed. Addison Wesley Iberoamericana. 1993.
* Tanenbaum, A.S.: Sistemas operativos. Diseño e implementación. Prentice Hall 1998.

## Ikus,gainera

* Alegiazko memoria
* Memoria kudeaketa taula
* Multiprogramazio
* Multiprosezaketa
* Orrikatze taula
* Orriak ordezkatzeko algoritmoak
* Working set

## Kanpo estekak

* (Ingelesez) Alegiazko memoriaren abiadura optimizatzeko gida
* (Ingelesez) Swap Fitxategia vs. fitxategien orrikatzea
* (Ingelesez) Linux-en swap partitizioa
* Datuak: Q656083