Paging och Memory Management Unit (MMU)
Förstå hur x86-MMU:n översätter virtuella adresser till fysiska adresser med hjälp av sidtabeller och kataloger.
Paging och Memory Management Unit (MMU) är en gratis lektion i Assembler och lågnivåprogrammering för x86-system på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Assembler och lågnivåprogrammering för x86-system, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Assembler och lågnivåprogrammering för x86-system innehåller totalt 4 lektioner.
Vad är paging?
Välkommen! I dag ska vi utforska paging, en viktig teknik för minneshantering i x86-system. Det är så datorn hanterar minnet på ett säkert och effektivt sätt.
Paging gör att program kan uppfatta att de har ett stort, sammanhängande minnesblock, även om det fysiska RAM-minnet är fragmenterat eller mindre än vad programmet behöver.
Virtuella och fysiska adresser
När ett program körs använder det virtuella adresser. Det är logiska adresser som programmet ”ser” och använder för att referera till data och instruktioner.
Processorn och den faktiska RAM-hårdvaran använder däremot fysiska adresser. Paging är det system som översätter virtuella adresser till fysiska adresser.
MMU:s roll
Översättningen från virtuella till fysiska adresser hanteras av en särskild maskinvarukomponent i processorn som kallas Memory Management Unit (MMU).
MMU:n fungerar som en extremt snabb översättare. Den ser till att varje minnesåtkomst från ett program går till rätt fysisk plats i RAM-minnet, eller signalerar ett fel om åtkomsten är ogiltig.
Sidor och sidramar
För att paging ska fungera delas minnet upp i block med fast storlek:
- Sidor: Blocken av virtuellt minne som programmet ser.
- Sidramar: Blocken av fysiskt minne (RAM).
I x86-system är en vanlig sidstorlek 4 kilobyte (4 KB). MMU:n översätter virtuella sidor till fysiska sidramar.
Introduktion till sidtabeller
Hur vet MMU:n vilken virtuell sida som motsvarar vilken fysisk sidram? Den använder datastrukturer som kallas sidtabeller.
En sidtabell är i princip en array där varje post mappar ett virtuellt sidnummer till adressen för motsvarande fysiska sidram. Varje process som körs har sin egen uppsättning sidtabeller.
Paging i flera nivåer: sidkataloger
För mycket stora virtuella adressutrymmen, som i 32-bitars- eller 64-bitarsystem, skulle en enda sidtabell bli enorm. För att hantera detta använder x86 en paging-hierarki med flera nivåer.
Den första nivån är sidkatalogen. Den pekar inte direkt på sidramar, utan på andra sidtabeller. Dessa sekundära tabeller pekar sedan på de faktiska fysiska sidramarna.
Adressöversättningsprocessen
Vi förenklar processen för adressöversättning i 32-bitarsystem:
- Processorn genererar en virtuell adress.
- MMU:n använder adressens övre bitar för att hitta en post i sidkatalogen.
- Den posten pekar på en specifik sidtabell.
- MMU:n använder de mellersta bitarna i den virtuella adressen för att hitta en post i sidtabellen.
- Den posten innehåller den fysiska adressen till sidramen.
- De lägre bitarna i den ursprungliga virtuella adressen (förskjutningen) läggs till sidramens adress för att få den slutliga fysiska adressen.
CR3: pagingens rot
Hur vet MMU:n var sidkatalogen för den aktuella processen finns?
Processorn har ett särskilt kontrollregister som kallas CR3. Registret innehåller den fysiska adressen till den aktuella Page Directory Base Register (PDBR). Det talar om exakt var MMU:n ska börja leta efter sidkatalogen.
PTE-flaggor och behörigheter
Varje post i en sidtabell (en PTE – Page Table Entry) innehåller mer än bara den fysiska adressen. Den har också olika flaggor:
- Present: Finns sidan för närvarande i det fysiska minnet?
- Read/Write: Får sidan skrivas till?
- User/Supervisor: Får program i användarläge komma åt sidan?
- Accessed: Har sidan använts nyligen?
- Dirty: Har sidan skrivits till sedan den lästes in?
Dessa flaggor är avgörande för minnesskydd och virtualisering.
Fördelar med paging
Paging är en grundläggande del av moderna operativsystem tack vare sina många fördelar:
- Minnesskydd: Isolerar processer och hindrar dem från att förstöra varandras minne.
- Virtuellt minne: Gör det möjligt för program att använda mer minne än vad som finns fysiskt genom att växla ut sidor till disk.
- Delning av minne: Flera processer kan dela samma fysiska sidor, till exempel för delade bibliotek eller kommunikation mellan processer.
- Omplacering: Program kan läsas in var som helst i det fysiska minnet; MMU:n hanterar mappningen.
Kunskapskontroll: paging
Vilket av följande beskriver bäst den primära funktionen hos Memory Management Unit (MMU) i ett x86-system?
Sammanfattning: paging och MMU
Bra jobbat! Du har lärt dig om den viktiga rollen hos paging och MMU:n.
- Program använder virtuella adresser, medan hårdvaran använder fysiska adresser.
- MMU:n översätter dessa adresser med hjälp av sidkataloger och sidtabeller.
- Minnet delas upp i sidor (virtuella) och sidramar (fysiska).
- Registret CR3 pekar på den aktuella sidkatalogen.
- PTE-flaggor styr behörigheter och sidstatus.
Detta system ger alla moderna operativsystem viktigt minnesskydd, virtuellt minne och flexibel minneshantering.
Lär dig Assembly med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Paging och Memory Management Unit (MMU)” gratis?
Ja – hela texten till ”Paging och Memory Management Unit (MMU)” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Assembler och lågnivåprogrammering för x86-system, kan Ni uppgradera till CoddyKit PRO. Kursen i Assembler och lågnivåprogrammering för x86-system innehåller totalt 4 lektioner.
Vad lär jag mig i ”Paging och Memory Management Unit (MMU)”?
Förstå hur x86-MMU:n översätter virtuella adresser till fysiska adresser med hjälp av sidtabeller och kataloger. Ni övar på Assembler och lågnivåprogrammering för x86-system med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Assembler och lågnivåprogrammering för x86-system?
Du behöver inga förkunskaper. Utbildningen i Assembler och lågnivåprogrammering för x86-system på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Paging och Memory Management Unit (MMU)”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Assembler och lågnivåprogrammering för x86-system-lektionen?
Ja. Varje Assembler och lågnivåprogrammering för x86-system-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Paging och Memory Management Unit (MMU)
- Skyddsringsnivåer och privilegier
- Grunderna i hypervisorer och virtualisering
- Segmentering och Global Descriptor Table (GDT)