[OSy] Nestihajici zapsani CP0 compare registru

Martin Decky decky at d3s.mff.cuni.cz
Wed Nov 3 13:52:03 CET 2010


> Mam timer, ktory si pusta priamo scheduler, takze raz cas sa aktivuje
> funkcia 'schedule' volana ako handler nejakej struct timer:
> schedule_init () {
> 	
> 	timer_init(&tmr[cpuid()], 2000,&schedule_on_timer, ...)
> 	timer_start(&tmr[cpuid()]);
> }

Zrejme tedy myslenka, ze planovac je obsluzna rutina generickeho timeru, 
nebude uplne nejstastnejsi ..

Mozna uz jen proto, ze obecne timery maji jednorazovou povahu, zatimco 
preemptivni planovac je urcite spise periodicka zalezitost. Viz muj 
predchozi email -- snaha o jednotne API by nemela znamenat, ze se 
nasilne unifikuji i veci, ktere by bylo vyhodnejsi resit na ruznych 
urovnich abstrakce.

> Otazka je, maju sa spracovavat handlery timerov so zakazanym
> interruptom?

Na to se neda uplne obecne odpovedet, to zavisi na mnoha jinych 
rozhodnutich v navrhu Vaseho kernelu. Kde a jak presne handlery timeru 
bezi, zda je Vas kernel obecne preemptivni (tj. podporuje vnorene 
vyjimky) apod.

> Myslim ze som to dokazal kodom vyssie, nejaka rozumna konstanta tam asi
> vzdy bude musiet byt, lebo samotne write_cp0_compare a read_cp0_count
> nieco trvaju, tak aby som tam zapisal nieco urcite vacsie, ako pocet
> tickov ktore trva kym sa vykonaju tieto instrukcie.

Jiste, nema smysl, aby se timer exception vyvolal okamzite pote, co 
nastavite Compare a Count. Na to nepotrebujete zadny exception, v 
takovem pripade je lepsi zavolat obsluzny kod primo :)


M.D.




More information about the NSWI004 mailing list