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
--
FreeBSD mailing list ([email protected])
http://www.freebsd.cz/listserv/listinfo/users-l