Assembly-sprog og x86-systemprogrammering på lavt niveau · Lektion

Paging og Memory Management Unit (MMU)

Forstå, hvordan x86 MMU oversætter virtuelle adresser til fysiske adresser ved hjælp af pagetabeller og -mapper.

Lektion 1 af 412 trin

Paging og Memory Management Unit (MMU) er en gratis Assembly-sprog og x86-systemprogrammering på lavt niveau-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Assembly-sprog og x86-systemprogrammering på lavt niveau, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Assembly-sprog og x86-systemprogrammering på lavt niveau-kurset indeholder 4 lektioner i alt.

Hvad er sideinddeling?

Velkommen! I dag skal du udforske sideinddeling, som er en vigtig teknik til hukommelsesstyring i x86-systemer. Det er sådan, computeren håndterer hukommelse sikkert og effektivt.

Sideinddeling gør det muligt for programmer at fungere, som om de har en stor, sammenhængende hukommelsesblok, selv hvis den fysiske RAM er fragmenteret eller mindre end det, programmet har brug for.

Virtuel kontra fysisk adresse

Når et program kører, bruger det virtuelle adresser. Det er logiske adresser, som programmet "ser" og bruger til at referere til data og instruktioner.

CPU'en og den faktiske RAM-hardware bruger derimod fysiske adresser. Sideinddeling er det system, der oversætter virtuelle adresser til fysiske adresser.

MMU'ens rolle

Oversættelsen fra virtuelle til fysiske adresser håndteres af en særlig hardwarekomponent inde i CPU'en, som kaldes Memory Management Unit (MMU).

MMU'en fungerer som en ekstremt hurtig oversætter, der sikrer, at hver hukommelsesadgang fra et program går til den korrekte fysiske placering i RAM, eller signalerer en fejl, hvis adgangen er ugyldig.

Sider og siderammer

For at sideinddeling kan fungere, opdeles hukommelsen i blokke med fast størrelse:

  • Sider: Det er blokke af virtuel hukommelse, som et program ser.
  • Siderammer: Det er blokke af fysisk hukommelse (RAM).

På x86-systemer er en almindelig sidestørrelse 4 kilobyte (4 KB). MMU'en oversætter virtuelle sider til fysiske siderammer.

Introduktion til sidetabeller

Hvordan ved MMU'en, hvilken virtuel side der svarer til hvilken fysisk sideramme? Den bruger datastrukturer, der kaldes sidetabeller.

En sidetabel er grundlæggende et array, hvor hver post knytter et virtuelt sidenummer til adressen på den tilsvarende fysiske sideramme. Hver kørende proces har sit eget sæt sidetabeller.

Sideinddeling i flere niveauer: sidekataloger

For meget store virtuelle adresserum, som på 32-bit- eller 64-bit-systemer, ville en enkelt sidetabel være enorm. Derfor bruger x86 et hierarki med flere niveauer til sideinddeling.

Det første niveau er sidekataloget. Det peger ikke direkte på siderammer, men på andre sidetabeller. Disse sekundære tabeller peger derefter på de faktiske fysiske siderammer.

Processen for adresseoversættelse

Lad os forenkle processen for adresseoversættelse på 32-bit-systemer:

  1. CPU'en genererer en virtuel adresse.
  2. MMU'en bruger de øverste bit i denne adresse til at finde en post i sidekataloget.
  3. Denne post peger på en bestemt sidetabel.
  4. MMU'en bruger de midterste bit i den virtuelle adresse til at finde en post i denne sidetabel.
  5. Denne post indeholder den fysiske adresse på siderammen.
  6. De nederste bit i den oprindelige virtuelle adresse (forskydningen) lægges til siderammens adresse for at få den endelige fysiske adresse.

CR3: Roden i sideinddelingen

Hvordan ved MMU'en, hvor sidekataloget for den aktuelle proces befinder sig?

CPU'en har et særligt kontrolregister, der kaldes CR3. Dette register indeholder den fysiske adresse på det aktuelle Page Directory Base Register (PDBR). Det fortæller MMU'en præcis, hvor den skal begynde at lede efter sidekataloget.

PTE-flag og tilladelser

Hver post i en sidetabel (en PTE - Page Table Entry) indeholder mere end blot den fysiske adresse. Den har også forskellige flag:

  • Til stede: Befinder siden sig aktuelt i den fysiske hukommelse?
  • Læsning/skrivning: Må der skrives til siden?
  • Bruger/overvåger: Må programmer i brugertilstand få adgang til denne side?
  • Tilgået: Er der for nylig blevet oprettet adgang til siden?
  • Ændret: Er der blevet skrevet til siden, siden den blev indlæst?

Disse flag er afgørende for hukommelsesbeskyttelse og virtualisering.

Fordele ved sideinddeling

Sideinddeling er grundlæggende for moderne operativsystemer på grund af de mange fordele:

  • Hukommelsesbeskyttelse: Isolerer processer, så de ikke kan ødelægge hinandens hukommelse.
  • Virtuel hukommelse: Gør det muligt for programmer at bruge mere hukommelse, end der fysisk er til rådighed, ved at flytte sider til disken.
  • Deling af hukommelse: Flere processer kan dele de samme fysiske sider, f.eks. til delte biblioteker eller kommunikation mellem processer.
  • Omplacering: Programmer kan indlæses hvor som helst i den fysiske hukommelse; MMU'en håndterer tilknytningen.

Kontrol af viden om sideinddeling

Hvilken af følgende beskriver bedst den primære funktion for Memory Management Unit (MMU) i et x86-system?

Opsummering af sideinddeling og MMU

Godt klaret! Du har lært om den afgørende rolle, som sideinddeling og MMU spiller.

  • Programmer bruger virtuelle adresser, mens hardwaren bruger fysiske adresser.
  • MMU'en oversætter disse adresser ved hjælp af sidekataloger og sidetabeller.
  • Hukommelsen opdeles i sider (virtuelle) og siderammer (fysiske).
  • Registeret CR3 peger på det aktuelle sidekatalog.
  • PTE-flag styrer tilladelser og sidestatus.

Dette system giver alle moderne operativsystemer vigtig hukommelsesbeskyttelse, virtuel hukommelse og fleksibel hukommelsesstyring.

Gratis at komme i gang

Lær Assembly med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Paging og Memory Management Unit (MMU)” gratis?

Ja — hele teksten til “Paging og Memory Management Unit (MMU)” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Assembly-sprog og x86-systemprogrammering på lavt niveau-kurset, skal du opgradere til CoddyKit PRO. Assembly-sprog og x86-systemprogrammering på lavt niveau-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Paging og Memory Management Unit (MMU)”?

Forstå, hvordan x86 MMU oversætter virtuelle adresser til fysiske adresser ved hjælp af pagetabeller og -mapper. Du øver dig i Assembly-sprog og x86-systemprogrammering på lavt niveau med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Assembly-sprog og x86-systemprogrammering på lavt niveau?

Der kræves ingen tidligere erfaring. Assembly-sprog og x86-systemprogrammering på lavt niveau på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Paging og Memory Management Unit (MMU)”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Assembly-sprog og x86-systemprogrammering på lavt niveau-lektion?

Ja. Alle Assembly-sprog og x86-systemprogrammering på lavt niveau-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Paging og Memory Management Unit (MMU)
  2. Beskyttelsesringe og privilegier
  3. Grundlæggende om hypervisorer og virtualisering
  4. Segmentering og den globale deskriptortabel (GDT)
← Tilbage til Assembly-sprog og x86-systemprogrammering på lavt niveau