Muistiallokaattorin toteuttaminen sulautettuun järjestelmään: Kehitystyö rajoitetut resurssit huomioon ottaen
Loikkanen, Tatu (2021)
Loikkanen, Tatu
2021
Tietotekniikan DI-ohjelma - Master's Programme in Information Technology
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2021-10-05
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202109097038
https://urn.fi/URN:NBN:fi:tuni-202109097038
Tiivistelmä
Tehokas muistinhallinta on avainasemassa lähes jokaisen tietokoneella ajettavan nykyaikaisen ohjelman suorituskyvyssä. Muistiallokaattoriksi kutsutaan ohjelmistokomponenttia, joka toteuttaa ajossa olevan ohjelman suorittamat muistin varaus- ja vapautuspyynnöt. Tietokoneohjelman muistinhallinta koostuu näin muistiallokaattorin ja sitä käyttävän ohjelman yhteistyöstä. Muistiallokaattorin rooli on tärkeä riippumatta siitä, ovatko muistioperaatiot ohjelmointikielen automaattisesti vai ohjelmoijan manuaalisesti luomia.
Yleiskäyttöiselle tietokoneelle ohjelmistoa kehittäessään voi ohjelmoija usein olettaa, että ohjelmointikielen tarjoama vakiomuistiallokaattori on riittävän tehokkaasti toteutettu. Kehittäessä ohjelmistoa rajoitetuille laitteille, kuten sulautetuille järjestelmille, voi tilanne kuitenkin vaatia enemmän huomiota. Tällöin laadukkaan muistiallokaattorin rooli korostuu entisestään, mikäli laitteistolla ajettava ohjelmisto sitä paljon käyttää ja keskusmuistia on käytettävissä vain vähän. Aikaa ja muistia täytyy siis käyttää tehokkaasti ja säästellen. Erikoisempi laitteisto voi myös asettaa erikoisvaatimuksia sillä ajettavalle ohjelmistolle. Laitteisto voi esimerkiksi vaatia jonkun muun kuin ohjelmointikielen tarjoaman vakioallokaattorin käyttöä, jotta kaikki sen muistiresurssit saadaan hyödynnettyä.
Tässä diplomityössä kehitettiin muistiallokaattori sulautetulle järjestelmälle, jossa järjestelmän laitteistoon kuuluu edellä kuvatun kaltaisesti useampi eri käytettävissä oleva muistiresurssi. Kohdelaitteiston C++ standardikirjaston muistiallokaattori kykenee toimimaan ainoastaan laitteen keskusmuistissa, jonka vuoksi valmistaja on toimittanut erillisen muistiallokaattorin muiden muistiresurssien, kuten videomuistin, käyttämistä varten. Toimitettu muistiallokaattori oli kuitenkin kriittisesti puutteellinen, jolloin tarve uudelle allokaattorille oli ilmeinen. Uuden allokaattorin täytyi kohdelaitteiston ja -sovelluksen rajoitusten sekä tarpeiden mukaisesti täyttää useita erikoisvaatimuksia. Ne tekivät vapaassa levityksessä olevien muistiallokaattoreiden käyttämisestä hyvin hankalaa tai mahdotonta, jolloin oman allokaattorin kehittäminen koettiin hyväksi vaihtoehdoksi.
Allokaattorin kehitystyö, sille annetut vaatimukset huomioiden, onnistui kohtuullisen hyvin. Kehitetty allokaattori haastaa ajankäytössään jopa vuosikymmenten kehitystyön tuloksena syntyneet C/C++-standardikirjastojen toteutusten sisältämät muistiallokaattorit niin kohdelaitteistolla kuin yleiskäyttöisellä tietokoneellakin. Fragmentaation osalta se pärjää kohtuullisesti tieteellisissä julkaisuissa esitettyjen allokaattoreiden rinnalla, mutta ei aivan yllä kärkijoukon tehokkuuden tasolle. Toteutettu allokaattori osoittautui täten kaikin puolin käyttökelpoiseksi. Useampien jo olemassa olevien jatkokehitysideoiden avulla sitä saadaan tarvittaessa hiottua entistä paremmaksi tämän diplomityön ulkopuolellakin.
Yleiskäyttöiselle tietokoneelle ohjelmistoa kehittäessään voi ohjelmoija usein olettaa, että ohjelmointikielen tarjoama vakiomuistiallokaattori on riittävän tehokkaasti toteutettu. Kehittäessä ohjelmistoa rajoitetuille laitteille, kuten sulautetuille järjestelmille, voi tilanne kuitenkin vaatia enemmän huomiota. Tällöin laadukkaan muistiallokaattorin rooli korostuu entisestään, mikäli laitteistolla ajettava ohjelmisto sitä paljon käyttää ja keskusmuistia on käytettävissä vain vähän. Aikaa ja muistia täytyy siis käyttää tehokkaasti ja säästellen. Erikoisempi laitteisto voi myös asettaa erikoisvaatimuksia sillä ajettavalle ohjelmistolle. Laitteisto voi esimerkiksi vaatia jonkun muun kuin ohjelmointikielen tarjoaman vakioallokaattorin käyttöä, jotta kaikki sen muistiresurssit saadaan hyödynnettyä.
Tässä diplomityössä kehitettiin muistiallokaattori sulautetulle järjestelmälle, jossa järjestelmän laitteistoon kuuluu edellä kuvatun kaltaisesti useampi eri käytettävissä oleva muistiresurssi. Kohdelaitteiston C++ standardikirjaston muistiallokaattori kykenee toimimaan ainoastaan laitteen keskusmuistissa, jonka vuoksi valmistaja on toimittanut erillisen muistiallokaattorin muiden muistiresurssien, kuten videomuistin, käyttämistä varten. Toimitettu muistiallokaattori oli kuitenkin kriittisesti puutteellinen, jolloin tarve uudelle allokaattorille oli ilmeinen. Uuden allokaattorin täytyi kohdelaitteiston ja -sovelluksen rajoitusten sekä tarpeiden mukaisesti täyttää useita erikoisvaatimuksia. Ne tekivät vapaassa levityksessä olevien muistiallokaattoreiden käyttämisestä hyvin hankalaa tai mahdotonta, jolloin oman allokaattorin kehittäminen koettiin hyväksi vaihtoehdoksi.
Allokaattorin kehitystyö, sille annetut vaatimukset huomioiden, onnistui kohtuullisen hyvin. Kehitetty allokaattori haastaa ajankäytössään jopa vuosikymmenten kehitystyön tuloksena syntyneet C/C++-standardikirjastojen toteutusten sisältämät muistiallokaattorit niin kohdelaitteistolla kuin yleiskäyttöisellä tietokoneellakin. Fragmentaation osalta se pärjää kohtuullisesti tieteellisissä julkaisuissa esitettyjen allokaattoreiden rinnalla, mutta ei aivan yllä kärkijoukon tehokkuuden tasolle. Toteutettu allokaattori osoittautui täten kaikin puolin käyttökelpoiseksi. Useampien jo olemassa olevien jatkokehitysideoiden avulla sitä saadaan tarvittaessa hiottua entistä paremmaksi tämän diplomityön ulkopuolellakin.