Mine sisu juurde

Mällu vastendatud fail

Allikas: Vikipeedia

Mällu vastendatud fail on osa virtuaalmälust, mille sisu vastab mingile osale failist või faililaadsest ressursist. Tavaliselt kasutatakse kõvakettal asuvat faili, kuid saab ka kasutada muid vahendeid, millele operatsioonisüsteem failikirjeldajat kasutades viidata saab. Sellist vastavust ära kasutades saab programm kasutada virtuaalmälu samamoodi nagu primaarset mälu.

Kõige tavalisem koht, kus rakendatakse mällu vastendatud faile, on tänapäeva operatsioonisüsteemide protsesside laadija. Kui protsess käivitatakse, kasutab operatsioonisüsteem mällu vastendatud faili, et mällu käivitamiseks tuua käitatav fail koos tema kõikide laaditavate moodulitega. Enamus mälu vastendamise süsteeme kasutavad nõudmise põhjal lehtsaalimist, kus lehekülg laaditakse mällu ainult siis, kui mingi protsess on seda nõudnud.[1] Käivitavate failide korral lubab selline käitumine operatsioonisüsteemil valikuliselt laadida ainult need osad protsessist, mida on tegelikult vaja täita.

Teine tavaline koht, kus kasutatakse mällu vastendatud faile, on mälu jagamine mitme protsessi vahel. Tänapäeva operatsioonisüsteemides ei ole üldiselt lubatud protsessidel kasutada mäluruumi, mis on eraldatud teise protsessi kasutamiseks. On mitmesuguseid meetodeid, kuidas mälu protsesside vahel turvaliselt jagada, kuid mällu vastendatud failide sisend/väljund on üks kõige populaarsemaid. Kaks või enam programmi saavad samaaegselt vastendada ühe füüsilise faili mällu ja seejärel sellele mälule ligi pääseda.[2]

Mällu vastendatud faile on kahte tüüpi:

Säiliv mällu vastendatud fail

[muuda | muuda lähteteksti]

Säilivate mällu vastendatud failidega on vastavusse seatud reaalne fail kettal. Kui kõik protsessid on faili kasutamise lõpetanud, salvestatakse andmed lähtefaili. Säilivaid mällu vastendatud faile on mõistlik kasutada, kui töötatakse väga suurte lähtefailidega.[3]

Mittesäiliv mällu vastendatud fail

[muuda | muuda lähteteksti]

Mittesäilivate mällu vastendatud failidega ei seata vastavusse faili kettal. Kui viimane protsess lõpetab faili kasutamise, siis kõik andmed kaovad ning prügikoristus eemaldab faili. Sellist lähenemist eelistatakse juhtudel, kus töötatakse mitme protsessi vahel jagatud failidega ja protsessidevahelise suhtlusega.[3]

  • Kiire ja kerge ligipääs andmetele, nagu nad oleksid juba mälus olemas.[4]
  • Võrreldes tavalise sisendi/väljundiga on jõudlus palju parem.[4]
  • Kaudselt asünkroonsetes programmides ei teki lõimede probleeme.[4]
  • Kasutab palju rohkem mälu kui tavaline sisend/väljund.[4]
  • Puudub kontroll selle üle, kui palju mälu kasutatakse ja kui kaua andmed püsivad muutmälus.[4]
  • Mällu vastendatud failid nõuavad kindlaksmääratud faili suurust, nende mahtu on väga raske muuta.[4]
  • Bait-baidile vastendamine teeb väga raskeks faili andmete pakkimise.[4]
  • Mällu vastendatud failid ei toeta failide jagamist.[4]

TOPS-20 PMAP

[muuda | muuda lähteteksti]

Esimene mällu vastendatud failide rakenduskoht oli PMAP-süsteemi kutse DEC-20's TOPS-20 operatsioonisüsteemis.[5] Seda hakati arendama 1969. aastal ja valmis sai see 1976. aastal.

SunOS 4 mmap

[muuda | muuda lähteteksti]

SunOS 4 (detsember 1988) tutvustas UNIX-i käsku 'mmap', mis lubas programmidel faile mällu vastendada.[6]

Kasvavad mällu vastendatud failid (GMMF)

[muuda | muuda lähteteksti]

Kaks aastakümmet pärast TOPS-20's PMAP avalikustamist võeti Windows NT-s kasutusele kasvavad mällu vastendatud failid.[7]

  1. "Linux Knowledge Base and Tutorial". www.linux-tutorial.info. Originaali arhiivikoopia seisuga 5.11.2018. Vaadatud 4.11.2018.
  2. "Memory Mapped File IPC" (PDF). University of Illinois. 04.04.2014. Vaadatud 26.11.2018.
  3. 3,0 3,1 "Memory-Mapped Files". docs.microsoft.com (Ameerika inglise). 05.09.2018. Vaadatud 4.11.2018.
  4. 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 Thorpe, Danny. "The Hidden Costs of Memory Mapped Files – Danny Thorpe". dannythorpe.com (Ameerika inglise). Vaadatud 4.11.2018.
  5. "TOPS-20 Monitor Calls Reference Manual" (PDF). Detsember 1982. Vaadatud 26.11.2018.
  6. Siebenmann, Chris (07.06.2018). "The history of Unix's confusing set of low-level ways to allocate memory". utcc.utoronto.ca. Vaadatud 4.11.2018.
  7. Richter, Jeffrey (oktoober 1995). "Add Growable Memory-Mapped Files to your App". Microsoft Systems Journal. Lk 17–28.