[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