[OSy] Timer a zablokovane vlakno

Martin Decky decky at nenya.ms.mff.cuni.cz
Tue Oct 24 11:37:49 CEST 2006


Hezky den,

obecna odpoved na dotazy tohoto typu je uvedena primo v zadani:

"Pokud zadani nespecifikuje nejaky detail, je zavazne chovani, ktere 
ocekavaji testy. Pokud testy dane chovani netestuji, zadani si podle 
uvazeni dodefinujte a sve rozhodnuti zdokumentujte."

> Mame vlakno, ktere si vytvori timer s dobou expirace napr. 200ms. Pak zavola sem_down() na nejaky existujici semafor a zablokuje se napr. na nekolik vterin. Za 200ms po jeho zablokovani by se vsak mela vyvolat obsluzna rutina timeru. Vyvola se i presto, ze vlakno je zablokovane na semaforu? Nebo se ma pockat az se vlakno odblokuje ze semaforu a vyvolat obsluznou rutinu timeru az pak?
> 
> Dalsi otazkou je, zda mame predpokladat, ze v ramci obsluzne funkce timeru muze vlakno volat funkce pri kterych se opet muze zablokovat (napr. thread_join(), sem_down(), getc(), ...) ?

Odpoved zalezi na tom, jak se rozhodnete timery implementovat, tedy zda 
pobezi timer v kontextu vlakna, ktere ho zaregistrovalo (v tom pripade 
neni asi vhodne, aby handler prerusoval cekani na kritickou sekci, ale 
je principielne mozne, aby se sam zablokoval), nebo v kontextu idle 
vlakna (kdy se vyvola handler skutecne asynchronne na puvodnim vlaknu, 
ale blokovat by nemel).


M.D.



More information about the NSWI004 mailing list