Muistinhallinta - Memory management

Muistinhallinta on eräänlainen resurssienhallinta, jota käytetään tietokoneen muistiin . Muistinhallinnan olennainen vaatimus on tarjota tapoja jakaa muistiosia dynaamisesti ohjelmille heidän pyynnöstään ja vapauttaa se uudelleenkäyttöön, kun niitä ei enää tarvita. Tämä on kriittistä kaikille kehittyneille tietokonejärjestelmille, joissa voi olla käynnissä useampi kuin yksi prosessi milloin tahansa.

On kehitetty useita menetelmiä, jotka lisäävät muistinhallinnan tehokkuutta. Virtuaalimuistijärjestelmät erottavat prosessin käyttämät muistiosoitteet todellisista fyysisistä osoitteista, mikä mahdollistaa prosessien erottamisen ja virtuaalisen osoitetilan koon kasvattamisen käytettävissä olevan RAM -muistin yli käyttämällä hakua tai vaihtamista toissijaiseen tallennustilaan . Virtuaalimuistin hallinnan laatu voi vaikuttaa laajasti järjestelmän yleiseen suorituskykyyn .

Joissakin käyttöjärjestelmissä , esim. OS/360 ja sen seuraajat , muistia hallitsee käyttöjärjestelmä. Muissa käyttöjärjestelmissä, esim. Unixin kaltaisissa käyttöjärjestelmissä, muistia hallitaan sovellustasolla.

Muistinhallinta osoitetilaan luokitellaan yleensä joko manuaaliseksi tai automaattiseksi muistinhallinnaksi .

Manuaalinen muistinhallinta

Esimerkki ulkoisesta pirstoutumisesta

Kohdistuspyynnön täyttämisen tehtävänä on löytää riittävän kokoinen käyttämätön muistilohko. Muistipyynnöt täytetään jakamalla osia suuresta muistipaikasta, jota kutsutaan kasaksi tai vapaavarastoksi . Jotkut kasan osat ovat käytössä milloin tahansa, kun taas jotkut ovat "ilmaisia" (käyttämättömiä) ja ovat siten käytettävissä tulevia allokointeja varten.

Useat ongelmat monimutkaistavat toteutusta, kuten ulkoinen pirstoutuminen , joka syntyy, kun varattujen muistilohkojen välillä on paljon pieniä aukkoja, mikä tekee niiden käytön käyttökelvottomaksi. Jakajan metatiedot voivat myös lisätä (erikseen) pienten varausten kokoa. Tätä hallitaan usein leikkaamalla . Muistinhallintajärjestelmän on seurattava jäljellä olevia varauksia varmistaakseen, että ne eivät ole päällekkäisiä ja ettei muistia koskaan "katoa" (eli ettei " muistivuotoja " ole).

Tehokkuus

Toteutettu dynaaminen muistinvarausalgoritmi voi vaikuttaa suorituskykyyn merkittävästi. Digital Equipment Corporationin vuonna 1994 tekemä tutkimus havainnollistaa eri allokoijien yleiskustannuksia . Pienin yhden muistipaikan varaamiseen tarvittava keskimääräinen käskypolun pituus oli 52 (mitattuna eri ohjelmien käskytason profiloijalla ).

Toteutukset

Koska tarkka sijainti jako ei ole etukäteen tiedossa, muisti on näytetty välillisesti, yleensä kautta osoittimen viite . Muistialueen järjestämiseen ja palojen jakamiseen ja jakamiseen käytetty algoritmi on yhteydessä ytimeen ja voi käyttää mitä tahansa seuraavista menetelmistä:

Kiinteän kokoiset lohkot

Kiinteäkokoisten lohkojen varaus, jota kutsutaan myös muistialueen varaukseksi, käyttää ilmaista luetteloa kiinteän kokoisista muistilohkoista (usein kaikki samankokoisia). Tämä toimii hyvin yksinkertaisissa sulautetuissa järjestelmissä, joissa ei tarvitse allokoida suuria kohteita, mutta se kärsii pirstoutumisesta , etenkin pitkillä muistiosoitteilla. Huomattavasti vähentyneiden yleiskustannusten vuoksi tämä menetelmä voi kuitenkin merkittävästi parantaa suorituskykyä kohteille, jotka tarvitsevat usein allokointia / jakamista, ja jota käytetään usein videopeleissä .

Kaverit

Tässä järjestelmässä, muisti jaetaan useisiin altaita muistin sijasta vain yksi, jolloin kukin allas on osa muistista tietyn kahden potenssi koko, tai lohkojen jonkin muun sopivan kokoinen etenemistä. Kaikki tietyn kokoiset lohkot säilytetään lajitellussa linkitetyssä luettelossa tai puussa, ja kaikki allokoinnin aikana muodostetut uudet lohkot lisätään vastaaviin muistivälineisiin myöhempää käyttöä varten. Jos pyydetään pienempää kokoa kuin käytettävissä, pienin käytettävissä oleva koko valitaan ja jaetaan. Yksi tuloksena olevista osista valitaan, ja prosessi toistetaan, kunnes pyyntö on valmis. Kun lohko on allokoitu, allokaattori aloittaa pienimmällä riittävän suurella lohkolla, jotta vältetään lohkojen tarpeeton rikkominen. Kun lohko vapautetaan, sitä verrataan kaveriin. Jos molemmat ovat ilmaisia, ne yhdistetään ja sijoitetaan vastaavasti suuremman kokoisten kaverilohko-luetteloon.

Laattojen varaus

Tämä muistinvarausmekanismi kohdistaa ennalta muistipalat, jotka sopivat sopimaan tietyn tyyppisille tai -kokoisille objekteille. Näitä paloja kutsutaan välimuisteiksi ja varaajan on vain seurattava luetteloa vapaista välimuistipaikoista. Objektin rakentaminen käyttää mitä tahansa vapaista välimuistipaikoista ja objektin tuhoaminen lisää paikan takaisin ilmaisten välimuistipaikkojen luetteloon. Tämä tekniikka lievittää muistin pirstoutumista ja on tehokas, koska sopivaa muistin osaa ei tarvitse etsiä, koska mikä tahansa avoin paikka riittää.

Pinovaraus

Monet Unixin kaltaiset järjestelmät ja Microsoft Windows toteuttavat toiminnon, joka allocavaatii pino-muistin dynaamista allokointia samalla tavalla kuin kasapohjainen malloc. Kääntäjä kääntää sen tyypillisesti inline -ohjeiksi, jotka käsittelevät pinon osoitinta. Vaikka tällä tavalla varattua muistia ei tarvitse vapauttaa manuaalisesti, koska se vapautuu automaattisesti, kun kutsunut toiminto allocapalaa, on olemassa ylivuoto. Ja koska alloca on ad hoc -laajennus, joka nähdään monissa järjestelmissä, mutta ei koskaan POSIX- tai C -standardissa, sen käyttäytyminen pinon ylivuoton tapauksessa on määrittelemätön.

_mallocaMicrosoft Windowsissa on turvallisempi versio allocasta , joka ilmoittaa virheistä. Se vaatii käytön _freea. gnulib tarjoaa vastaavan käyttöliittymän. Samankaltaista ominaisuutta voidaan emuloida käyttämällä manuaalista kirjanpitoa ja koon tarkistusta, kuten alloca_accountin glibc: n käytössä.

Automaattinen muistinhallinta

Monissa ohjelmointikieli toteutuksissa Ajoympäristön ohjelman automaattisesti allokoi muistia kutsupino ei-staattisen paikallisten muuttujien on aliohjelman , nimeltään automaattinen muuttujia , kun aliohjelma kutsutaan, ja irrottaa automaattisesti, että muistiin, kun alirutiini poistutaan. Erityisilmoitukset voivat sallia paikallisten muuttujien säilyttää arvot menettelyn kutsujen välillä tai sallia muiden aliohjelmien käyttää paikallisia muuttujia. Paikallisten muuttujien automaattinen varaaminen mahdollistaa rekursion käytettävissä olevan muistin rajoittamaan syvyyteen.

Roskakokoelma

Roskien keräys on strategia, jolla havaitaan automaattisesti muistit, jotka on varattu ohjelmille, joita ei enää voida käyttää ohjelmassa, ja palautetaan varattu muisti vapaiden muistipaikkojen joukkoon. Tämä menetelmä on toisin kuin "manuaalinen" muistinhallinta, jossa ohjelmoija koodaa nimenomaisesti muistipyynnöt ja muistin vapautukset ohjelmassa. Vaikka automaattisen roskien keräämisen etuna on ohjelmoijan työmäärän vähentäminen ja tiettyjen muistinvarausvirheiden estäminen, roskien kerääminen vaatii omia muistiresurssejaan ja voi kilpailla sovellusohjelman kanssa prosessoriajasta.

Virtuaalimuistilla varustetut järjestelmät

Virtuaalimuisti on tapa irrottaa muistiorganisaatio fyysisestä laitteistosta. Sovellukset toimivat muistilla virtuaalisten osoitteiden kautta . Jokainen sovelluksen yritys päästä tiettyyn virtuaalimuistiosoitteeseen johtaa siihen, että virtuaalimuistiosoite muutetaan todelliseksi fyysiseksi osoitteeksi . Tällä tavoin virtuaalimuistin lisääminen mahdollistaa rakeisen hallinnan muistijärjestelmistä ja käyttötavoista.

Virtuaalimuistijärjestelmissä käyttöjärjestelmä rajoittaa sitä, miten prosessi voi käyttää muistia. Tätä ominaisuutta, jota kutsutaan muistisuojaukseksi , voidaan käyttää estämään prosessi lukemasta tai kirjoittamasta muistiin, joka ei ole sille varattu, estäen haittaohjelmia tai toimintahäiriöitä yhdessä ohjelmassa häiritsemästä toisen ohjelman toimintaa.

Vaikka tietyille prosesseille varattu muisti on yleensä eristetty, prosessien on joskus kyettävä jakamaan tietoja. Jaettu muisti on yksi nopeimmista tekniikoista prosessien väliseen viestintään .

Muisti luokitellaan pääsynopeuden mukaan yleensä ensisijaiseen ja toissijaiseen tallennustilaan . Muistinhallintajärjestelmät käsittelevät muun muassa tietojen siirtämistä näiden kahden muistitason välillä.

Muistinhallinta OS/360: ssa ja sen seuraajissa

IBM System/360 ei tue virtuaalimuistia. Muisti eristäminen työpaikkojen on mahdollisesti suoritetaan käyttäen salausavainten , osoitetaan varastointi jokaisen työn eri avaimen 0 ohjaaja tai 1-15. Muistinhallinta OS/360: ssä on valvojatoiminto . Tallennustilaa pyydetään GETMAINmakron avulla ja se vapautetaan FREEMAINmakron avulla, minkä seurauksena kutsu valvojalle ( SVC ) suorittaa toiminnon.

OS/360: ssa yksityiskohdat vaihtelevat sen mukaan, miten järjestelmä luodaan , esim. PCP , MFT , MVT .

OS/360 MVT: ssä aliallokaatio työn alueella tai jaetussa järjestelmäjonoalueessa (SQA) perustuu alialustoihin , alueisiin, joiden koko on 2 KB - suojausavaimella suojatun alueen koko. Alapohjat on numeroitu 0–255. Alueella alialustoille on määritetty joko työn tallennussuoja tai esimiehen avain, avain 0. Aluet 0–127 saavat työn avaimen. Aluksi luodaan vain alialueen nolla, ja kaikki käyttäjän tallennustilapyynnöt täytetään alialtaalta 0, ellei muistipyynnössä ole määritetty muuta. Alit 250–255 luodaan esimiehen muistipyynnöistä työn puolesta. Useimmille näistä on annettu avain 0, vaikka muutamat saavat työn avaimen. Osajoukon numerot ovat merkityksellisiä myös MFT: ssä, vaikka yksityiskohdat ovat paljon yksinkertaisempia. MFT käyttää kiinteitä osioita, jotka operaattori voi määritellä uudelleen dynaamisten alueiden sijaan, ja PCP: llä on vain yksi osio.

Kukin osajoukko on kartoitettu luettelolla ohjauslohkoista, jotka tunnistavat varatut ja vapaat muistilohot aliverkossa. Muisti varataan etsimällä riittävän kokoinen vapaa alue tai varaamalla lisälohkoja alialtaaseen työn alueen kokoon saakka. On mahdollista vapauttaa koko tai osa varatusta muistialueesta.

Yksityiskohdat OS / VS1 ovat samat kuin MFT ja MVT; yksityiskohdat OS / VS2 ovat samanlaiset kuin MVT, paitsi että sivukoko on 4 KiB. Sekä OS/VS1- että OS/VS2 -järjestelmässä jaettu järjestelmäjonoalue (SQA) ei ole sivutettavissa.

Vuonna MVS osoiteavaruus sisältää lisäksi kutsuttavia jaettua alueella, yhteinen Storage Area (CSA), ja lisäksi oma alueella, järjestelmä toimii alue (SWA). Myös tallennusavaimet 0-7 on varattu etuoikeutetun koodin käyttöön.

Katso myös

Huomautuksia

Viitteet

OS360Sup
Käyttöjärjestelmän julkaisu 21 IBM System/360 Operating System Supervisor Services and Macro Instructions (PDF) . Systems Reference Library (Kahdeksas toim.). IBM. Syyskuu 1974. GC28-6646-7.
OSVS1Dig
OS/VS1 -ohjelmoijan viite Digest Release 6 (PDF) . Systems (kuudes painos). IBM. Marraskuu 1975. GC24-5091-5.

Lue lisää

Ulkoiset linkit