Díky za článek, já si snad stáhnu cvs FreeBSD :-)
Jen pár detailů - třeba se budou někomu hodit:
"Když je jádro zkompilováno pro jednoprocesorový systém, spinlocky jsou prázdné struktury..."
by mělo být (níže v článku je to ostatně dovysvětleno)
'Když je jádro zkompilováno pro jednoprocesorový systém bez preemptivního přepínání procesů, spinlocky...'
"Zakázání přerušení pomocí cli a sti se v Linuxu už téměř nepoužívá." - možná by stálo za zmínku, že se vývojáři snaží všechna použití odstranit, viz. Documentation/cli-sti-removal.txt
A ta instrukce lock zakáže přístup na sběrnici i ostatním procesorům? No, je pravda, že na něco podobného se používala v dobách 386+387 na jejich spolupráci, ale není to zbytečně pomalé, zejména u většího množství procesorů?
No, já vím, že první blbost bylo dávat ty procesory na jednu sběrnici, pro masivně paralelní počítače se opravdu Intel/AMD/... s jejich "mikroprocesorovocentrickou" architekturou nehodí.
Pokud tam ten lock nedáte, tak nastane problém popisovaný v článku --- intrukce decb se ve skutečnosti uvnitř procesoru rozloží na tři samostatně vykonávané operace --- přečtení čísla, odečtení 1 a zapsání čísla. Pokud dva procesory současně provedou přečtení, zmenšení i zapsání, tak se výsledek zmenší o 1, i když by se měl zmenšit o 2.
Prefix lock (od Pentia Pro) nutně neznamená, že procesor zamyká sběrnici --- pokud je obsah paměti v cachové řádce ve stavu "Exclusive" nebo "Modified", tak se operace provede pouze v cachi a prefix způsobí, že po dobu vykonávání intrukce procesor nepustí svoji cachovou řádku.
Tento prefix lock má jiný problém --- procesor při něm vyprázdní celou instrukční pipelinu --- proto instrukce s ním trvají dlouho --- 20 tiků na Pentiu 2/3, 112 tiků na Pentiu 4.
No právě, z důvodu přístupu více procesorů se dá použít například mnou zmiňovaná instrukce cmpxchg (porovnání a prohození obsahu registru a paměti). Ono je v případě této instrukce jedno, jak se v procesoru rozloží, důležité jsou přece přístupy k paměti. Musíte buď nějak synchronizovat přístupy R-R (ten vlastně ne, že), R-W, W-R a W-W, nebo použít atomické instrukce.
Ale ne. Obe instrukce potrebuji lock a obe se daji pouzit uplne stejne. Vyhoda cmpxchg spociva v tom, ze umoznuje atomickou instrukci spinlock ovlivnit i precist. V pripade instrukce decb se pouze nastavi hodnoty FLAGS, takze se da jedine poznat kdy hodnota v spinlocku klesla na nulu. Coz v tomto pripade staci, takze nema smysl spinit kernel instrukci, ktera je k dispozici az od i486.
Viz problemy s InterlockedIncrement() na WinNT 3.51.
v nekterych vecech se s vami shoduji, ale v nekterych zase ne.
u tech vyvojaru je to pravda a vseobecne. neplati to jenom u vyvojaru, ale taky treba u sitariny, atd atd. proto nemam rad manazery a proto ani nevim, na jakou VS mam jit. vsude je to manazersky zamereny a to neci.
s tema vyrobkama ... mno, nevim. napr. jsem si vybral bundu za 4k protoze je z kvalitniho materialu a protoze doufam, ze nejaky ten patek vydrzi. rozhodne to nebylo proto, ze ji udelala tahle a tahle firma, nebo ze jsem ji tamhle videl venku. mate asi pravdu v tom, ze mnozi lide tak jednaji(hlavne ti mladsi, kde je to asi 1)kamos 2)cena a uz nevim co bylo dal). ted se mi nejako prerusil tok myslenek, tak zas budu zticha.
jeste jsem nekde zahledl, ze nejake firmy ve strojirenstvi potrebuji programy pro vyrobu rychle. na to maji odborniky; SW se da updatovat; s tou rychlosti bych neprehanel, protoze je tu take nastrojarna, kde se nejdrive museji vyrobit nastroje :)
tot uz radsi vse, kdyby v tom byly chybky, tak se omlouvam :(
btw: sef projektu je skoro magager, takze bych moc nespolehal na to, ze vyvojare podrzi. navic jak bylo jiz zmineno. pokud udelate kvalitni vyrobek(at uz nerozbitnou sklenicku, nebo dokonaly SW bez chyb), tak jiz neni neni potreba ve vyrobe pokracovat.