2020-03 [prednáška] Virtuálna pamäť (dodatok)

Zdroj
ručne priradené
Pridané

Pozrieť na YouTube →

Preber si túto prednášku so svojou AI

Skopíruj pripravený podklad a vlož ho do ChatGPT, Claude alebo inej AI — bude ťa učiť alebo skúšať len z tejto prednášky.

Otvoriť AI: ChatGPT · Claude · Gemini

Zhrnutie prednášky

Prednáška je doplnkovým výkladom ku kódu operačného systému XV6 zameraným na virtuálnu pamäť jadra, keďže téma nebola v riadnej prednáške stihnutá celá. Vysvetľuje sa rozloženie adresného priestoru jadra podľa hlavičkového súboru MemLayout a inicializácia mapovacích tabuliek vo funkcii kvminit v súbore vm.c, ktorá volá kvmmap a nakoniec mapPages. Detailne sa rozoberá trojúrovňová štruktúra stránkovacích tabuliek (L2, L1, L0) s indexmi po 9 bitov a výpočet toho, koľko pamäte dokáže adresovať jedna položka na každej úrovni (4 KB, 2 MB, 1 GB, celkovo 512 GB). Pomocou debuggera (gdb) a funkcie vmprint sa krok za krokom sleduje, ako jednotlivé volania kvmmap postupne alokujú a napĺňajú záznamy v tabuľkách, vrátane mapovania UART0 a VirtIO rozhrania. Na konkrétnom príklade sa ukazuje aj ručný prevod medzi virtuálnou adresou, indexmi do tabuliek a výslednou fyzickou adresou pomocou posunov bitov.

  • - Rozloženie virtuálneho adresného priestoru jadra XV6 je definované v súbore kernel/MemLayout.h.
  • - Inicializácia mapovania jadra prebieha vo funkcii kvminit v kernel/vm.c pomocou volaní kvmmap a mapPages.
  • - Virtuálna adresa RISC-V má 3x9 bitov indexov (L2, L1, L0) a 12 bitov offsetu.
  • - Jedna položka L0 adresuje 4 KB, L1 adresuje 2 MB, L2 adresuje 1 GB, celý priestor 512 GB.
  • - Pomocou gdb a funkcie vmprint sa demonštruje postupné vytváranie záznamov v tabuľkách pri jednotlivých volaniach kvmmap (napr. UART0, VirtIO).
  • - Ukázaný je ručný výpočet prevodu medzi PTE záznamom a výslednou fyzickou adresou pomocou bitových posunov.
  • - Výpis obsahu stránkovacích tabuliek (funkcia vmprint) je súčasťou prvej úlohy cvičenia daného týždňa.

Zhrnutie pripravené s pomocou AI z prepisu videa.