Jos käsittelee vaikka niin isoa kuvaa ettei se mahdu ram muistiin niin sitten normaalisti siitä osa menisi kovalevyn swap-osiolle. Mutta voiko määrätä mikä data menee kovalevylle väliaikaisesti, käsittelyä varten ja mikä pysyy ram muistissa?
Kun ram ei riitä, swap?
Jekura
3190
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 3
Vanhimmat
Voit koodata muistin swappaamisen itse.
Perusidea voisi olla vaikkapa sellainen, että ohjelmalle määritellään (esim. parametrina) käytettävän maksimimuistin määrä, vaikkapa sopivan kokoisen puskurin monikertoina, Puskurien määrä kannattanee pitää kohtuullisena, esim. gigatavun muistin voi jakaa 8 x 128 MB,16 x 64 MB tai 32 x 32 MB puskureihin.
Kun muistia tarvitaan lisää, ohjelma allokoi uuden puskurin ja käyttää sitä. Jos kaikki puskurit on jo käytössä, kirjoitetaan se puskuri, jota ei tulla tarvitsemaan pisimpään aikaan, levylle jemmaan ja uudelleenkäytetään tuo tila. Lopuksi sitten muistetaan vapauttaa puskurit sitä mukaa kun tulee valmista.
Kannattaa myös harkita I/O:n toteuttamista erillisenä threadinä, niin että vanhaa puskuria kirjoitetaan levylle jo ennen kuin lisää vapaata tilaa tullaan tarvitsemaan, ja että uutta dataa luetaan levyltä puskureihin ennen kuin sitä tarvitaan käsittelyvaiheessa. Tällöin ohjelma voi tehdä, mitä sen nyt pitääkin tehdä, joidenkin puskurien sisällölle ja samanaikaisesti lukea/kirjoittaa jotain muuta puskuria levylle/levyltä. Riippuen siitä, mitä ohjelma datalle tekee, voi hyvinkin kyllä käydä niin, että varsinainen datan käsittely threadi joutuu odottamaan I/O threadiä. Sille ei sitten vain voi mitään - levy I/O on kumminkin aika hidasta.
Milläs ihmeellä takaat ettei käyttöjärjestelmä swappaa tuota puskuriasi tai sen osaa itse levylle? Ja oletko koskaan kuullu asykronisesta I/O:sta?
hetkinen!!!!!!!
tarkoitatko että kuva ei mahdu ram-muistiin vai että ohjelma ei pysty käyttään kaikkea muistia.
kokonais musitin määrä on/voi olla eri kuin se mitä ohjelma pystyy käyttään.