OS2/Projekat 2022

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

Projekat 2022. godine je prvi projekat iz Operativnih sistema 1 i 2 u kom se koristi xv6 operativni sistem na RISC-V arhitekturi. U ovom vodiču se nalaze korisni saveti pri izradi projekta.

Dodavanje interfejsa raspoređivača

Interfejs definisan postavkom za raspoređivač je isti onaj iz školskog jezgra:

struct proc *get(); // Дохватање спремног процеса из реда чекања
void put(struct proc *); // Убацивање спремног процеса у ред чекања

xv6 u sebi sadrži Round-robin raspoređivač direktno implementiran u funkciji scheduler(). Neophodno je zameniti ovaj algoritam sa traženim interfejsom. Mesta od značaja su ona gde proces menja stanje.

  1. get() u scheduler() nakon uključivanja prekida - prelaz iz RUNNABLE u RUNNING.
  2. put() u yield() - kad proces predaje kontekst nekom drugom procesu.
  3. put() u userinit() - kad se kreira prvi korisnički proces.
  4. put() u fork() - kad se forkuje nov proces.
  5. put() u wakeup() - prelaz iz SLEEPING u RUNNABLE.
  6. put() u kill() - kad proces treba da se završi treba da ga probudimo.

Implementiranje preotimanja po vremenskom kvantumu

Okruženje

Makefile

Debagovanje korisničkih programa

Promena učestanosti tajmerskog prekida

U svrhu testiranja na odbrani je ponekad traženo da se poveća učestanost prekida radi preciznijih merenja performansi (pomoću sistemskog poziva uptime()) i vidljivijeg efekta raspoređivanja. Interval tajmera se može promeniti u fajlu start.c u funkciji timerinit().

Tumačenje scause i sepc

Preskočene su rezervisane vrednosti.

scause vrednost Značenje Potencijalni problem
0 Adresa u PC nije poravnata Kernel je promenio kontekst u nevalidan proces (verovatno je raspoređivač vratio null).
1 Greška u pristupu instrukciji
2 Ilegalna instrukcija
3 Breakpoint
Ne bi trebalo da se pojavi kao razlog za paniku.
4 Adresa sa koje se čita nije poravnata Loš pokazivač.
5 Greška u pristupu pri čitanju
6 Adresa u koju se piše nije poravnata
Atomična instrukcija pristupa adresi koja nije poravnata
7 Greška u pristupu pri pisanju/atomičnoj instrukciji.
8 ecall iz korisničkog režima Ne bi trebalo da se pojavi kao razlog za paniku.
9 ecall iz supervizorskog (kernel) režima Ne bi trebalo da se dešava uopšte u xv6.
c Stranična greška pri učitavanju instrukcije
Kernel je promenio kontekst u nevalidan proces (verovatno je raspoređivač vratio null).
d Stranična greška pri čitanju Kernel je promenio kontekst u nevalidan proces (verovatno je raspoređivač vratio null).
Loš pokazivač.
f Stranična greška pri pisanju/atomičnoj instrukciji Kernel je promenio kontekst u nevalidan proces (verovatno je raspoređivač vratio null).
Loš pokazivač.

Vrednost sepc registra označava vrednost PC u trenutku kad je nastala greška. Može se tačno pronaći mesto u kodu pretraživnjem ove adrese u fajlu kernel.asm koji sadrži i C kod kernela i generisani RISC-V asembli sa tačnom adresom instrukcija.