[OSy] Testy
Martin Decky
decky at dsrg.mff.cuni.cz
Mon Nov 3 15:39:21 CET 2008
Hezky den,
> koukam na testy, a nektere me ponekud prekvapuji. Proto bych se rad ujistil, ze se nejedna o chybu:
>
> Test iol:
> 23 #define POLL_DELAY_MS 1000
> 57 thread_usleep (POLL_DELAY_MS * 1000);
>
> Opravdu se zde ma test na ctvrt hodiny zastavit?
Nechapu, kde jste prisel na tu "ctvrt hodinu". V zadani je napsano:
* void thread_sleep(const unsigned int sec)
* void thread_usleep(const unsigned int usec)
Funkce zablokuje prave bezici vlakno na zadanou dobu v sekundach
(resp. mikrosekundach).
Cili argument "POLL_DELAY_MS * 1000" v testu se rovna 1000000
mikrosekund, coz je jedna sekunda.
> Ja rovnou priznam, ze nas kernel tento radek nesnese, protoze pri nem pretika registr pro pocitani instrukci. Predpokladam, ze v realnem systemu takhle dlouha cekani resi systemove hodiny, a ne pocitani instrukci. Ma tedy funkce thread_usleep snaset libivolne velka cisla?
Odpoved na posledni otazku, tedy zda maji funkce thread_sleep() a
thread_usleep() snaset libovolne velka cisla, zni pochopitelne ano.
V zadani neni nikde uvedeno, ze rozsah argumentu techto funkci je
omezen. Ostatne v pripade thread_usleep() odpovida maximalni rozsah
unsigned int na 32bitove platforme jen asi 1 hodine, coz neni nijak
zavratna doba.
Pokud Vam cekani nefunguje spravne, meli byste se zamyslet nad tim, zda
zpusob pocitani casu, ktery pouzivate, je vhodny.
> Test exc4:
> 27 printk ("Issuing break instruction, should be ignored...\n");
> 28 asm (
> 29 "break 10\n"
> 30 );
>
> Ackoli nas kernel Break vyjimku zcela ignoruje (bez ohledu na branch delay slot), msim se na tomto miste zastavi. Pro ukonceni je nutne ctrl+c
Mohu Vas ujistit, ze msim nezpracovava breakpoint exception jakkoliv
specialne (ostatne muzete se ve zdrojacich msimu presvedcit sami). To,
co zpusobuje zastaveni simulatoru, neni pravdepodobne sam msim, ale Vas kod.
Problem bude mozna v tom, jak si vykladate pojem "ignorovat vyjimku".
Nejde o to vyjimky si vubec nevsimat, ale naopak osetrit ji tak, aby
kod, ktery tuto synchronni vyjimku vykonal, pokracoval dal. Prectete si
dokumentaci k MIPSu, kde je uvedeno, jak s breakpoint vyjimkou pracovat
a k cemu se typicky pouziva.
> bash ma ale pote nejaky rozbity vypis (konkretne nevypisuje nic).
Za rozbiti vstupu v terminalu v pripade, ze se na nevhodnem miste
prerusi beh skriptu tests*.sh, muze presmerovani a prikaz tee, ktery se
uvnitr pouziva. Opravit to lze trivialne prikazem "reset", ktery
terminal znovu uvede do vychoziho nastaveni (prikaz spustite "po slepu").
M.D.
More information about the NSWI004
mailing list