2020-04 [cvičenie] tabuľka stránok - otázky a odpovede

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

Cvičenie sa venuje riešeniu úlohy, v ktorej je potrebné pre každý proces v operačnom systéme xv6 vytvoriť samostatnú tabuľku stránok jadra (kernel page table) obsahujúcu okrem mapovania zariadení jadra aj mapovanie užívateľského adresného priestoru procesu, aby funkcie ako copyin mohli pristupovať k pamäti procesu priamo bez softvérového prekladu adries. Preberajú sa konkrétne miesta v kóde xv6, kde je pri systémových volaniach fork, exec a sbrk nutné synchronizovať zmeny medzi tabuľkou stránok procesu a jeho tabuľkou stránok jadra. Zdôrazňuje sa rozdiel medzi kopírovaním pamäte (fork) a kopírovaním mapovania (jadro), potreba správneho uvoľňovania pamäte pri chybách a odporúčanie začať implementáciu systémovým volaním exec, keďže rieši väčšinu problémov s mapovaním. Diskutuje sa aj otázka, či na tento účel stačí existujúca funkcia uvmcopy, pričom sa vysvetľuje, prečo nestačí a je potrebná samostatná funkcia na kopírovanie mapovania jadra.

  • - Každý proces má dve tabuľky stránok: vlastnú (užívateľskú) a tabuľku stránok jadra so zariadeniami a namapovaným užívateľským priestorom.
  • - Cieľom je nahradiť funkcie copyin/copyinstr priamym prístupom cez copyin_new/copyinstr_new pomocou tabuľky stránok jadra procesu.
  • - Mapovanie užívateľského priestoru v kernel page table nesmie prekročiť hranicu PLIC, kde začína pôvodné mapovanie zariadení jadra.
  • - Pri systémovom volaní exec sa musí vytvoriť nová kernel page table pre proces a nahradiť starú, vrátane úpravy registra SATP po jej zrušení.
  • - Pri fork treba nakopírovať mapovanie (nie samotnú pamäť) do novej kernel page table dieťaťa, keďže uvmcopy kopíruje iba užívateľský adresný priestor od adresy 0.
  • - Do kernel page table procesu je potrebné namapovať aj zásobník jadra a trampolínu, nielen samotný proces.
  • - Pri chybe počas mapovania je nutné korektne odmapovať už čiastočne namapované stránky; odporúča sa implementáciu začať funkciou exec, keďže rieši väčšinu problémov spoločných aj pre fork a sbrk.

Zhrnutie pripravené s pomocou AI z prepisu videa.