Muistinsiivous. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Muistinsiivous.

Samankaltaiset tiedostot
TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 17. marraskuuta 2009

Automaattinen muistinhallinta

Muistinhallinta ohjelmointikielissä

Muita rekisteriallokaatiomenetelmiä

Eloisuusanalyysi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Eloisuusanalyysi.

Luku 3. Muuttujat, arvot, oliot ja tyypit. 3.1 Arvot

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

Silmukkaoptimoinnista

Muistinhallinta siivousmenetelmien avulla

MUISTINHALLINTA OHJELMOINTIKIELISSÄ

Algoritmit 2. Luento 2 To Timo Männikkö

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 13. lokakuuta 2009

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 2. Luento 2 Ke Timo Männikkö

11/20: Konepelti auki

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

Algoritmit 1. Luento 9 Ti Timo Männikkö

Tietorakenteet ja algoritmit

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 6. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS. Pinoautomaatit.

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Muistin siivous. Zoltán Varga

Algoritmit 1. Luento 4 Ke Timo Männikkö

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

Osoitin ja viittaus C++:ssa

Dynaaminen muisti Rakenteiset tietotyypit

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 7. joulukuuta 2009

TIES542 kevät 2009 Suoraviivaohjelmat

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

Rakenteiset tietotyypit Moniulotteiset taulukot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

10. Painotetut graafit

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

A TIETORAKENTEET JA ALGORITMIT

jäsentämisestä TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 27. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

4.2. ALIOHJELMAT 71. Tulosvälitteisyys (call by result) Tulosvälitteinen parametri kopioidaan lopuksi

Algoritmit 1. Luento 10 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Scheme-kesäkurssi luento 5

Algoritmi on periaatteellisella tasolla seuraava:

Tarkennamme geneeristä painamiskorotusalgoritmia

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Algoritmit 1. Luento 10 Ke Timo Männikkö

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Kokonaislukuoptimointi hissiryhmän ohjauksessa

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Algoritmit 1. Luento 14 Ke Timo Männikkö

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 8. maaliskuuta 2012

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

7. Oliot ja viitteet 7.1

Algoritmit 1. Luento 12 Ti Timo Männikkö

MS-A0402 Diskreetin matematiikan perusteet

Tietorakenteet ja algoritmit - syksy

Monipuolinen esimerkki

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Luento 5: YKSINKERTAINEN SEGMENTOINTI JA SIVUTUS

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Algoritmit 2. Luento 6 Ke Timo Männikkö

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Algoritmit 2. Luento 7 Ti Timo Männikkö

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

samalla seuraavaan puoliavaruuteen (sukupolveen), jota siivotaan harvemmin.

Algoritmit 1. Luento 13 Ti Timo Männikkö

4. Luokan testaus ja käyttö olion kautta 4.1

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

PARITUS KAKSIJAKOISESSA

Algoritmit 2. Luento 5 Ti Timo Männikkö

Tietorakenteet ja algoritmit

Algoritmit 2. Luento 4 To Timo Männikkö

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

TIE Tietorakenteet ja algoritmit 261

Tiraka, yhteenveto tenttiinlukua varten

Algoritmit 1. Luento 12 Ke Timo Männikkö

Turingin koneen laajennuksia

Alityypitys. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Graafin 3-värittyvyyden tutkinta T Graafiteoria, projektityö (eksakti algoritmi), kevät 2005

Algoritmit 1. Luento 6 Ke Timo Männikkö

ltöä (Luennot 5&6) Luento 5: YKSINKERTAINEN SEGMENTOINTI JA SIVUTUS Pikakertaus: : a) b) c) Dyn.. part.: sijoitus Kuva Buddy System: esimerkki

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015

Määrittelydokumentti

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

Transkriptio:

TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 30. marraskuuta 2009

Sisällys lmä

Sisällys lmä

Seuraava deadline Vaihe E tiistai 1.12. klo 10 koodigenerointi (ilman rekisteriallokaatiota) Vaihe F maanantai 14.12. klo 12 rekisteriallokaatio

Sisällys lmä

Miksi muistinsiivous kääntäjäkurssilla? ja kääntäjä ovat lähes aina toisiinsa kiinteästi kytkettyjä: Kääntäjä joutuu ripottelemaan kohdeohjelmaan muistinsiivouksen tarvitsemaa tietoa ja koodia. Muistinsiivouksen tulee ymmärtää kääntäjän käyttämää oliorakennemallia. Siksi kääntäjänkirjoittaja joutuu yleensä toteuttamaan myös muistinsiivouksen, jos kieli sitä ylipäätään tarvitsee.

Muistinsiivouksen abstraktio illuusio rajattomasta muistista olion synnyttyä se elää loputtomiin ohjelma kuitenkin käyttää useimpia olioita vain rajatun ajan tämän jälkeen oliota ei enää tarvitse esittää muistissa

Terminologiaa Muutin (engl. mutator) on kääntäjän tuottama kohdekielinen ohjelma. Muistinhallinta koostuu varaimesta (engl. allocator), jota muutin kutsuu lisää muistia tarvitesssaa, ja siivoimesta eli roskienkeruusta (engl. garbage collector), joka vapauttaa loppuun käytetyn muistin uudelleen varattavaksi muuntimen selän takana. Muisti eli keko (engl. heap) jaetaan vapaaseen ja varattuun muistiin.

Varatun muistin taksonomia Varattu muisti koostuu tietueista. Tietueet ovat toisistaan riippumattomia ja koostuvat alkioista. Alkio voi olla osoitin tai atomi. Osoitin on joko tyhjä tai sitten viittaus johonkin tietueeseen. Atomi ei viittaa mihinkään tietueeseen; se sisältää dataa (esim. kokonaisluku).

Nimigraafi Muisti voidaan mallittaa suunnattuna graafina, jossa solmuja ovat kaikki joskus varatut tietueet (myös ne, jotka muistinsiivous on myöhemmin vapauttanut) ja kaaria ovat osoittimet. Solmuilla on väri: se on valkoinen, jos sen tarkoittaman tietueen muisti ei ole vapautettu, ja musta, jos sen tarkoittama tietueen muisti on vapautettu uudelleen käytettäväksi. Muistinsiivouksen invariantti: Valkoisesta solmusta ei ole kaarta mustaan.

Juurijoukko Tietty (a priori tiedossa oleva) joukko tietueita muodostaa juurijoukon (engl. root set). Juurijoukko on nimigraafissa aina valkoiseksi värjätty. Tyypillisesti juurijoukon muodostavat ne tietueet, joihin on osoitin staattisesti allokoidusta muistista, rekisteristä tai kutsupinossa olevasta aktivaatiotietueesta. Toisin sanoen, juurijoukon muodostavat globaalit ja lokaalit muuttujat sekä kääntäjän generoimat apumuuttujat.

Muistinsiivouksen ongelmanasettelu On pidettävä huoli, että juurijoukon transitiivinen sulkeuma on valkoiseksi värjätty ja sen komplementti mustaksi värjätty. Jos juurijoukon transitiivinen sulkeuma sisältää mustia solmuja, on vaarana, että muutin ryhtyy käyttämään vapautettua muistia. Tämä on ns. roikkuvan osoittimen (engl. dangling pointer) ongelma. Jos juurijoukon transitiivisen sulkeuman komplementti sisältää valkoisia solmuja, on kyseessä muistivuoto (eng. memory leak). Roikkuva osoitin -ongelma on vakava, sen sijaan muistivuoto on hyvin siedetty, jos se pysyy rajallisena.

Sisällys lmä

engl. mark and sweep John McCarthy: Recursive functions of symbolic expressions and their computation by machine, Part I, Communications of the ACM, huhtikuu 1960. Varataan jokaisesta tietueesta yksi bitti, ns. merkkibitti, siivoimen käyttöön. Merkkaa: Käydään graafi juurijoukosta alkaen läpi syvyys- tai leveyshaulla ja merkitään saavutetut tietueet. Lakaise: Ne tietueet, jotka eivät tulleet merkatuksi, voidaan vapauttaa.

Kompleksisuus Oletetaan, että siivous alkaa, kun muisti on täynnä. Olkoon h keon koko. Olkoon r juurijoukon transitiivisen sulkeuman koko. Olkoot c 1,..., c 4 vakioita. -algoritmin suhteellinen vaativuus on c 1 r + c 3 h + c 2 + c 4 h r aikayksikköä per vapautettu muistiyksikkö. Siivous on sitä halvempaa mitä pienempi r on! Siivoimen on hyvä pyytää käyttöjärjestelmältä lisää muistia, kun r/h ylittää kiinnitetyn raja-arvon (esim. 0.5).

Variantteja Koko juurijoukon transitiivinen sulkeuma voi periaatteessa olla yksi lineaarinen lista. Tällöin syvyyshaun pino kasvaa koko keon kokoiseksi! Kutsupino ei kestä tällaista, parempi käyttää eksplisiittistä pinoa tai jonoa. Toinen vaihtoehto on kääntää osoittimien suunta väliaikaisesti.

Vapautetun muistin hallinta Vapaa muisti tavallisesti kootaan vapaalistaksi (engl. free list). koko keko on vapaalistassa. Lakaisuvaihe lisää kunkin vapautettavan tietueen muistialueen vapaalistaan. Muistinvaraus etsii vapaalistasta sopivan muistialueen ja poistaa sen listasta. Täydennyksiä: vain kahden potenssin kokoisten muistialueiden käsittely erilliset vapaalistat erikokoisille muistialueille muistialueiden yhdistäminen ja jakaminen

Sisällys lmä

engl. reference counting George E. Collins: A method for overlapping and erasure of lists. Communications of the ACM, joulukuu 1960. Piilotetaan jokaiseen tietueeseen laskuri Alustetaan se 1:ksi. Aina kun osoite kopioidaan, kasvatetaan sen osoittaman tietueen laskuria yhdellä. Aina kun osoitteesta luovutaan, vähennetään sen osoittaman tietueen laskuria yhdellä...... ja jos laskuri menee nollaan, tuhotaan tietue...... mikä puolestaan rekursiivisesti vähentää tietueen osoittamien tieuteiden laskureita yhdellä.

Pro ja contra + yksinkertainen toteuttaa + ei (yleensä) pysäytä ohjelmaa pitkäksi aikaa kuten merkkaa ja lakaise viittaussykli johtaa muistivuotoon laskurin ylläpitämistä joutuu tekemään jatkuvasti, mikä johtaa huomattavaan lisätyömäärään

Sisällys lmä

lmä engl. two-space garbage collection, copying collection Robert R. Fenichel & Jerome C. Yochelson: A LISP garbage-collector for virtual-memory computer systems, Communications of the ACM, marraskuu 1969. C. J. Cheney: A nonrecursive list compacting algorithm, Communications of the ACM, marraskuu 1970.

Idea Jaetaan keko kahteen yhtenäiseen alueeseen, fromspace ja tospace. Fromspace on jaettu kahteen yhtenäiseen osaan: varattu muisti ja vapaa muisti. Muistinvaraus tapahtuu fromspacesta siirtämällä osien rajaa. Kun fromspace tulee täyteen, tehdään muistinsiivousajo: Kopioidaan juurijoukon tansitiiviseen sulkeumaan kuuluvat tietueet tospaceen. Kopiointi voi tapahtua syvyyshaulla (Fenichel-Yochelson) tai leveyshaulla (Cheney). Tietueen vanhaan paikkaan laitetaan edelleenohjaus. Kopioinnin jälkeen vaihdetaan tospace fromspaceksi ja fromspace tospaceksi. Edelleenohjauksia ei tarvita kopioinnin valmistuttua.

Cheneyn temppu Leveyshakua tehtäessä ei tarvita lainkaan aputietorakenteita! Kopioidaan aluksi juurijoukko. Sen jälkeen skannataan tospace alusta alkaen kunnes kaikki kopioitu tieto on käyty läpi. Jos skannaus löytää osoittimen fromspaceen: Jos fromspacessa on edelleenohjaus, päivitetään osoite. Muutoin kopioidaan tietue fromspacesta tospaceen, päivitetään osoite ja lisätään fromspaceen edelleenohjaus.

Pro ja contra + Muistinvaraus on erittäin nopeaa. + Siivous käsittelee vain juurijoukon transitiivista sulkeumaa. Jos se on pieni suhteessa puoliavaruuden kokoon, yksi ajo on nopea. + Muisti ei fragmentoidu. Vaatii runsaasti muistia. Cheneyn temppu (ja leveyshaku ylipäätään) hajauttaa tietorakenteiden osat kauaksi toisistaan.

Sisällys lmä

Sukupolvisiivous Taustalla väite, että mitä pidempään tietue on ollut elossa, sen todennäköisempää on, että sitä tarvitaan jatkossakin. Jaetaan muisti kahteen sukupolveen (engl. generation). Ensimmäinen sukupolvi on taimitarha (engl. nursery). Kaikki muistinvaraus tapahtuu taimitarhasta. Kun taimitarha täyttyy, vain se siivotaan. Jos tietue on selvinnyt hengissä n:stä siivouksesta, se ylennetään toiseen sukupolveen. Muutaman taimitarhan siivouksen välein tehdään molempien sukupuolien yhteinen siivous. Sukupolvia voi olla toki enemmänkin kuin kaksi.

Kolmivärisiivous E. W. Dijkstra ym: On-the-fly garbage collection: an exercise in cooperation, Communications of the ACM, marraskuu 1978. Ideana jakaa siivouksen työ useampaan osaan eli inkrementtiin niin, ettei siivousta varten tarvitse pysäyttää ohjelmaa pitkäksi aikaa. Toimii niin merkkaus- kuin kopiointitekniikalla.

Idea Väritetään jokainen tietue jollakin kolmesta väristä: Valkoinen tarkoittaa, että tietuetta ei ole merkattu/kopioitu. Harmaa tarkoittaa, että tietue on merkattu/kopioitu, mutta sen osoittimia ei ole seurattu. Musta tarkoittaa, että tietue on merkattu/kopioitu ja sen osoittimet on myös käsitelty. Invariantit: Jos harmaita tietueita ei ole, kaikki valkoiset tietueet voidaan kierrättää. Mustasta tietueesta ei ole osoitinta valkoiseen tietueeseen. Jokainen harmaa tietue on siivoimen työlistalla. Muuttaja saa koskea muistiin myös siivouksen ollessa käynnissä, kunhan se säilyttää väri-invariantit.

Sisällys lmä

Seuraava deadline Vaihe E tiistai 1.12. klo 10 koodigenerointi (ilman rekisteriallokaatiota) Vaihe F maanantai 14.12. klo 12 rekisteriallokaatio