abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 03:00 | Komunita

Na Humble Bundle lze získat počítačovou hru Company of Heroes 2 (Wikipedie, YouTube) běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 0
dnes 02:00 | Zajímavý software

Christian Kellner představil na svém blogu projekt Bolt řešící bezpečnost rozhraní Thunderbolt 3 na Linuxu. Pomocí příkazu boltctl nebo rozšíření GNOME Shellu lze komunikovat s démonem boltd a například zakázat neznámá zařízení a předejít tak útokům typu Thunderstrike nebo DMA.

Ladislav Hagara | Komentářů: 0
dnes 01:00 | Nová verze

Po půl roce vývoje od vydání verze 11.0 byla vydána verze 11.1 svobodného softwaru pro vytváření datových úložišť na síti FreeNAS (Wikipedie). Nejnovější FreeNAS je postaven na FreeBSD 11.1. Přehled novinek v příspěvku na blogu. Zdůraznit lze zvýšení výkonu OpenZFS, počáteční podporu Dockeru nebo synchronizaci s cloudovými službami Amazon S3 (Simple Storage Services), Backblaze B2 Cloud, Google Cloud a Microsoft Azure

Ladislav Hagara | Komentářů: 0
včera 23:55 | Nová verze

Po dvou měsících vývoje od vydání verze 235 oznámil Lennart Poettering vydání verze 236 správce systému a služeb systemd (GitHub, NEWS).

Ladislav Hagara | Komentářů: 0
včera 20:00 | Nová verze Ladislav Hagara | Komentářů: 0
včera 19:33 | Pozvánky

Pražská Fedora 27 Release Party, oslava nedávného vydání Fedory 27, se uskuteční 19. prosince od 19:00 v prostorách společnosti Etnetera (Jankovcova 1037/49). Na programu budou přednášky o novinkách, diskuse, neřízený networking atd.

Ladislav Hagara | Komentářů: 0
včera 18:11 | Nová verze

Byla vydána verze 2.11.0 QEMU (Wikipedie). Přispělo 165 vývojářů. Provedeno bylo více než 2 000 commitů. Přehled úprav a nových vlastností v seznamu změn.

Ladislav Hagara | Komentářů: 0
včera 17:44 | Komunita

Canonical oznámil dostupnost kryptografických balíčků s certifikací FIPS 140-2 úrovně 1 pro Ubuntu 16.04 LTS pro předplatitele podpory Ubuntu Advantage Advanced. Certifikace FIPS (Federal Information Processing Standards) jsou vyžadovány (nejenom) vládními institucemi USA.

Ladislav Hagara | Komentářů: 2
včera 16:11 | Zajímavý software

Společnost Avast uvolnila zdrojové kódy svého dekompilátoru RetDec (Retargetable Decompiler) založeného na LLVM. Vyzkoušet lze RetDec jako webovou službu nebo plugin pro interaktivní disassembler IDA. Zdrojové kódy RetDec jsou k dispozici na GitHubu pod open source licencí MIT.

Ladislav Hagara | Komentářů: 3
13.12. 11:00 | Zajímavý software
Na Good Old Games je v rámci aktuálních zimních slev zdarma k dispozici remasterovaná verze klasické point&click adventury Grim Fandango, a to bez DRM a pro mainstreamové OS včetně GNU/Linuxu. Akce trvá do 14. prosince, 15:00 SEČ.
Fluttershy, yay! | Komentářů: 6
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (8%)
 (1%)
 (1%)
 (1%)
 (75%)
 (14%)
Celkem 987 hlasů
 Komentářů: 45, poslední 1.12. 19:00
    Rozcestník

    Jaderné noviny - 5. 5. 2015: Konverze systémových volání pro rok 2038

    30. 7. 2015 | Redakce | Jaderné noviny | 2204×

    Stav vydání jádra. Citáty týdne. Konverze systémových volání pro rok 2038.

    Stav vydání jádra

    Současný vývojový cyklus nese označení 4.1-rc2, a byl vydán 3. května. "Jako vždy se jedná o směsku ovladačů, aktualizací architektur (z nichž s390 vynikala kvůli prng poznámce), souborového systému a sítí."

    Stabilní aktualizace: Žádné nebyly tento týden vydány. Aktualizace 4.0.2, 3.19.7, 3.14.41 a 3.10.77 byly v době psaní tohoto článku v procesu revidování. Původně měly vyjít 4. května, ale zdržely se shrnutím několika neuvážených patchů.

    Citáty týdne

    Za posledních 10 let se x86 FPU (matematický koprocesor) rozrostly do rozměrů jakéhosi špagetového monstra, kterému jen velmi málo (pokud vůbec nějací) vývojářů kernelu rozumí, a které jen málokoho baví hackovat.

    Za ta léta mnoho lidí upozorňovalo na to, že by nebyl od věci pořádný úklid, takže jsem si před nějakou dobou řekl "a proč by ne", a krok za krokem jsem s ním začal, abych viděl, kam až to vede. Jak těžké to může být?!

    O tři týdny a 200+ patchů později musím přiznat, že jsem velmi hrubě podcenil rozsah tohoto projektu ;-)

    -Ingo Molnar se vydává na menší čistící quest

    PROSÍM VÁS. Neprogramujeme v Pascalu (a díky Bohu za to), takže můžeme ponechat návěští se smysluplnými názvy. Taky se nestydíme používat goto, kde to dává smysl, takže není třeba zmenšovat návěští do velikosti smítek na monitoru.

    -Linus Torvalds

    Konverze systémového volání roku 2038

    Do onoho osudného dne v lednu roku 2038, kdy dojdou volné bity a přetečou 32bitové hodnoty time_t, které v unixových systémech zastupují zobrazování času, nám už zbývá jen 23 let. S přibližováním onoho data se můžeme těšit na všelijaká zábavná selhání 32bitových systémů a současní čtenáři LWN se mohou těšit na povolání z důchodu v hrdinné (a lukrativní) snaze zabránit blížící se apokalypse. Tak nějak by to mohlo vypadat, nebýt skupiny vývojářů (morousů), kteří se snaží problém roku 2038 vyřešit a celou zábavu pokazit. Konkrétnější obrysy této snahy se dostaly do hledáčku díky novým (později aktualizovaným) patchům Arnda Bergmanna, ukazujícím migrační cestu pro časová systémová volání.

    Současná linuxová systémová volání využívají pro zobrazování času několik různých datových typů od times_t, timeval po timespec a další. Všechny však mají jedno společné: Celočíselnou hodnotu, která počítá vteřiny od roku 1970 (nebo z aktuálního času v případech, kdy je zapotřebí relativní hodnota času). Na 32bitových systémech je počet dán 32bitovým celým číslem se znaménkem, takže je zapotřebí dalších volných bitů, jinak dojde k přetečení a po roce 2038 se čas nebude zobrazovat správně.

    Reprezentace času

    Jednou z možností je použití nově vytvořených 64bitových verzí těchto časových struktur. Ale pokud má dojít k nekompatibilním změnám, bylo by možná vhodné se nejprve šířeji zamyslet. Proto nedávno Thomas Gleixner navrhoval vytvoření nové sady systémových volání (linuxových), které by pracovaly s 64bitovým nanosekundovým čítačem se znaménkem. Ten by zrcadlil ktime_t type (definovaný v include/linux/ktime.h), který se používá pro reprezentaci času v kernelu:

        union ktime {
    	s64	tv64;
        };
        typedef union ktime ktime_t;		/* Kill this */
    

    Komentář "kill this" přidal Andrew Morton v roce 2007, ale nikdo tak ještě neučinil)

    Používat zrcadlené časové hodnoty kernelu také v uživatelském prostoru má něco do sebe, předešlo by se mnoha přepočtům času. Avšak Arnd Bergmann poukázal na několik těžkostí, spojených s tímto přístupem, jednou z nich je ještě složitější přechod. Zásadní chyba se objevuje v tomto seznamu časových systémových volání, který Andy zveřejnil krátce na to: Systémová volání, která pracují s časovými značkami souborů, musí být schopna vyjádřit čas ještě před rokem 1970. Také musí umět vyjádřit širší rozsah časů, než kolik zvládá 64bitový ktime_t. Je tedy nutné použít některou z variant time_t. (Potřeba zobrazovat čas před rokem 1970 vylučuje použití hodnoty bez znaménka pro rozšíření 32bitové hodnoty time_t).

    Z toho vyplývá, že univezální použití časových hodnot v nanosekundách se znaménkem zde není reálné. Rozhodně ne jako prevence nadcházející katastrofy roku 2038. Stále je zde prostor pro zjednodušení. Aktuálně je v plánu využití 64bitové verze struct timespec (nazývané v kernelu jednoduše struct timespec64 - uživatelský prostor uvidí pouze jako struct timespec) pro téměř všechny časové údaje přicházející do nebo z jádra. Různá systémová volání, která používají jiné (starší) časové formáty, mohou být jednoduše emulována v uživatelském prostoru. Takže například volání gettimeofday() (které využívá struct timeval) se změní na volání clock_gettime() předtím, než vstoupí do kernelu. Takto je možné snížit počet různých volání, jejichž kompatibilitu je třeba v kernelu zajistit.

    Takže všechny 32bitové systémy připravené na rok 2038, budou využívat struct timespec64 pro všechny časové hodnoty, které vstupují do jádra. Prozatím zůstává menší problém s dosažením tohoto cíle za co nejmenších škod. Aktuální Arndovo řešení je možné vidět v patch setu, který zahrnuje velký počet kroků, které pomohou bezpečně přiblížit kernel k roku 2038.

    Cesta k bezpečnému systému roku 2038

    Prvním krokem je připravit podporu 32bitových aplikací a přesunout kód kernelu pro řízení času na 64bitový čas. Tyto "vnitřní" práce již nějaký čas probíhají, pozornost vyžaduje interface uživatelského rozhraní, počínaje sadou pravidel, která by převáděla mezi 32bitovým a 64bitovým časem v rozhraní systémového volání. Dobrou zprávou je, že tato pravidla (routines) již existují ve formě "kompatibilních" systémových volání, které využívají 32bitové aplikace běžící na 64bitovém kernelu. Pokud jde o manipulaci s časem, budou v budoucnu 64bitová všechna jádra, takže tyto funkce jsou zapotřebí (až na několik případů jiných typů dat, kdy je zapotřebí rozdílného převedení). Patch tedy zajistí kompatibilitu systémových volání jak pro 32bitové, tak pro 64bitové kernely. Kompatibilní funkce jsou připraveny k použití, ovšem budou dostupné teprve na konci série patchů.

    Dalším krokem je přeměna nativních systémových volání kernelu pro manipulaci s časem na výhradně 64bitové hodnoty. Toho lze docílit pomocí dvou dílčích kroků. Prvním je definování nové sady typů popisujících formát nativních časových hodnot v uživatelském prostoru. Kupříkladu systémová volání, která v současné době akceptují jako parametr struct timespec, budou po změně pracovat s struct__kernel_timespec. Obě struktury jsou téměř totožné, takže jejich záměna nebude mít na kernel žádný vliv. Jestliže bude nastavena konfigurace CONFIG_COMPACT_TIME, bude struct__kernel_timespec vypadat jako timespec64.

    Různé typy __kernel_ se objevují na hranici (boundary) systémových volání, méně za touto hranicí. Místo toho dojde na všech zařízeních k jejich okamžitému převedení na 64bitové. Na 64bitových zařízeních není samozřejmě moc co převádět. Jakmile jsou všechna časová systémová volání převedena, používají interně 64bitové časové hodnoty, a to i v případě, že uživatelský prostor nadále pracuje s 32bitovými časovými hodnotami.

    Posledním krokem je povolení 64bitových časových hodnot na 32bitových systémech bez toho, aby došlo k poškození existujících 32bitových binárek.

    • Nastaví se CONFIG_COMPAT_TIME, což způsobí, že všechny datové struktury __kernel_ přepnou na své 64bitové verze.
    • Všechna existující časová systémová volání se nahradí kompatibilními 32bitovými verzemi. Takže třeba na ARM má systémové volání clock_gettime() číslo 263. Po změně dostane aplikace volající 263 nově compat_sys_clock_gettime(). Pokud jsou správně nastaveny kompatibilní funkce, neměly by si binární aplikace ničeho všimnout.
    • Nativní verze 64bitových systémových volání dostanou nová číselná označení; clock_gettime() se změní v systémové volání 388. Tudíž 64bitové verze těchto volání uvidí pouze nově kompilovaný kód, který je připraven s 64bitovými časovými údaji pracovat.

    To je tak nejvíc, co se dá v kernelu (s tímto problémem) dělat. Existující 32bitové binárky zavolají kompatibilní verze časových systémových volání a budou i nadále fungovat, až do roku 2038.

    Zbývá tedy slušné množství práce, kterou je třeba udělat v uživatelském prostoru. Zjednodušeně lze říct, že C knihovny mohou používat 64bitové datové struktury a vyvolat nové verze příslušných systémových volání. Potom mohou být rekompilovány aplikace pro nové knihovny, možná bude zapotřebí oprav v uživatelském prostoru, poté se nebudou podílet na debaklu roku 2038. V praxi by mohlo být nutné přestavět všechny knihovny a aplikace systému, aby se zajistila ucelená myšlenka o reprezentaci času. C GNU knihovny užívají pro určení verzí symboly, takže je možné je nastavit pro oba časové formáty zároveň. Některé knihovny takovou schopnost nemají. Konverze kompletních distribucí by mohla být zajímavou výzvou v okamžiku, kdy bude v jádře vše hotovo.

    Ukončovací práce

    I v kernelu je stále několik záležitostí, kterým se dosud nikdo nevěnoval. Významným problémem je volání ioctl(), z tisíců podporovaných jádrem jich několik pracuje s hodnotami time_t. Bude třeba je lokalizovat, jedno po druhém opravit, což bude trvat. Souborový systém ext4 ukládá časové značky jako 32bitové hodnoty time_t, i když některé verze formátování je rozšiřují na 34 bitů. Ext3 34bitové časové značky nepodporuje, takže řešením by byl přechod k ext4. NFSv3 má podobný problém a možná, že ho čeká podobný osud. I XFS má problémy, které je třeba řešit. Potíže se souborovým systémem se nevyhýbají ani 64bitovým systémům. V kernelu a uživatelském prostoru navíc zcela jistě číhá ještě celá řada dalších (nepříjemných) překvapení, takže připravit systém na rok 2038 jde ještě daleko za přechod k 64bitovým časovým hodnotám systémových volání. I když začít s nimi je rozhodně dobrý začátek.

    Jakmile se vyřeší zbývající problémy, bude možné aplikovat poslední patch. Volitelným se stane CONFIG_COMPAT_TIME, ponechá 64bitové cesty beze změny a odstraní kompatibilní 32bitová volání. Bude-li tato volba vypnuta, nepodaří se spustit binárky se staršími systémovými voláními. Jde o dobrou metodu, jak otestovat konverze pro rok 2038 nebo nasazení starších systémů, které musí fungovat i po tomto datu. Arnd k tomu dodává:

    V současné době jde o nástroj pro ladění, který by měl pomoci vytvořit distribuci odolnou na rok 2038, ale někdy ve třicátých letech bychom měli tuhle možnost a veškeré řízení kompatibility odstranit docela.

    Doufejme, že bude v budoucnu někdo dávat pozor a nezapomene za dvacet let tento krok provést (v případě velké inspirace by prostě mohli zabít ktime_t). Potom budou určitě vděčni těm vývojářům, kteří obětovali svůj čas problému mnohem dříve, než začal být akutní. My ostatní si prostě budeme muset najít jiný způsob, jak si vydělat na důchod.

    (Díky patří Arndovi Bergmannovi za cenné rady a návrhy k rané verzi článku.)

           

    Hodnocení: 80 %

            š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.7.2015 00:01 HulmihoUkolen@HulmihoUkolen.nl/hu
    Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 5. 2015: Konverze systémových volání pro rok 2038
    ja to mrdam-87 let se urcite nedoziju
    kyknos avatar 1.8.2015 10:00 kyknos | skóre: 18 | blog: Quid novi? | Ranša Rosa
    Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 5. 2015: Konverze systémových volání pro rok 2038
    Plánuje sebevraždu?
    So the Nationalists and the Socialists have the same policy on Brexit. They should get together and form a...
    31.7.2015 04:31 pc2005 | skóre: 34 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 5. 2015: Konverze systémových volání pro rok 2038
    IMO (zajímavý, že to druhý "label" je správně): s/můžeme ponechat štítky se smysluplnými názvy/můžeme ponechat návěští se smysluplnými názvy/
    Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
    31.7.2015 08:45 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 5. 2015: Konverze systémových volání pro rok 2038
    …a jejichž kód někteří lidé rádi nabourávají

    Nemyslím, že tady je "hack" použito ve smyslu "nabourávat". Spíš bych to přeložil: "…kterému jen málo jaderných vývojářů rozumí a které málokoho baví hackovat." Pokud se někomu nelíbí cizácké "hackovat" (nebo má příliš zažitý mainstreamový význam), tak třeba: "…a se kterým málokoho baví si hrát."

    i když některé verze formátování je rozšiřují na 34 bitů

    Verze formátu, ne formátování.

    31.7.2015 08:47 mikro
    Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 5. 2015: Konverze systémových volání pro rok 2038
    "... that few (if any) kernel developers understand and which code few people enjoy to hack."

    je podla mna chybne prelozeny na:

    "... kterému rozumí jen velmi málo (pokud vůbec nějací) vývojářů kernelu, a jejichž kód někteří lidé rádi nabourávají."

    pretoze aj z kontextu originalnej spravy dalej vyplyva, ze kod sa po jeho upravach stal "maintainable and hackable again", cize ten vyznam predoslej vety je skor, ze malo (ak vobec niekto) tomu kodu rozumie a velmi malo ludi je ochotnych v nom robit zmeny.
    4.8.2015 10:27 Jiří J. | skóre: 34 | blog: Poutník | Brno
    Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 5. 2015: Konverze systémových volání pro rok 2038
    On Tue, May 5, 2015 at 8:17 AM, Al Viro wrote:
    >
    > Something like this_used_to_be_the_beginning_of_loop_body?
    
    No, but at least "loop:" or "repeat:" or something.
    
    That "l:" really looked like a fly shat on my monitor.
    :-D
    Víra je firma si myslela, že něco je pravdivé. LMAO -- “zlehčovat mého osla”
    10.8.2015 21:12 tentononc
    Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 5. 2015: Konverze systémových volání pro rok 2038
    No nevim, co v roce 2038 na ten den naplánovat celozávodní urláb, vypnout servrovnu a všechny pecka a den poté začít zase s dvaatřicetibitovým počítadlem od nuly? Vždyť nemusí běžet všechny mašiny nonstop furt....
    25.8.2015 22:03 Zde
    Rozbalit Rozbalit vše Re: Jaderné noviny - 5. 5. 2015: Konverze systémových volání pro rok 2038
    > clock_gettime() se změní v systémové volání 388

    Navrhuji změnit čísla syscallu z int na long, než bude pozdě.

    Založit nové vláknoNahoru

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