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