[OSy] Potiz s testy prvniho zakladniho zadani

Jan Smrčina lj at fooboo.org
Tue Nov 26 20:15:09 CET 2013


On Tue, Nov 26, 2013 at 07:47:42PM +0100, Martin Decky wrote:
> Hezky den,
>
> testy skutecne predpokladaji, ze datovy typ thread_t je ve skutecnosti 
> ukazatel na strukturu (ovsem to, ze jde o ukazatel, je v API skryto). 
> Funkce thread_create() strukturu vlakna take dynamicky alokuje. Standardni 
> implementace teto abstrakce tedy vypada nasledovne:
>
> struct thread {
>     /* ... */
> };
>
> typedef struct thread * thread_t;
>
> Vase reseni, kdy struktura vlakna obsahuje pouze handle pro identifikaci 
> jine struktury fyzicky popisujici vlakno, znamena jednu uroven abstrakce 
> navic a s tim testy zkratka nepocitaji. Tento datovy typ by se dle meho 
> nazoru nemel jmenovat thread_t, ale treba thread_id_t, a API funkce pro 
> fyzickou praci s vlakny by nadale mely pouzivat fyzickou strukturu vlakna 
> thread_t. Typ thread_id_t se naopak vyborne hodi pro rozhrani systemovych 
> volani.
>
> Pokud skutecne trvate na tom, aby struktura thread_t obsahovala pouze 
> handle, muzete stale pouzit typedef jako je uveden vyse, i kdyz to rozhodne 
> neni elegantni reseni. Dalsi moznost je rezignovat na striktni typovou 
> kontrolu a typ thread_t deklarovat jako void *, ktery vsak nebude 
> interpretovan jako ukazatel, ale jako handle.
>
> Rozhodne se take nebranime tomu, abyste si testy upravili a tam, kde se 
> nyni pouziva vypis thread_t pomoci %p, byl vypis thread_t.id pomoci %u. 
> Smysl testu to samozrejme neovlivni. Prosim, nezapomente takovou zmenu 
> testu zdokumentovat.
>
> Stale si myslim, ze neni duvod, aby si kernelove funkce vzajemne predavaly 
> jen handle vlakna a ne vlakno samotne. Nicmene pokud Vase implementace s 
> jednou abstrakci navic ma nejake vyhody, ktere ted nevidim, prizpusobte 
> tomu zbytek infrastruktury podle sveho nejlepsiho uvazeni.
>
> M.D.

Nase kernelove funkce si mezi sebou predavaji primo  struct thread*.
thread_t je minen jako odstineny typ pro uzivatelske rozhrani - pripada
mi hloupe jak mit pro thread_t odlisne definice v uzivatelskem
prostoru a v prostoru jadra, tak i predavat do uzivatelskeho prostoru
jakykoliv ukazatel do vnitrnich struktur jadra. (Ve 3. zadani se s
thread_t pocita.)

Vnitrne proto mame definovane rozhrani pro thread_t i pro struct thread*
(funkce s priponou _ptr).

Za odpoved kazdopadne dekuji, budeme dale patchovat testy pro nasi
implementaci (pridavat .id a menit %p na %ul).

Hezky den,
J. S.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 479 bytes
Desc: not available
URL: <http://d3s.mff.cuni.cz/pipermail/nswi004/attachments/20131126/c340d5a2/attachment.sig>


More information about the NSWI004 mailing list