[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