[OSy] TLB?

Matej Pivoluska pivoluska at matfyz.cz
Wed Dec 1 21:57:53 CET 2004


Dňa St 1. December 2004 19:20 Peter Libič napísal(a):
> Skusali sme merat velkost pamate pomocou, a pouzili sme na to TLB. Nejak
> to nefungovalo (to je divne, co :-) ), tak som sa trochu hral s pamatou.
> V kerneli, na ktory nadvazujeme (klklpa), som do main.c do start() hned
> za init_tlb(); napisal nieco taketo:
>
> uint* ii;
> for ( ii=0; i<0xFFFFFFFF; i++ ) printk("%x -> %p", *ii, ii );
>
> a do funkcie tlbrefill() v tlb.c (co by mal byt exception handler pre
> tlb) hned na prvy riadok: panic("tlb refill");
>
> A po spusteni mi to na moje prekvapenie som neuvidel hlasku Kernel
> panic!, ale vypisovalo to pekne vsetky adresy od 0, az pokial ma to
> neprestalo bavit...
>
> Nevie niekto, kde by mohol byt problem?

Existuje viacero druhov TLB vynimiek. Jedna je TLB Refill, ktora vznika, ak sa 
v TLB vobec nenachadza virtualna adresa, ku ktorej sa hlada mapovanie. Tato 
vynimka ma entry point na adrese 0x0 (+OFFSET_KSEG0).

Dalsim typom vynimky TLB je TLB invalid. Tato vznika vtedy, ak sa v TLB 
virtualna adresa nachadza, ale jej mapovanie ma nastaveny priznak Invalid. 
Tato vynimka ma entry point na 0x180 (+OFFSET_KSEG0), co je zaroven entry 
point pre general exception handler. 

Tretia je TLB Modified, ktora vznika pri pokuse o zapis na valid mapovanie, 
ktore nema nastavene priznak Dirty, cize je "read-only". (Vhodne napr. na 
Copy on Write optimalizaciu.) Tato ma tiez entry point na 0x180. 

Vynimka TLB Refill ma tiez entry point na 0x180 ak vznikne pri obsluhe inej 
vynimky.

Odporucam pozriet kapitolu 5 CPU Exception Precessing z manualu k MIPS R4000.



> Peter Libic

Matej Pivoluska



More information about the NSWI004 mailing list