TODO-LINKS

Pomnilnik

Fizični pomnilnik (PA): s procesorjem fizično povezan pomnilnik
==Naslovni prostor== (VA): OS abstrakcija fizičnega pomnilnika, kot ga procesi vidijo
Proces vidi le svoj kos fizičnega pomnilnika

Zgodnji preprosti sistemi: velja VA = PA
Večprogramiranje: deljenje pomnilnika - preslikava VA PA

Sklad: avtomatska (de)alokacija preko prevajalnika - lokalne spremenljivke, argumenti funkcij, …
Kopica: eksplicitna alokacija, dealokacija lahko eksplicitno ali preko GC (Garbage Collection)

Določanje naslovov:

  • čas prevajanja: zbirnik/prevajalnik določi naslove spremenljivk
  • čas povezovanja: zlaganje prevedenih modulov skupaj
  • čas nalaganja: nalaganje prenosljive kode na poljubno mesto v fizičnem pomnilniku
  • čas izvajanja: premikanje in zamenjava procesor

Pomnilniške storitve OS

exit() sprosti naslovni prostor procesa

Nastavljanje velikosti podatkovnega segmenta (kopice): sistemski klic brk
Alokacija pomnilnika: malloc, calloc, realloc, …
Dealokacija pomnilnika: free

ASLR (Address Space Layout Randomization): randomizacija naslovnega prostora
Napad: skok v okvarjeno kodo na nek znan fiksen naslov
Rešitev: naključna razporeditev ključnih delov naslovnega prostora

Virtualizacija pomnilnika

Cilji:

  • proces vidi sklenjen del pomnilnika
  • izolacija procesov - ne vplivajo drug na drugega ali na OS
  • transparentnost - proces se ne zaveda virtualizacije
  • učinkovitost - hitra preslikava naslovov (OS, MMU in TLB)

Izvedbe preslikovanja:

  • celotna presolikovalna tabela - nemogoče zaradi preveč naslovov
  • premeščanje - celoten naslovni prostor premestimo na poljubni PA
  • segmentacija - razdelitev na bloke različnih velikosti
  • ostranjevanje - razdelitev pomnilnika na bloke enakih velikosti
  • segmentacija + ostranjevanje - segmenti so razdeljeni na strani

Statično premeščanje

Program se prevede na VA 0, naloži na izbrani PA; uporaba le, ko ni strojne podpore za virtualizacijo

Dinamično premeščanje

Bazni register - nalagalni naslov, mejni register - velikost naslovnega prostora
Strojna podpora preslikovanja in preverjanja zaščite, manipulacija regstrov v priviligiranem načinu

Segmentacija in ostranjevanje


Segmentacija:

  • bloki - segmenti različnih velikosti, imajo pomen (koda, podatki, …)
  • težavno upravljanje pomnilnika, zunanja fragmentacija

Ostranjevanje:

  • bloki - strani enake velikosti, brez pomena
  • lažje upravljanje pomnilnika, notranja fragmentacija

Ostranjevanje


Velika tabela pri velikih naslovih večnivojska tabela strani
Veliko dostopov do pomnilnika za iskanje naslova TLB (predpomnilnik preslikovanja)

Uporaba zunanjega pomnilnika

Na voljo je malo notranjega poomnilnika (RAM), naslovni prostor pa je lahko zelo velik
Zato uporabimo zunanji pomnilnik (diski) kot odlagalni prostor (swap space):

  • swap out - shranjevanje strani iz pomnilnika na disk

  • swap in - nalaganje strani iz diska v pomnilnik

  • Zadetek v TLB: če VPN obstaja v TLB …

  • Zadetek v TLB, iskanje v tgabeli strani: če VPN obstaja v preslikovalni tabeli strani …

  • Zgrešitev strani: naloži stran iz zunanjega pomnilnika, osveži vnos v preslikovalni tabeli strani, …

Če je za stran premalo prostorav pomnilniku, naredi zamenjavo strani:

  • FIF (Furthest in future): izločitev strani, ki bo dostopana najdlje v prihodnosti (nemogoče vedeti vnaprej)
  • FIFO (First In First Out): izločitev strani, ki je najdlje v pomnilnmiku (lahko spet takoj rabimo)
  • LFU (Least-Frequently Used): izločitev najmanj uporabljane strani (evidenca uporabe)
  • LRU (Least-Recently Used): izločitev najdalje neuporabljene strani (evidenca časov)