Fájlrendszer kérdés
Rancz Lajos
csiga at fosch.com
Fri May 19 10:28:48 CEST 2006
Rancz Lajos írta:
> Helló!
>
> Alapvetően csak az errno-val van gond. A POSIX 1. az errno-t egy
> globális változónak definiálta, ami több szál esetén nyilván necces. A
> POSIX 1.c már azt mondja, hogy szálanként kell megcsinálni az errno
> változót, úgy hogy a többi szál ne láthassa: "POSIX.1c redefines errno
> as a service that can access the per-thread error number as follows". Ez
> most akkor mit jelent? Pl ezt:
> #define errno (ferror())
>
Na ez nem jó, azt írja egy másik helyen, hogy:
|
#define errno <int modifiable lvalue> /
/
Tehát fv hívás nem lehet :-( Akkor viszont van más ötletem. Perpillanat
a threadekhez tartozó fájlrendszer adatok a következőképpen vannak tárolva:
typdef struct
{
xTaskHandle currentProcess; // Taszk
unsigned int workingDirectory; // Szál munkakönyvtára
// Temporary munkaterület
PageHeader work; // Szál temporary munkaterülete
} ThreadDescriptor;
Ha ennek van egy int errnum mezője, akkor a fv.-ek tehetik abba a
threadhez tartozó hibát. Ekkor pedig az errno-t így lehet definiálni:
#define errno (threads[actualThread()].errnum)
Az actualThread() fv. visszadja, hogy a hívó thread hányadik a táblában.
Így minden szálnak saját errno-ja van, szóval nem kell mutex :-)
Üdv,
Lajos
//|
> Ez jól működik if(errno == vmi) esetben, de mi van olyankor, ha a szoft
> pl. ilyet csinál:
> errno = 0;
>
> Teszünk rá?
>
> Kösz,
> Lajos
>
>
> Moczik Gabor írta:
>
>> Rancz Lajos wrote:
>>
>>
>>> Visszatérve az újrahívhatóság kérdésére: nem teljsen értem, hogy két
>>> szál hogyan tud egyszerre fájlokat elérni mert van statikus változó az
>>> errno. Ebben az esetben mutexet kell használni az alaklmazói programba?
>>> Csak a fájlrendszer fv. szintjén ezt nem lehet megoldani, pontosabban a
>>> fv. végrehajtásának idejéig lehet, de onnatól semmi sem garantálható :-)
>>> Hogy szokták ezt megoldani?
>>>
>>>
>> Igen, ehhez mutex kell. Minden esetben lockolni kell egy utasítás _blockot_,
>> ha az ott használt objektumot mas szal is hasznalhatja ugyanabban az idoben.
>> Az "ugyanabban az idoben"-t ugy kell erteni, hogy ha taszkvaltas van, akkor
>> kerulhet olyan helyre a vezerles a masik taszkban, ami hasznalja.
>>
>> Akkor is kell, ha pl. az iras/olvasas nem egy lepes, hanem tobb, mert a
>> syscall-ok kozott mar lehet thread valtas.
>>
>>
>>
>
> -----------------------------------
> Szponzorunk: http://tonerbolt.hu/
>
>
More information about the Elektro
mailing list