abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 22:44 | IT novinky

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 3
    včera 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | IT novinky

    Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | Nová verze

    Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | Nová verze

    Byla vydána nová verze 6.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.14.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

    Ladislav Hagara | Komentářů: 2
    včera 04:11 | Nová verze

    Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.

    Ladislav Hagara | Komentářů: 0
    23.4. 23:22 | IT novinky

    Evropský parlament dnes přijal směrnici týkající se tzv. práva spotřebitele na opravu. Poslanci ji podpořili 584 hlasy (3 bylo proti a 14 se zdrželo hlasování). Směrnice ujasňuje povinnosti výrobců opravovat zboží a motivovat spotřebitele k tomu, aby si výrobky nechávali opravit a prodloužili tak jejich životnost.

    Ladislav Hagara | Komentářů: 9
    23.4. 16:11 | Nová verze

    Bylo oznámeno (cs) vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.

    Ladislav Hagara | Komentářů: 24
    23.4. 13:44 | Upozornění

    ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.

    Ladislav Hagara | Komentářů: 29
    KDE Plasma 6
     (72%)
     (9%)
     (2%)
     (17%)
    Celkem 724 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Jaderné noviny - 9. 5. 2007

    31. 5. 2007 | Robert Krátký | Jaderné noviny | 4595×

    Aktuální verze jádra: 2.6.21. Citáty týdne: Ingo Molnar, Jeff Garzik, Linus Torvalds. Další věci pro 2.6.22. Návrat kevent? Potíže s volatile.

    Obsah

    Aktuální verze jádra: 2.6.21

    link

    Stále nevyšla žádná předverze řady 2.6 (k 9. 5. 2007), protože ještě probíhá začleňování změn. Do hlavního git repozitáře se valí další patche; vizte níže.

    Aktuální verze -mm stromu je 2.6.21-mm2. Mezi nedávné změny patří odstranění patchů s adaptivním přednačítáním [adaptive readahead] (čeká se na novou, jednodušší verzi), jaderného mechanismu pro mountování neprivilegovanými uživateli a nakonec odstranění schodišťového plánovače s příděly [staircase deadline scheduler]. -mm však hubne především kvůli přesunu patchů do hlavního stromu.

    Starší jádra: 2.6.16.50 bylo vydáno 4. května a 2.6.16.51 následovalo 9. května. Obě obsahují několik důležitých oprav.

    Citáty týdne: Ingo Molnar, Jeff Garzik, Linus Torvalds

    link

    Vážně, bylo by asi lepší, kdybychom riskli začlenění _špatného_ kódu teď (což je v případě přednatahování swapu [swap prefetch] přesný opak skutečnosti), než nechat ten kód ležet ladem. Lidem zjevně vadí některé aspekty swapování na desktopu a jediným způsobem, jak z toho ven, je nechat na tom kódu hackovat více lidí. Začlenění kódu zapojí více lidí. Bude to kravál a mohlo by dojít k regresím, ale aspoň jde v tomto případě jen o "výkonnost" a tu funkci jde snadno vypnout.

    -- Ingo Molnar prosazuje swap prefetch.

    Motto open source je vydávej brzy, vydávej často. Ne "schovej ten kód někde v temném koutě, dokud si Christoph nemyslí, že je dokonalý". Pro upstream začleněný kód máme vysoké očekávání, ale neočekáváme dokonalost. Dokonalý je nepřítelem dobrého.

    -- Jeff Garzik pro Libertas.

    Pokud vaše mise k jiné hvězdě *závisí* na tom, aby každý kousek komplexního vybavení vydržel více než 200 let bez rebootu, tak máte vážné technologické problémy.

    -- Linus Torvalds

    Další věci pro 2.6.22

    link

    V tuto chvíli probíhá začleňování změn pro 2.6.22 a hodně kódu se ještě očekává. Již zařazené změny, kterých si všimnou i uživatelé, jsou následující:

    • Do hlavního stromu si konečně našel cestu stack pro bezdrátové síťování mac80211 (dříve Devicescape). Prozatím nejsou k dispozici žádné ovladače, které by nový stack uměly využívat, ale prý už se na nich pracuje.

    • Sysfs reprezentace i2c zařízení se změnila způsobem, který by mohl způsobit problémy starším nástrojům. Konkrétně verze lm_sensors starší než 2.10.3 budou mít problémy.

    • Několik starých ovladačů pro USB dotykové obrazovky bylo odstraněno (itmtouch, mtouchusb a touchkitusb) - nahrazuje je nový ovladač usbtouchscreen.

    • Architektuře x86_64 se dostalo podpory pro přemístitelné jádro [relocatable kernel], což je nezbytná vlastnost pro ty, kdo chtějí používat na kexec založený crash dump mechanismus [mechanismus pro výpis info o pádu].

    • Pomocí nového bootovacího parametru noreplace-paravirt lze zakázat patchování nízkoúrovňových paravitualizačních háčků [hooks].

    • Z architektury x86_64 byla odstraněna konfigurační volba REORDER, která zpřeházela v binárce jádra funkce kvůli lepšímu výkonu.

    • Souborový systém CIFS podporuje IPv6 adresy. Přibyl nový parametr pro mount, který umožňuje přebití uživatelských a skupinových ID. CIFS se také dočkal několika výkonnostních vylepšení.

    • Výrazné změny se děly v API pro jaderné virtuální stroje (KVM). Pokud budou dodrženy dřívější plány, tak se jednalo o poslední změny v KVM, které narušují kompatibilitu.

    • Byl přidán systém pro podporu přepínačů "RF kill" (které vypínají vysílač) na mnoha mobilních zařízeních.

    • Přidána byla i podpora pro "subtypy" souborových systémů. Cílovou skupinou jsou souborové systémy založené na FUSE, které v současné době jádru připadají všechny stejné, a je proto těžké je rozlišit ve fstab. Teď může mít (např.) FUSE souborový systém založený na ssh typ fuse.sshfs.

    • V /proc teď jsou záznamy, které poskytují informace o pozici a příznacích všech otevřených popisovačů souborů.

    • Nové systémové volání:

          long utimensat(int dirfd, char *filename, struct timespec *times,
                         int flags);
      

      Umožňuje aplikacím nastavit čas přístupu a modifikace u daného filename s přesností na nanosekundy.


    • Mapovač zařízení [device mapper] má nový cíl "delay", který pozdržuje I/O operace; může se to zdát jako funkce s pochybným přínosem, ale je určena pouze pro testování.

    • Jsou podporovány tabulky diskových oddílů na Motorola sysv68.

    • Nový privátní futexový mechanismus, který zlepšuje škálovatelnost tím, že se vyhýbá globálnímu sdílenému jmennému prostoru.

    • Architektura PowerPC podporuje koncept "slices" [úseků] - speciálních oblastí paměti, které mohou mít rozdílné velikosti stránek. Jde o vlastnost podobnou hugetlbfs, ale velikosti stránek jsou pružnější.
    • Nově podporovaný hardware: desky Picotux 200 ARM, dotyková zařízení ADS7846, desky D-Link DSM-G600, integrované sériové porty MIPS RM9122, seriová zařízení PMC-Sierra MSP71xx, desky MS7712SE01, routerové desky L-BOX RE2, desky SH7780 a SH7722 Solution Engine, framebuffery Sun XVR-500 a XVR-2500, řadiče SUN4U PCI-E, řadiče pro správu systému Apple, hodinové čipy Ricoh RS5C313, jednodrátová ASIC jádra Maxim DS1WM, programovatelné sériové řadiče Alchemy au1500, framebuffery založené na Intel LE80578, platformy PowerPC 750 "Holly", referenční desky PowerPC 440GP "Ebony", řadiče větráků Maxim MAX6650 a MAX6651, monitorovací čipy Analog Devices AD741x, teplotní senzory Intel Core, generátory náhodných čísel PA Semi PA6T-1682M, framebuffery VIA VT8623 a různé ovladače pro architekturu "Blackfin".

    Změny patrné pro vývojáře jádra:

    • Vrstva i2c byla výrazně změněna, hlavním důvodem bylo, aby se i2c ovladače více podobaly ovladačům pro jiné sběrnice. Přibyly například metody probe() a remove(), které zařízením říkají, kdy se i2c periférie objevují a mizejí. Protože i2c není samopopisovací sběrnice, potřebuje podpůrný kód pomoc, aby věděl, kde by ta i2c zařízení mohla být; u mnoha tříd zařízení je možné tuto informaci zjistit přímo ze systémového BIOSu.

    • Crypto API má sadu nových funkcí pro využití s asynchronními blokovými šiframi. Přibylo i nové jaderné vlákno cryptd, které může spustit kteroukoliv synchronní šifru v asynchronním režimu.

    • Z ovladačového modelu byla odstraněna struktura subsystem; nikdy vlastně nebyla potřeba. Většina kódu, který očekával struct subsystem, byla změněna tak, aby místo toho používal relevantní kset.

    • Nová verze jaderného klienta rpcbind (portmapper [mapovač portů]) podporuje verze 2 - 4 protokolu rpcbind. API portmapperu se kvůli tomu také změnilo.

    • Byly provedeny četné změny v metodách paravirt_ops. Kromě toho už se nejedná o GPL-only export.

    • Nová paměťová funkce:

          void *krealloc(const void *p, size_t new_size, gfp_t flags);
      

      Jak by se dalo očekávat, mění se tím velikost alokované paměti, v případě potřeby je přesunuta.


    • Byl začleněn SLUB alokátor - coby experimentální alternativa k slab kódu.

    • Bylo přidáno nové makro, které zjednodušuje vytváření slab keší:

          struct kmem_cache KMEM_CACHE(struct-type, flags);
      

      Výsledkem je vytvoření keše, která drží objekty daného struct_type (pojmenované po tom typu) a s případnými slab flags.


    • Byl odstraněn příznak SLAB_DEBUG_INITIAL, společně s příbuzným příznakem SLAB_CTOR_VERIFY, který byl předáván konstruktorům. Tyto změny se projeví v poměrně velkém počtu souborů. Nepoužívaný příznak SLAB_CTOR_ATOMIC je také pryč.

    • Byl začleněn mechanismus "quicklist" [rychlý seznam]. Quicklisty jsou rychlé keše pro stránky tabulek stránek, které optimalizují alokaci a inicializaci těchto stránek.

    • Architektura SuperH má zase funkční podporu kgdb.

    • Architektura ia64 má nový nástroj, který do běžícího systému vkládá "machine check" chyby. Nedoporučuje se používat na produkčních strojích.

    • Byl začleněn patch s odložitelnými časovači. Přibylo i nové makro pro inicializaci položek v pracovní frontě (INIT_DELAYED_WORK_DEFERRABLE()), které způsobí, že bude úloha do fronty zařazena "odložitelně".

    • Staré příznaky přerušení SA_* sice nebyly odstraněny, jak bylo původně plánováno, ale budou-li použity, objeví se při kompilaci varování.

    • Nové makro list_first_entry() překvapivě vrací první položku seznamu.

    • Typy atomic64_t a local_t jsou už plně podporovány na více architekturách.

    • Kód "hibernace" (uspání na disk) byl oddělen od kódu "suspend" [uspání] (do RAM) v rámci snahy o rozlišení těchto rozdílných operací.
    • Opět byly přepracovány pracovní fronty. Přibyla funkce:

          void cancel_work_sync(struct work_struct *work);
      

      Ta se pokouší zrušit jednu položku pracovní fronty - ať už je ve sdílené (keventd) nebo soukromé frontě. Byla odstraněna run_scheduled_work().

    Proces začleňování ještě neskončil, takže se můžete těšit na další velkou dávku patchů.

    link

    Když jsme naposledy rozebírali rozhraní kevent od Jevgenije Poljakova, vypadalo to, že už je u konce svého života. Patche eventfd byly najednou na výsluní, protože aplikacím nabízely způsob, jak čekat na mnoho druhů událostí při použití obyčejných dotazovacích [polling] rozhraní. Vývojář kevent dal práci do šuplíku, neboť nepředpokládal, že by se mohla do jádra dostat. Takový předpoklad se zdá být oprávněný - vzhledem k tomu, že Andrew Morton ve svém dokumentu o plánovaném začleňování do 2.6.22 říká, že budou zařazeny patche eventfd.

    Jak bylo řečeno minulý týden, jedna překážka se našla - pollfs, což je implementace velmi podobné myšlenky. Objevila se ale i relativně tvrdá kritika kódu pollfs a vypadá to, že jeho prestiž dost poklesla. Je možné, že brzy vyjde nová, vylepšená verze pollfs, ale to by musela být o hodně lepší, aby upoutala dostatek pozornosti. Kód pollfs má smůlu také v tom, že na scénu přišel příliš pozdě.

    Je tu však další pozdní příchozí, kterému ale pozornost věnována bude: správce glibc Ulrich Drepper. Přestože se neúčastnil diskuze o eventfd, teď vystoupil proti začlenění do hlavního stromu:

    Záleží na Linusovi, jestli chce přidat další kód, další možné problémy, další noční můru pro správce - jen kvůli dočasnému řešení, které není nutné, které neřeší všechny problémy, a které není tak škálovatelné jako další navrhované metody.

    Můžu říct jen to, že bych byl proti. Prostě to nedává smysl.

    Ulrichovi se na přístupu eventfd nelíbí několik věcí:

    • Protože spoléhá na poll() a jeho varianty, neposkytuje kód eventfd aplikacím žádný způsob pro získání událostí bez vstupu do jádra. U aplikací s vysokým průtokem dat - například u velkých síťových serverů - je eliminování systémových volání jedním z klíčů k odpovídajícímu výkonu. Kód kevent, který má v uživatelském prostoru "kruh" [ring] událostí, takový mechanismus poskytuje, kdežto eventfd ne.

    • Používání poll() také ztěžuje posílání informací z jádra aplikaci - komunikační kanál obsahuje jen pár bitů. Rozhraní kevent umožňuje přibalit ke každé události slušné množství informací. Eventfd tento problém obchází tím, že aplikacím umožňuje číst více informací z příslušných popisovačů souborů - ale to vyžaduje další systémové volání.

    • Ulrich tvrdí, že rozhraní poll() představuje neřešitelné problémy ve vztahu k vláknům a zpracovávání rušení [cancellation processing]. Taková argumentace však není všeobecně akceptována.

    • Stávající kód eventfd aplikacím neumožní čekat na futexy a Davide Libenzi, vývojář eventfd, není moc nakloněn přidání takové podpory. Patche pollfs čekání na futexy podporují, i když Ulrichovi se nezdálo něco na implementaci. Obecně lze říci, že Ulrich by měl radši jediné systémové volání, pomocí kterého mohou aplikace čekat na cokoliv - takže vynechají-li se primitivní typy jako futexy, spokojen nebude.

    Výsledkem je, že Ulrich oponuje začlenění eventfd; byl by raději, kdyby se věnovalo úsilí přípravě kevent (nebo nějaké náhradě s podobnými funkcemi). Rozhraní podobné kevent prý nakonec stejně bude nutné:

    Myslím, že nakonec stejně budeme potřebovat něco jako kevent, a pak bude všechno tohle *fd() zbytečné a bude to jen kód navíc, který bude nutné udržovat, a který by mohl ztěžovat další práci v této oblasti.

    Jak to dopadne, to vůbec není jasné. Ulrichův názor žádné velké houfy vývojářů nepodpořily - ale nikdo mu také neodporuje. Zatím ani ještě nikdo neoprášil patche kevent pro další kolo diskuzí. Jedna věc se zdá jasná - celá ta debata pravděpodobně posune otázku začlenění eventfd na další vývojový cyklus. Rozhraní pro uživatelský prostor jsou důležitá a je téměř nemožné je odstranit. Čekání na další verzi jádra je malá cena za to, že nakonec vývojáři rozhodnou správně.

    Aktualizace: kód eventfd byl do hlavního jádra začleněn 11. května.

    Potíže s volatile

    link

    Moje [Jonathan Corbet] vydání knihy The C Programming Language, Second Edition (copyright 1988, stále známá jako "ta nová kniha o C") o klíčovém slovu volatile [nestálý] říká toto:

    Účelem volatile je vynutit implementaci, která potlačí optimalizaci, k níž by jinak došlo. Například na stroji s memory-mapped vstupem/výstupem může být ukazatel na registr zařízení deklarován jako ukazatel na volatile, aby se kompilátoru zakázalo odstranění zjevně nadbytečných referencí přes daný ukazatel.

    Programátoři v C často chápou význam volatile tak, že proměnnou lze změnit mimo aktuální vlákno provádění [thread of execution]; kvůli tomu jsou občas v pokušení to použít v jádře tam, kde se využívají sdílené datové struktury. Andrew Morton nedávno poukázal na použití volatile v odevzdaném patchi:

    Volatile jsou problematické - říká se, že by v jádře nikdy neměly být, ale zatím jsme nezdokumentovali proč; a i386 je vesele používá v readb() a spol.

    V reakci na to shromáždil Randy Dunlap několik emailů od Linuse, kde se o tomto tématu mluví, a navrhl, jestli bych [Jonathan Corbet] nechtěl pomoci s tím "dokumentováním proč". Tady je výsledek.

    Jedním z argumentů, které Linus často uvádí ve spojení s volatile, je to, že cílem je potlačit optimalizaci, což téměř nikdy nechceme. V jádře je nutné chránit přístupy k datům proti souběhům [race condition], a to je něco úplně jiného.

    Stejně jako volatile, i jaderné primitivy, které souběžně přistupují k datům (spinlock, mutex, paměťové bariéry atd.), jsou navrženy tak, aby zabránily nechtěné optimalizaci. Jsou-li použity správně, není třeba používat volatile. A pokud je volatile i tak nutné, je v kódu téměř jistě chyba. Ve správně napsaném jaderném kódu může volatile akorát zpomalovat.

    Představte si typický blok jaderného kódu:

        spin_lock(&zámek);
        udělej_něco_s(&sdílená_data);
        udělej_něco_jiného_s(&sdílená_data);
        spin_unlock(&zámek);
    

    Pokud se veškerý kód řídí zamykacími pravidly, nemůže dojít k neočekávané změně hodnoty sdílená_data, dokud je držen zámek. Kterýkoliv jiný kód, který by chtěl ta data na hraní, bude muset počkat na zámek. Spinlock primitivy fungují jako paměťové bariéry - jsou tak napsány - což znamená, že přístupy k datům přes ně nebudou optimalizovány. Takže kompilátor si možná myslí, že ví, co bude ve sdílená_data, ale volání spin_lock() ho donutí všechno zapomenout. Při přístupu k těmto datům nevznikne žádný optimalizační problém.

    Pokud by sdílená_data byla deklarována jako volatile, i tak by bylo potřeba zamykání. Ale kompilátoru by také bylo zabráněno v optimalizaci přístupu k sdílená v rámci té části [critical section], i když víme, že s tím nikdo jiný nepracuje. Když je držen zámek, sdílená_data nejsou volatile. A proto říká Linus tohle:

    A navíc, co je důležitější, "volatile" je na špatné _straně_ celého systému. V C jsou volatile "data", ale to je šílenost. Data nejsou volatile - _přístupy_ jsou volatile. Takže by mohlo dávat smysl říct "ať je tento konkrétní _přístup_ opatrnější", ale ne "ať všechny přístupu k těmto datům používají nějakou náhodnou strategii".

    Když jde o sdílená data, je při správném zamykání volatile zbytečné - a potenciálně škodlivé.

    Ukládací třída volatile byla původně určena pro memory-mapped I/O registry. V jádře by i přístupy k registrům měly být chráněny zámky, ale nechceme ani, aby kompilátor "optimalizoval" přístupy k registrům v rámci dané části [critical section]. Jenže v jádře jsou I/O přístupy k paměti vždycky prováděny přes přístupové funkce [accessor]; I/O přístup k paměti přímo přes ukazatele není doporučován a nefunguje dobře na všech architekturách. Přístupové funkce jsou psány tak, aby zabránily nechtěné optimalizaci, takže i v tomto případě je volatile zbytečné.

    Další situace, ve které by člověk mohl mít nutkání použít volatile, je ve chvíli, kdy je procesor zaměstnán čekáním na proměnnou. Správný způsob provedení takového čekání [busy wait]:

        while (moje_proměnná != co_chci)
            cpu_relax();
    

    Volání cpu_relax() může snížit spotřebu procesoru nebo uvolnit místo hyperthreadovanému dvojčeti; kromě toho to také slouží jako paměťová bariéra, takže je volatile zase zbytečné. Nehledě na to, že busy-wait je tak jako tak neslušné.

    Přesto existuje několik vzácných situací, ve kterých dává volatile v jádře smysl:

    • Zmíněné přístupové funkce mohou volatile využít na architekturách, kde funguje přímý I/O přístup k paměti. Každé přístupové volání se v podstatě stane samo o sobě malou kritickou částí a tak zajistí, že bude přístup proveden, jak to programátor chtěl.

    • Inline kód assembleru, které mění paměť, ale zároveň nemá žádné další viditelné postranní účinky, by mohl být kompilátorem GCC vymazán. Přidání klíčového slova volatile do asm tomu odstranění zabrání.

    • Proměnná jiffies je zvláštní tím, že může mít jinou hodnotu, kdykoliv je na ni odkazováno, ale lze ji číst bez jakéhokoliv speciálního zamykání. Takže jiffies může být volatile, ale přidávání dalších proměnných tohoto typu není vítáno. V tomto smyslu se o jiffies mluví jako o "stupidní staré" záležitosti.

    Většiny kódu se uvedené omluvy pro volatile netýkají. Z toho vyplývá, že použití volatile bude pravděpodobně vnímáno jako chyba, a vyslouží kódu ještě přísnější kontrolu. Vývojáři, kteří cítí pokušení volatile využít, by se měli zarazit a zamyslet se nad tím, čeho chtějí vlastně dosáhnout.

    (Díky Randy Dunlapovi za to, že dal věci do pohybu a prozkoumal první případ, a Satyamu Sharmaovi a Johannesi Stezenbachovi za komentáře k první verzi toho článku.)

           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    31.5.2007 08:40 Robo
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    Ten linusov citat je genialny :))
    Dalibor Smolík avatar 31.5.2007 15:50 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    V pátek jsem instaloval malý firemní server, nenaběhla mi síťová karta Attansic L1 Gigabit. Zachránilo mně až teprve jádro 2.6.21, které jako první tuhle kartu podporuje ..
    Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
    1.6.2007 07:17 test
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    Zaujala mne funkce cpu_relax(); Chtel jsem si ji otestovat, ale neco delam spatne, nasledujici kod vytizi CPU na 99%
    #include asm/processor.h
    int main(void) {
        while(1 == 1) {
            cpu_relax();
        }
    
        return 0; // Do budoucna
    }
    
    michich avatar 1.6.2007 07:43 michich | skóre: 51 | blog: ohrivane_parky
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    cpu_relax() nespí, takže to musí procesor plně vytížit. Ale aspoň přitom procesor neshoří, protože cpu_relax() zpomaluje jeho takt nebo vkládá nějaké čekací stavy.
    Luk avatar 1.6.2007 22:14 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    Záleží na platformě. Někde to nedělá vůbec nic (tedy jako kdyby tam volání nebylo), ale konkrétně na x86 to vkládá dvojici instrukcí (REP NOP), která ty čekací stavy vyvolává.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    egg avatar 1.6.2007 19:01 egg | skóre: 20 | Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    Misto 1==1 v podmínce stačí prostě 1. :-)
    1.6.2007 20:09 test
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    aha, dekuji Vam obema =)
    2.6.2007 19:27 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    gcc (verze 4.1 a 3.4) pro while(1==1), while(1) i třeba for(;;) generuje úplně stejný assembler. Takže je to v podstatě jedno.
    When your hammer is C++, everything begins to look like a thumb.
    Luk avatar 2.6.2007 19:55 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    Jenže 1 == 1 vypadá dost na palici :-D
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    2.6.2007 21:07 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    Pro mě je na palici i ten while(1), protože neoptimalizující kompiler by zde musel tu testovací instrukci vložit. Takže pro nekonečný cyklus (pokud je by design, pochopitelně :-)) používám for(;;)
    When your hammer is C++, everything begins to look like a thumb.
    Luk avatar 2.6.2007 21:19 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    Já mám k tomu ohavnému for-cyklu nějaký nepřekonatelný odpor. Proto používám while(1), resp. v C++ while(true), přestože tak záměrně spoléhám na optimalizaci kompilátoru.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    3.6.2007 00:09 Ondrej 'SanTiago' Zajicek
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    Já mám k tomu ohavnému for-cyklu nějaký nepřekonatelný odpor.
    No tak pouzij toto:
    #define ever (;;)
    
    for ever
    {
    ...
    }
    
    Luk avatar 3.6.2007 00:43 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Jaderné noviny - 9. 5. 2007
    Ještě lepší, hmmm... :-(
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.