[OSy] thread_create && robust_thread_create

tom.bartonek at volny.cz tom.bartonek at volny.cz
Mon Nov 3 18:46:31 CET 2014


ad 2)
k mému zmatení došlo zejména proto, že v Callistu se vyskytuje struktura thread_t - a vzhledem k tomu, že dost o C se učím z Callista, nedošlo mi, že je rozpor v zadání(thread_t jako pointer) a Callistu(struct)
funkce thread_init je inicializační fce pro thready tamtéž...
(kernel/proc/thread.c)


díky
Tomáš



>> 2)
>> dost mě matou parametry funkce thread_create:
>> thread_t * thread_ptr - předpokládám, že se jedná o lokaci nového vlákna, takže malloc musím volat ještě před voláním thread_create?
>
>Ne. Argument thread_ptr je skutečně výstupní argument funkce 
>thread_create() a v souladu s obecnými zásadami zadání se předpokládá, 
>že alokaci potřebné paměti pro nové vlákno zajistí samotná funkce 
>thread_create().
>
>Obecné poznámky k rozhraní jádra totiž říkají, že typ thread_t skrývá 
>před volajícím implementační detaily. Proto můžete typ thread_t klidně 
>implementovat jako číselný identifikátor vlákna (handle) nebo jako 
>ukazatel na strukturu vlákna. Záleží na Vašem rozhodnutí.
>
>> protože abych mohl tenhle pointer předat navenek, musel bych v parametrech dostat ne pointer na vlákno, ale pointer na pointer na vlákno
>
>Je-li typ thread_t definován jako pointer na vlákno, potom první 
>argument funkce thread_create() je skutečně pointer na pointer na vlákno.
>
>> Takže při tvoření vlákna první malloc(sizeof(thread_to_be_created)) a potom thread_create?
>
>Zkuste zapřemýšlet, zda by takový způsob použití thread_create() 
>odpovídal zadání a zda by to nevyžadovalo změnu testů.
>
>> void *(*thread_start)(void *) - ukazatel na zacatek funkce, kterou mám z vlákna zavolat - takže poté, co vlákno stvořím, mám nějak zavolat tuhle funkci?
>
>Nejsem si jistý, jestli dobře rozumím otázce. Argument thread_start 
>ukazuje na tělo vlákna, tj. na kód, který má vlákno začít provádět (po 
>svém prvním naplánování).
>
>Pokud potřebujete vidět analogii s jiným prostředím, tak thread_start má 
>stejnou roli jako např. metoda run() v případě interfacu Runnable v Javě.
>
>> Jak velkou část tohoto pokrývá fce thread_init?
>
>Přiznám se, že netuším, co myslíte pod funkcí thread_init. Na co se 
>odkazujete?
>
>> void * data - kde má fce v paměti uložená data, nějak nakrmit do fce thread_start - rád nakrmím, pokud se mi podaří zjistit, jak...
>
>Třetí argument funkce thread_create() je potřeba předat funkci 
>thread_start jako její první argument po prvním naplánování vlákna.
>
>Zkuste se zamyslet nad tím, jak vlastně zajistíte, že poprvé naplánované 
>nové vlákno začne provádět kód od místa v paměti určeného ukazatelem 
>thread_start. Předání argumentu tomuto kódu je potom už snadný další krok.
>




More information about the NSWI004 mailing list