[OSy] Atomicky test and set

Martin Suchan martin.suchan at gmail.com
Sat Nov 22 19:30:41 CET 2008


Ahoj,
dekuji za radu s assemblerem! Jak jsem zjistil, bude treba
implementovat i compare&switch pro neblokujici seznamy.

Jinak mam dalsi dotaz, u semaforu se muze, nebo nesmi hodnota
pocitadla dostat nad inicializovanou hodnotu?

Treba test semaphore2 pouziva semafory inicializovane na 0 a dale jsou
v testu dve vlakna, pricemz jedno semafory zveda a druhe snizuje..
Pokud by se nekontrolovala horni mez semaforu, tak je reseni
jednoduche. Pokud ale nesmi prekrocit 0, tak me napada jedine reseni
pomoci rendezvous, tj. kdyz je jedno vlakno zablokovane na semaforu a
druhe vola up, tak akorat probudi prvni vlakno a necha puvodni hodnotu
semaforu.


S pozdravem Martin Suchan

On Sat, Nov 22, 2008 at 7:14 PM, Gabriel Zabusek
<gabriel.zabusek at gmail.com> wrote:
> Ahoj,
>
> Tento problem som uz uspesne vyriesil, snad neni proti pravidlam
> pokial ti poviem, ze sa skutocne jedna o dobru kombinaciu LL a SC.
> Podla manualu mipsu je potreba davat velky pozor na to aby v blocku
> medzi LL a SC nedoslo k istym Load/Store akciam z/do pamati. Podla
> manualu to moze 'rozbit' funkcnost tychto instrukcii (je teda potreba
> pouzivat registry, pripadne vhodne zvolene kombinacie 'constraints' a
> ich modifikatorov v inline asm u IO operandov). Co sa tyka funkcnosti
> tychto instukci tak dost zhruba povedane: pamet, ktora bola 'oznacena'
> pomocou LL nemoze byt pred zavolanim SC modifikovana, procesor to
> nepovoli. V mojom pripade mi robilo najvatcsie problemy at&t syntax
> inline asm v gcccku - som skor zvyknuty na klasicku intelacku (nasm)
> syntax - tento link mi veci dost objasnil:
>
> http://www.ibm.com/developerworks/linux/library/l-ia.html
>
> co sa tyka konkretnej implementacie: nerad by som bol penalizovany za
> radenie, takze pokial to neni proti pravidlam (o com dost
> pochybujem...) tak ti moju implementaciu rad poslem - netvrdim ovsem,
> ze musi byt nutne spravna - nicmenej zatial sa zda, ze funguje :-).
>
> Zatial a pekny vecer,
> Gabriel Zabusek
>
>
> 2008/11/22 Martin Suchan <martin.suchan at gmail.com>:
>> Zdravim,
>> chtel bych se zeptat, zda by se nekdo nepodelil o assemblerovskou
>> implementaci atomicke funkce "test and set", ktera je nezbytna pro
>> fungovani spinlocku a i dalsich sychronizacnicich primitiv. Bohuzel z
>> assembleru znam jen mizive informace a studovat manual kvuli jedne/par
>> funkcim se mi zda trochu moc.
>>
>> Zrejme se bude jednat o dobrou kombinaci instrukci Load linked a Store
>> conditional, nevim ale, jak mezi ne vlozit test na nenulovost var a
>> jump mimo, kdyz je gtz + druhou vetev prirazeni a test, zda mi do toho
>> nikdo nevstoupil. Nevim, co ma kazda funkce za sideeffecty a v jakem
>> poradi/kombinaci je lze zapsat spravne za sebou, aby delali to, co
>> maji.
>>
>>
>> A jeste bych mel dotazy, u cond variable se ma vlakno pri timeout 0 a
>> neuspechu pred opetovnym zamcenim mutexu aspon jednou vzdat procesoru.
>> Ma se (doporucuje se) takto vzdavat i u dalsich timeout funkci, jako
>> thread_join_timeout, mutex_lock_timeout, semaphore_down_timeout?
>>
>> Dale pri odemceni mutexu se maji probudit vsechna zablokovana vlakna,
>> neni rozumnejsi odblokovat jen jedno, kdyz zamek muze vlastnit jen
>> jedno? (Jina situace bude asi u rwlocku, kdy se odemyka write zamek a
>> cekaji na odemceni read vlakna.)
>>
>>
>> Diky
>> S pozdravem Martin Suchan
>>
>> _______________________________________________
>> OSy mailing list
>> OSy at dsrg.mff.cuni.cz
>> https://dsrg.mff.cuni.cz/mailman/listinfo/osy
>>
>
>
>
> --
> ..............................................................................................................................................
>
> "...the finding of new proofs for known truths is often at least as
> important as the discovery itself..."
>
> _______________________________________________
> OSy mailing list
> OSy at dsrg.mff.cuni.cz
> https://dsrg.mff.cuni.cz/mailman/listinfo/osy
>




More information about the NSWI004 mailing list