Intel Dev Manual 1, chapter 3.3.2 kirjoitti:
When using direct mapping (paging disabled), each linear address has a one-to-one correspondence with a physical address.
Tarkoittaako edellinen, että puolet muistista käytetään ikään kuin toisen puolen mappaamiseen?
Miksi sivutuksen päällä olemisesta tarvitsee välittää, jos se on kerran läpinäkyvää suorittimelle?
Käsittääkseni tuo lainaus tarkoittaa sitä, että jokainen muistiosoite viittaa suoraan saman osoitteen omaavaan fyysiseen muistipaikkaan. Eli osoite 0x00000000 viittaa suoraan fyysisen muistin alkuun. Mitään ylimääräistä muistia tuossa ei tarvita noiden osoitteiden mappaamiseen (mikä lie hyvä suomennos).
Jos taas sivutus on käytössä, niin asia ei välttämättä mene noin ja vaan osoite 0x80000000 ei välttämättä osoita fyysisessä muistissa osoitteeseen 0x80000000, vaan se voisi osoittaa myös vaikka osoitteeseen 0x00000000. Tässä sitten tarvitaan hieman ylimääräistä muistia pitämään kirjaa muistinkäytöstä. Pitää tietää, että mikä osoite osoittaa minnekin päin fyysistä muistia.
Sivutuksen avulla sitten voidaan toteuttaa virtuaalimuisti, jolla saadaan jokaiselle ohjelmalle oma 4 gigan osoiteavaruus, vaikka fyysistä muistia olisi paljon vähemmän.
Toivottavasti vastasi kysymykseen edes hieman auttavasti.
Miten virtuaalimuistista voidaan saada isompi kun mitä fyysinen muisti on?
Sivutuksen avulla saadaan jokaisella prosessille luotua oma 4 gigan osoiteavaruus (luodaan sille omat page tablet ja framet). Tuosta avaruudesta sitten ohjelman käyttämä muisti mapataan fyysiseen muistiin. Nyt tosiaan ohjelma voi viitata oman muistiavaruutensa osoitteeseen 0x40000000 ja todellisuudessa tuo sitten sijaitsee jossain päin fyysistä muistia. Tosiaan se virtuaalinen meinaa sitä, että sitä kaikkea muistia ei välttämättä oikeasti ole olemassa, se on vain virtuaalista.
Kovalevyä voidaan sitten käyttää muistin jatkeena (ns. swap) kopioimalla sitä fyysinen muistin sisältöä sinne, jolloin saadaan muuta tarpeellista sinne RAM -muistiin mahtumaan. Nyt jos se ohjelma sitten yrittää viitata osoitteeseen, joka on heitetty sinne kovalevylle, niin aiheutuu Page Fault, jonka käyttis sitten käsittelee haluamallaan tavalla. Yleensä se käsitellään hakemalla se haluttu muisti sieltä kovalevyltä takaisin sinne RAM -muistiin.
64 -bittisillä suorittimilla osoiteavaruus on luonnollisestikin laajempi.
http://wiki.osdev.org/Memory_Management Tuossa lyhyt oppimäärä. Muutenkin kannattaa tuota osdev.org -sivustoa selailla, siellä löytyy käyttiksenkoodailusta kiinnostuneita ihmisiä ja kovin tietoa noista asioista. Toki ne Intelin manuaalitkin sisältävät huomattavan määrän tietoa, muistaakseni osa 3 kattaa noita asioita eniten.
kiitos, tuo selvittikin jo paljon :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.