jak na kritickou sekci
Dan Lukes
dan at obluda.cz
Thu Jan 3 14:00:38 CET 2013
On 01/03/13 13:20, Roman Nádhera:
Zkus, prosim, quotovat trochu umirneneji. A taky jsem se vratil k
puvodnim o neco lepsimu subjektu.
>> chc pouzit fumkce critical_enter(void); a critical_exit(void);
>> Tak to pri prekladu vysype hromadu chyb.
>> critical_enter()/critical_exit() jsou funkce dostupne v jadre, nikoliv v
> No, nejsem si jisty, ani nepisu kernelovy modul. Jen aplikaci, kde do
> jedne sdilene pameti kafraji dva procesy
No to sis ale vyhlednul prilis silny nastroj (i kdyby sel pouzit). To ze
potrebujes vzajemne synchronizovat dva procesy neni dobrym duvodem
zablokovat i vsechny ostatni
> sekce, ale treba mutex (pouzivam ve Woknech, ale tady s tim je stejny
> problem). Proste jakykoliv mechanismus, ktery zabrani modifikaci ve
> sdilene pameti po dobu nejake operace.
Proste potrebujes nejakou formu zamkovani. Napriklad flock (+varianty
jako lockf nebo fcntl) nebo semafory (man 4 sem).
> (Jo, takove RPP-16, tam sel semafor udelat jedinou strojovou instrukci)
Ta instrukce se na i386 jmenuje LOCK CMPXCHG. Nejakou takovou potrebuje
kazdej procesor, kterej ma byt pouzitelnej v multiprocesorovejch
sestavach. V tom rozdil neni.
Myslim, ze to privilegovana instrukce neni, takze ano, je to mozna dalsi
zpusob jak to cele navleknout - ve sdilene pameti si pomoci LOCK CMPXCHG
semafory naimplementovat sam.
Ale pouziti systemovych primitiv ma oproti primemu pouziti procesorovych
instrukci vyhodu nezavislosti zdrojoveho kodu na cilovem procesoru.
Dan
More information about the Users-l
mailing list