Byla vydána verze 4.0 multiplatformního integrovaného vývojového prostředí (IDE) pro rychlý vývoj aplikaci (RAD) ve Free Pascalu Lazarus (Wikipedie). Přehled novinek v poznámkách k vydání. Využíván je Free Pascal Compiler (FPC) 3.2.2.
Podpora Windows 10 končí 14. října 2025. Připravovaná kampaň Konec desítek (End of 10) může uživatelům pomoci s přechodem na Linux.
Již tuto středu proběhne 50. Virtuální Bastlírna, tedy dle římského číslování L. Bude L značit velikost, tedy více diskutujících než obvykle, či délku, neboť díky svátku lze diskutovat dlouho do noci? Bude i příští Virtuální Bastlírna virtuální nebo reálná? Nejen to se dozvíte, když dorazíte na diskuzní večer o elektronice, softwaru, ale technice obecně, který si můžete představit jako virtuální posezení u piva spojené s učenou
… více »Český statistický úřad rozšiřuje Statistický geoportál o Datový portál GIS s otevřenými geografickými daty. Ten umožňuje stahování datových sad podle potřeb uživatelů i jejich prohlížení v mapě a přináší nové možnosti v oblasti analýzy a využití statistických dat.
Kevin Lin zkouší využívat chytré brýle Mentra při hraní na piano. Vytváří aplikaci AugmentedChords, pomocí které si do brýlí posílá notový zápis (YouTube). Uvnitř brýlí běží AugmentOS (GitHub), tj. open source operační systém pro chytré brýle.
Jarní konference EurOpen.cz 2025 proběhne 26. až 28. května v Brandýse nad Labem. Věnována je programovacím jazykům, vývoji softwaru a programovacím technikám.
Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.
Před 25 lety zaplavil celý svět virus ILOVEYOU. Virus se šířil e-mailem, jenž nesl přílohu s názvem I Love You. Příjemci, zvědavému, kdo se do něj zamiloval, pak program spuštěný otevřením přílohy načetl z adresáře e-mailové adresy a na ně pak „milostný vzkaz“ poslal dál. Škody vznikaly jak zahlcením e-mailových serverů, tak i druhou činností viru, kterou bylo přemazání souborů uložených v napadeném počítači.
Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.
Aktuální verze jádra je 2.6.16.19, vydaná 30. května. Obsahuje jedinou opravu, a to pro únik informací v kódu netfilteru.
Aktuální předverze je 2.6.17-rc5, vydaná 24. května. Nestane-li se nic nepříjemného, bude to poslední předverze před vydáním 2.6.17. Obsahuje slušnou řádku oprav; vizte podrobnosti v dlouhém changelogu.
Po vydání -rc5 si do hlavního jádra našlo cestu několik desítek patchů (vše opravy).
Aktuální -mm strom je 2.6.17-rc5-mm1. Mezi nedávné změny patří zařazení obecné IRQ vrstvy, aktualizovaná verze reiser4, validátor zámků, sada patchů pro přizpůsobivé přednačítání [readahead], nová infrastruktura pro správu jaderných statistik a nové API pro inotify.
Finální verze 2.6.17 se blíží. Další změny interního API jsou (doufejme) nepravděpodobné, takže by následující seznam měl být tentokrát definitivní.
Nová funkce:
int execute_in_process_context(void (*fn)(void *data), void *data, struct execute_work *work);
Tato funkce zařídí, aby byla fn() volána v kontextu procesu (kde může spát). Podle toho, kdy je volána execute_in_process_context(), bude fn() buď spuštěna okamžitě nebo pozdržena pracovní frontou.
Čtyři nové způsoby vytváření mempool:
mempool_t *mempool_create_page_pool(int min_nr, int order); mempool_t *mempool_create_kmalloc_pool(int min_nr, size_t size); mempool_t *mempool_create_kzalloc_pool(int min_nr, size_t size); mempool_t *mempool_create_slab_pool(int min_nr, struct kmem_cache *cache);
První vytvoří pool, který alokuje celé stránky (jejichž počet je určen pomocí order), zatímco druhý a třetí vytvoří pool s kmalloc() a kzalloc(). Čtvrtý je zkratkou pro vytváření slab poolů.
Změnil se prototyp hrtimer_forward():
unsigned long hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval);
Nový parametr now by měl být aktuální čas. Změna umožňuje optimalizaci některých volání. Bylo také odstraněno pole data ze struktury hrtimer.
A jako vždy se podívejte na LWN stránku o API změnách v jádře 2.6, kde najdete kompletní seznam.
Při prohrabávání záplavou patchů z počátku vývojového cyklu 2.6.17 jsem si [Jonathan Corbet] nevšiml jedné zásadní změny API: nové rozhraní pro oznamovače [notifiers]. Oznamovače jsou interním jaderným mechanismem umožňujícím kódu zaregistrovat se, aby byl zpravován o událostech, které ho zajímají. Existují oznamovače pro události týkající se hotplug manipulace s pamětí, změny v pravidlech pro frekvenci procesoru, USB hotplug události, nahrávání a odstraňování modulů, rebooty systému, změny síťových zařízení a mnoho dalších.
V listopadu 2005 jsem psal o navrhované změně API motivované nemožností zamykat řady [chains] oznamovačů. Návrhu se dostalo vlažného přijetí. Mnohé nízkoúrovňové datové struktury v jádře záměrně odmítají provádět jakékoliv zamykání kvůli tomu, že vyšší vrstvy se budou o své zamykání tak jako tak muset postarat. Takže proč by se měly oznamovače lišit? Odpovědí se zdá být to, že na rozdíl od jiných datových struktur bývají oznamovače používány v relativně širokých oblastech jádra, a proto by bylo obtížné používat jakékoliv jiné zamykání než takové, které by bylo navrženo přímo pro ně. Každopádně byl do jádra 2.6.17-rc1 patch začleněn.
Aktuální podoba API definuje tři různé druhy oznamovačů:
Pro jádro 2.6.17 byly všechny řady oznamovačů převedeny na blokovací nebo atomické druhy; surové v hlavním jádře nevyužívá nikdo. Patch neobsahuje žádné doporučení k odstranění surového rozhraní, ale dříve nebo později pravděpodobně přijde někdo, kdo to bude chtít pročistit. Bude tedy asi moudré se surovým oznamovačům vyhýbat; tento text se zabývá zbývajícími dvěma druhy.
Blokovací oznamovače jsou v podstatě jako surové, ale s přidaným rwsem (R/W semafor) pro vzájemné vyloučení. Operace prováděné na blokovacím oznamovači mohou zablokovat i rwsem. Vytvořit je můžete obvyklými dvěma způsoby:
#include <linux/notifier.h> BLOCKING_NOTIFIER_HEAD(my_notifier); struct blocking_notifier_head my_notifier; BLOCKING_INIT_NOTIFIER_HEAD(my_notifier);
Kód, který si přeje "zaháknout" na blokovací oznamovač, by měl nejprve vyplnit strukturu notifier_block:
struct notifier_block { int (*notifier_call)(struct notifier_block *block, unsigned long event, void *data); int priority; /* ... */ };
Pole notifier_call by mělo ukazovat na funkci, která se má zavolat, když se stane něco zajímavého; parametry event a data poskytne kód generující událost. Oznamovače jsou volány podle zvyšující se priority; návratová hodnota posledního volaného oznamovače bude předána zpět kódu, který signalizoval událost. Obyčejně je posledním oznamovačem ten s nejvyšší hodnotou priority, ale další zpracovávání může zastavit kterýkoliv oznamovač tím, že vrátí hodnotu s nastaveným bitem NOTIFIER_STOP_MASK. Kromě tohoto jednoho bitu (aktuálně 0x8000) jsou návratového hodnoty libovolné (alespoň co se týče kódu oznamovačů). Jsou však k dispozici přednastavené hodnoty pro pohodlné: NOTIFY_OK ("zatím dobrý"), NOTIFY_STOP ("všechno šlape, ale nevolat žádné další oznamovače") a NOTIFY_BAD ("přestaň volat oznamovače a zaraž navrhovanou akci).
Jakmile má kód připraven notifier_block, měl by jej zaregistrovat pomocí:
int blocking_notifier_chain_register(struct blocking_notifier_head *chain, struct notifier_block *nb);
Návratová hodnota je zjevně určena k tomu, aby mohl být vrácen chybový stav, pokud registrace selže - ale verze kódu v 2.6.17 selhat nemůže.
Registraci blokovacího oznamovače lze zrušit takto:
int blocking_notifier_chain_unregister(struct blocking_notifier_head *chain, struct notifier_block *nb);
Pokud nebyl daný oznamovač ve skutečnosti registrován, vrátí toto volání -ENOENT.
Kód, který si přeje pro signalizaci události použít řadu blokovacích oznamovačů, může provést toto:
int blocking_notifier_call_chain(struct blocking_notifier_head *chain, unsigned long event, void *data);
Funkce zavolá všechny oznamovače v chain [řada] (pokud jeden z nich nezastaví proces před dokončením) a vrátí hodnotu posledního volaného.
Atomické oznamovače nahrazují rwsem spinlockem; API je velmi podobné:
ATOMIC_NOTIFIER_HEAD(my_notifier); struct atomic_notifier_head my_notifier; ATOMIC_INIT_NOTIFIER_HEAD(my_notifier); int atomic_notifier_chain_register(struct atomic_notifier_head *chain, struct notifier_block *nb); int atomic_notifier_chain_unregister(struct atomic_notifier_head *chain, struct notifier_block *nb); int atomic_notifier_call_chain(struct atomic_notifier_head *chain, unsigned long event, void *data);
Všimněte si, že atomické oznamovače používají stejnou strukturu notifier_block jako oznamovače blokovací. V kódu atomických oznamovačů však nebude nikdy nic spát, a to platí i pro oznamovací funkce volané z atomické řady.
Jak bylo zmíněno výše, všechny řady oznamovačů v jádře byly změněny tak, aby používaly jeden z popsaných druhů; veškerý kód mimo hlavní jádro bude muset být aktualizován obdobně. Vizte vysvětlující text, v němž najdete shrnutí toho, který druh byl přiřazen stávajícím řadám v jádře.
Následující obsah je © KernelTrap
25. kvě, originál
Krátká diskuze porovnávala používání netlinku pro přenos informací mezi jádrem a uživatelskými procesy s debugfs. Tim Bird slyšel o tom, že několik projektů bylo požádáno, aby přešly z debugfs/procfs na netlink, a zeptal se na důvod. Jevgenij Poljakov poukázal na hlavní výhodu: Netlink je v jádře vždy přítomen, takže není nutné vytvářet další závislosti na konkrétním souborovém systému. Manuálová stránka netlinku nabízí další informace:
Netlink se používá pro přenos informací mezi jadernými moduly a uživatelskými procesy. Skládá se ze standardního soketového rozhraní pro procesy a interního API pro moduly.
26. kvě, originál
Wu Fengguang spravuje mimo hlavní jádro sadu patchů implementujících přizpůsobivé přednačítání [adaptive readahead]. Jeden z patchů obsahuje volbu pro Kconfig s následujícím popisem:
Přednačítání je technika, kterou jádro využívá pro zlepšení výkonu při čtení souborů. Má-li jádro důvod se domnívat, že je z určitého souboru čteno sekvenčně, pokusí se načíst bloky ze souboru do paměti předtím, než je bude aplikace vyžadovat. Když přednačítání funguje, zvýší se výkon systému, protože aplikace, která provádí čtení, nebude muset čekat na splnění svých požadavků. Pokud přednačítání selže, bude výsledkem zbytečný I/O a zaplněné stránky paměti, které jsou potřeba pro jiné účely.
Jádro má vlastní přednačítací kód, který je dobře známý a vyladěný. Tato volba zapíná komplexnější a na funkce bohatší implementaci. Snaží se být chytrá a úsporná při zacházení s pamětí. Kvůli velkým rozdílům mezi skutečnými aplikacemi však nemusí vyhovovat každému.
Společně se sadou patchů byly poslány i výkonnostní testy, které ukazují úctyhodné zvýšení výkonu u databáze PostgreSQL, což Andrew Mortona vedlo ke komentáři: Ta čísla vypadají hezky, ale podivuji se nad tím, že když PostgreSQL z přednačítání tolik profituje, proč to nedělá sama - místo spoléhání na schopnost jádra uhodnout, co bude aplikace v budoucnu dělat. Určitě by to dokázala lépe než jádro.
Dostalo se mu odpovědi v tom smyslu, že vývojáři PostgreSQL chtějí svůj kód udržovat portabilní, což by bylo daleko složitější, kdyby pro každý OS implementovali speciální přednačítání. Příznivci patche rovněž poukázali na to, že zlepšení je výrazné - kolem 30 % - a týká se i jiných aplikací než PostgreSQL.
27. kvě, originál
Většina verzí jádra 2.6 má své jméno, které je k vidění pouze v hlavním makefile. Například 2.6.17 byla pojmenována "Lordi Rules" [Lordi válí], 2.6.16 "Sliding Snow Leopard" [klouzající sněžný leopard], 2.6.14 "Affluent Albatross" [zámožný albatros] a 2.6.13 "Woozy Numbat" [opilý mravenečník].
Kyle McMartin nedávno poslal patch, kterým chtěl jména jader zviditelnit, což Linus Torvalds odmítl: Kouzlo těch jmen je částečně dáno tím, že nemají naprosto žádný význam. Můžu si ta jména vycucat z prstu - o nic nepůjde a nikdy je nikdo neuvidí jinde než v jaderných diffech.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej: