Assembly-kieli ja x86-tason järjestelmäohjelmointi · Oppitunti

Sivutus ja muistinhallintayksikkö (MMU)

Ymmärtäkää, miten x86:n MMU muuntaa virtuaaliosoitteet fyysisiksi osoitteiksi sivutaulujen ja hakemistojen avulla.

Oppitunti 1/412 vaihetta

Sivutus ja muistinhallintayksikkö (MMU) on ilmainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.

Mitä sivutus on?

Tervetuloa! Tutustumme tänään sivutukseen, joka on keskeinen muistinhallintatekniikka x86-järjestelmissä. Sen avulla tietokone käsittelee muistia turvallisesti ja tehokkaasti.

Sivutuksen ansiosta ohjelmat voivat käsitellä muistia suurena yhtenäisenä lohkona, vaikka fyysinen RAM olisi pirstoutunut tai pienempi kuin ohjelman tarvitsema tila.

Virtuaalinen ja fyysinen osoite

Ohjelman suoritettaessa se käyttää virtuaaliosoitteita. Nämä ovat loogisia osoitteita, joita ohjelma "näkee" ja käyttää viitatessaan tietoihin ja käskyihin.

Suoritin ja varsinainen RAM-laitteisto käyttävät kuitenkin fyysisiä osoitteita. Sivutus on järjestelmä, joka muuntaa virtuaaliosoitteet fyysisiksi osoitteiksi.

MMU:n tehtävä

Virtuaaliosoitteiden muuntamisesta fyysisiksi osoitteiksi vastaa suorittimen sisällä oleva erityinen laitteistokomponentti, jota kutsutaan muistinhallintayksiköksi (Memory Management Unit, MMU).

MMU toimii erittäin nopeana kääntäjänä ja varmistaa, että jokainen ohjelman tekemä muistiviittaus kohdistuu oikeaan fyysiseen sijaintiin RAM-muistissa, tai ilmoittaa virheestä, jos käyttö on virheellinen.

Sivut ja sivukehykset

Jotta sivutus toimisi, muisti jaetaan kiinteän kokoisiin lohkoihin:

  • Sivut: Nämä ovat ohjelman näkemän virtuaalimuistin lohkoja.
  • Sivukehykset: Nämä ovat fyysisen muistin (RAM-muistin) lohkoja.

x86-järjestelmissä yleinen sivukoko on 4 kilotavua (4 KB). MMU muuntaa virtuaaliset sivut fyysisiksi sivukehyksiksi.

Sivutaulujen esittely

Mistä MMU tietää, mihin fyysiseen sivukehykseen kukin virtuaalinen sivu vastaa? Se käyttää tietorakenteita, joita kutsutaan sivutauluiksi.

Sivutaulu on käytännössä taulukko, jossa kukin tietue yhdistää virtuaalisen sivun numeron sitä vastaavan fyysisen sivukehyksen osoitteeseen. Jokaisella suoritettavalla prosessilla on omat sivutaulunsa.

Monitasoinen sivutus: sivuhakemistot

Erittäin suurissa virtuaalisissa osoiteavaruuksissa, kuten 32- tai 64-bittisissä järjestelmissä, yksi sivutaulu olisi valtava. Tämän hallitsemiseksi x86 käyttää monitasoista sivutushierarkiaa.

Ensimmäinen taso on sivuhakemisto. Se ei osoita suoraan sivukehyksiin, vaan muihin sivutauluihin. Nämä toissijaiset taulut osoittavat varsinaisiin fyysisiin sivukehyksiin.

Osoitteenmuunnosprosessi

Yksinkertaistetaan 32-bittinen osoitteenmuunnosprosessi:

  1. Suoritin muodostaa virtuaaliosoitteen.
  2. MMU käyttää osoitteen ylempiä bittejä löytääkseen tietueen sivuhakemistosta.
  3. Tämä tietue osoittaa tiettyyn sivutauluun.
  4. MMU käyttää virtuaaliosoitteen keskimmäisiä bittejä löytääkseen tietueen kyseisestä sivutaulusta.
  5. Tämä tietue sisältää sivukehyksen fyysisen osoitteen.
  6. Alkuperäisen virtuaaliosoitteen alemmat bitit (siirtymä) lisätään sivukehyksen osoitteeseen lopullisen fyysisen osoitteen saamiseksi.

CR3: Sivutuksen juuri

Mistä MMU tietää, missä nykyisen prosessin sivuhakemisto sijaitsee?

Suorittimessa on erityinen ohjausrekisteri nimeltä CR3. Tämä rekisteri sisältää nykyisen Page Directory Base Register (PDBR) -rekisterin fyysisen osoitteen. Se kertoo MMU:lle täsmälleen, mistä sivuhakemiston etsintä aloitetaan.

PTE-liput ja käyttöoikeudet

Jokainen sivutaulun tietue (PTE – Page Table Entry) sisältää muutakin kuin fyysisen osoitteen. Se sisältää myös erilaisia lippuja:

  • Present: Onko sivu parhaillaan fyysisessä muistissa?
  • Read/Write: Voidaanko sivulle kirjoittaa?
  • User/Supervisor: Voivatko käyttäjätilan ohjelmat käyttää tätä sivua?
  • Accessed: Onko sivua käytetty äskettäin?
  • Dirty: Onko sivulle kirjoitettu sen lataamisen jälkeen?

Nämä liput ovat olennaisia muistin suojauksen ja virtualisoinnin kannalta.

Sivutuksen hyödyt

Sivutus on keskeinen osa nykyaikaisia käyttöjärjestelmiä monien hyötyjensä ansiosta:

  • Muistisuojaus: Eristää prosessit ja estää niitä turmelemasta toistensa muistia.
  • Virtuaalimuisti: Mahdollistaa fyysisesti käytettävissä olevaa suuremman muistimäärän käytön siirtämällä sivuja levylle.
  • Muistin jakaminen: Useat prosessit voivat jakaa samat fyysiset sivut esimerkiksi jaettuja kirjastoja tai prosessienvälistä viestintää varten.
  • Uudelleensijoitus: Ohjelmat voidaan ladata mihin tahansa fyysisen muistin kohtaan, sillä MMU huolehtii yhdistämisestä.

Sivutuksen tietotesti

Mikä seuraavista kuvaa parhaiten Memory Management Unit (MMU) -yksikön ensisijaista tehtävää x86-järjestelmässä?

Sivutuksen ja MMU:n yhteenveto

Hienoa! Olette oppineet sivutuksen ja MMU:n tärkeästä roolista.

  • Ohjelmat käyttävät virtuaaliosoitteita, kun taas laitteisto käyttää fyysisiä osoitteita.
  • MMU muuntaa nämä osoitteet sivuhakemistojen ja sivutaulujen avulla.
  • Muisti jaetaan sivuihin (virtuaalisiin) ja sivukehyksiin (fyysisiin).
  • CR3-rekisteri osoittaa nykyiseen sivuhakemistoon.
  • PTE-liput hallitsevat käyttöoikeuksia ja sivun tilaa.

Tämä järjestelmä tarjoaa olennaisen mu memory protection, virtual memory, and flexible memory management for all modern operating systems.

Aloita maksutta

Opi Assembly tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Sivutus ja muistinhallintayksikkö (MMU)” ilmainen?

Kyllä – oppitunnin ”Sivutus ja muistinhallintayksikkö (MMU)” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssin, päivitä CoddyKit PROhon. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Sivutus ja muistinhallintayksikkö (MMU)”?

Ymmärtäkää, miten x86:n MMU muuntaa virtuaaliosoitteet fyysisiksi osoitteiksi sivutaulujen ja hakemistojen avulla. Harjoittelet Assembly-kieli ja x86-tason järjestelmäohjelmointi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Assembly-kieli ja x86-tason järjestelmäohjelmointi-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Sivutus ja muistinhallintayksikkö (MMU)”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunnilla?

Kyllä. Jokainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Sivutus ja muistinhallintayksikkö (MMU)
  2. Suojausrenkaat ja käyttöoikeudet
  3. Hypervisorit ja virtualisoinnin perusteet
  4. Segmentointi ja Global Descriptor Table (GDT)
← Takaisin: Assembly-kieli ja x86-tason järjestelmäohjelmointi