Чудният свят на Линукс 2.6
Джоузеф Праневич - jpranevich <на> kniggit.net

Струва ни се сякаш едва вчера ние стартирахме първите си Линукс 2.4 системи, но времената се менят и екипът разработчици на ядрото приближава завършването на ядро 2.6. Този документ е предназначен за общ преглед на характеристиките на предстоящата версия на ядрото, насочен предимно към i386 Линукс. За разлика от предварителните изявления при повечето софтуер със затворен код, всички отличителни черти описани в този документ в момента са налични в 2.6 "тестова" серия ядра. (Въпреки че все още съществува вероятността, някои специфични възможности да бъдат добавени или премахнати преди истинското пускане). Разработката на ядрото в момента е в период на стабилизиране и е спряно добавянето на нови възможности като е много вероятно окончателната версия да не се различава много от това което имаме в момента. А също така имайте предвид, че някои от "новите" възможности на ядрото описани тук могат да бъдат прехвърлени обратно на Линукс 2.4 след първоначалното им появяване в Линукс 2.6, официално или от разпространителите на различните Линукс дистрибуции. Също така съм включил информация за няколко случаи на нови възможности възникнали по време на периода на поддръжка на Линукс 2.4, които съответно ще бъдат отбелязани в текста.

Това което четете в момента е втора редакция на този документ с дата 26.10.2003 г. базиран на 2.6.0-test9 развойно ядро. Ще има и други редакции пускани след завършване на допълнителната работа по ядрото, но този документ няма да бъде "официално" затворен докато не излезе окончателната версия на ядрото. Въпреки че това е втора редакция тя все още може да съдържа грешки и пропуски - ако ги забележите моля да ме уведомите и аз ще се радвам да ги поправя.

Към момента този документ е преведен на шест чужди езика. Моля вижте за повече информация секция "Преводи" най-долу.

Историята дотук...

Проектът на Линукс ядрото бе започнат през 1991 г. от Линус Торвалдс като Миникс-подобна операционна система за неговия 386 компютър. (Линус първоначално е искал да озаглави проекта Фрийкс, но сегашното му име е това което по му приляга с течение на времето). Първото официално пускане на Линукс 1.0 бе през март 1994 г., но то поддържаше само еднопроцесорни i386 машини. Само година по-късно (март 1995 г.) излезе Линукс 1.2 и това бе първата версия, която поддържа различни хардуерни платформи (по-специално: Алфа, Спарк и МИПС), но все-още само еднопроцесорни модели. Линукс 2.0 излезе през юни 1996 г. и също включваше поддръжка на няколко нови архитектури, но преди всичко въведе Линукс в света на многопроцесорните машини (SMP). След версия 2.0, последвалите я важни пускове се забавят (Линукс 2.2 излиза през януари 1999 г. а версия 2.4 през януари 2001 г.), всяко ново издание разширява поддръжката в Линукс на нов хардуер и нови видове системи както и подобрява възможностите за надстройка. (Линукс 2.4 още е забележителна с това, че тя е версията която изведе Линукс в пространството на настолните машини с поддръжка в ядрото на ISA Plug-and-Play, USB, PC Card и др.) Линукс 2.6 се стреми не само да надгражда тези системи, но и да направи още един "голям скок" напред с подобрена поддръжка едновременно както на значително по-големи системи така и на много по-малките такива (PDA и др. подобни устройства.)

Основна хардуерна поддръжка

Едно от най-важните предимства на Линукс базираните операционни системи е тяхната гъвкавост и възможността им за поддръжка на широк спектър от хардуерни платформи. Докато този документ е насочен предимно към употребата на Линукс на PC-базиран хардуер, Линукс 2.6 ядрото направи някои забележителни промени в тази област които заслужават да бъдат отбелязани.

Смаляване -- Линукс за вградени системи

Една от двете фундаментални промени в Линукс 2.6 идва с приемането и добавянето на голяма част от проекта uClinux в ядрото. Проектът uClinux (вероятно произнасян като "you-see-Linux" - Вие виждате Линукс, но по-подходящо изписван с гръцкия символ "мю" - µ) в действителност е проект - Линукс за микроконтролери. Този вариант на Линукс вече беше основен двигател за поддръжката на Линукс на пазара на вградените ОС и неговото включване в официалната версия ще окуражи бъдещото развитие в тази насока. За разлика от "нормалното" прехвърляне на Линукс за други системи с които сме свикнали, прехвълянето му на вградени системи няма всички възможности които ние обикновено свързваме с ядрото поради хардуерни ограничения. Основната разлика е, че тези прехвърляния на кода (ports) са за процесори без MMU. ("memory management unit" - модул за управление на паметта, който прави защитения режим на ОС наистина "защитен"). Въпреки че това са истински многозадачни Линукс системи, те нямат защита на паметта и др. подобни възможности. (Без защита на паметта съществува възможност своеволен процес да чете данните или дори да навреди на другите процеси в системата). Това може да ги направи неизползваеми за многопотребителски системи, но те са прекрасен избор за евтини PDA - персонални цифрови помощници или специализирани устройства. Трудно е да се прехвали тази архитектурна промяна в Линукс 2.6 - всички версии на Линукс досега са производни (макар и косвено) на ограниченията наследени от оригиналната работа на Линус над неговия Интел 80386.

Съществуват няколко нови линии вградени процесори поддържани от Линукс 2.6, включващи Hitachi H8/300 сериите, процесорът NEC v850 и линията процесори за вграждане на Моторола m68k. Продуктите на Моторола са най-добре познати на обикновения Линукс потребител тъй като те са в основата на устройствата Palm Pilot започвайки с първите (Palm 1000) и нагоре чак до Palm III. Други модели с имена като Dragonball и ColdFire са включени в системи и тестовите модели произвеждани от Motorola, Lineo, Arcturus и др. За съжаление поддръжката на други по-стари m68k процесори без MMU (напр. 68000 ползвани в ранните Macintosh) все още не е обхваната от новите версии, но е много вероятно бъдещите "любителски" проекти да се стремят към поддръжка на Линукс над тези и др. древни системи.

Въпреки че не е част от сливането с uClinux (защото тя включва MMU), новата версия на Линукс също включва поддръжка на процесори ETRAX CRIS ("Code Reduced Instruction Set"- набор инструкции с редуциран код) на Axis Communications. (Действителната поддръжка за този процесор се появи като възможност в етапа на поддръжка на ядро 2.4 -- доста след пускането на ядро 2.4.0 -- така че заслужава кратко споменаване). Това е процесор за вграждане предимно за употреба в мрежови хардуер. Свързаната с това поддръжка на вариантите без MMU на тези процесори все още не се допуска в ядрото, но върху тях се работи по външни проекти.

В добавка към чисто хардуерната поддръжка има и няколко други преимущества от обединяването на работата по вградени системи с ядрото. Въпреки че повечето от тези промени са "под капака", промени като напр. възможността да се изгради система изцяло без поддръжка на swap спомага за подобряване устойчивостта на системата като цяло.

Мащабируемост -- NUMA и още...

Втората от най-важните промени в Линукс 2.6 работи в друга насока: да направи Линукс по-привлекателно ядро във все по-големи и по-големи сървъри. (Някои от тези големи сървъри ще бъдат i386 базирани, други не). Голямата промяна тук е новата поддръжка в Линукс на NUMA сървъри. NUMA (или "Non-Uniform Memory Access" - с не-еднороден достъп до паметта) е стъпка отвъд SMP в мулти-процесорния свят и е голям скок напред в ефективността при системи с много процесори. Многопроцесорните системи в употреба в момента бяха проектирани с много от ограниченията на своите еднопроцесорни двойници и по специално с очакването един единствен общ резерв памет да обслужва всички процесори. При много-процесорна система основната пречка пред производителността е изключително високото съревнование между многото процесори за единствената системна шина на паметта. NUMA сървърите заобикалят този проблем чрез въвеждането на идеята, че за даден процесор някои части от паметта са по-близо отколкото други. Един лесен начин (който не е съвсем неправилен технически) да си представим това е, че имаме система изградена от различни карти, всяка със свои процесори, памет, вероятно и др. компоненти (напр. входно-изходни). При много такива карти в една система, тъй като те могат да си комуникират една с друга, очевидно че процесорите ще имат по-бърз достъп до локалната памет (паметта разположена върху същата карта) отколкото до паметта на друга карта. Можете да си представите новата NUMA архитектура като нещо подобно на свързан клъстер на най-ниско хардуерно равнище.

За да поддържа тези нови NUMA машини, Линукс трябва да се адаптира в няколко насоки за да направи новият модел ефикасен. Да започнем с това че бе създаден програмния интерфейс (API) описващ вътрешната топология, който спомага ядрото да разбира връзките на един процесор или дял от паметта с входно-изходните устройства или с други процесори/памет. Изхождайки от това, механизмът за превключване между процесите в Линукс сега има възможност да разбира тези връзки и ще се опита да оптимизира задачите за по-добра употреба на локалните ресурси. Допълнително много NUMA машини са изградени по такъв начин, че те имат "дупки" в линейното адресно пространство "между" възлите. Новото ядро може да се справи с тази непоследователност по подходящ начин. Има и много други вътрешни промени, които бяха направени да позволят на Линукс да подържа тези високопроизводителни машини и това определено е област на растеж за ядрото като цяло. Както и да е, това е област където Линукс се разраства и съзрява много бързо и още много работа остава да бъде свършена за най-ефективната употреба на наличните ресурси. През следващата година можем да очакваме много повече подобрения в поддръжката от страна на Линукс на тези високопроизводителни системи.

Поддръжка на подархитектури

Макар и не чак толкова съществена като предишните две промени, новата версия на ядрото включва също и новата концепция наречена "подархитектура", която разширява досега на Линукс с нови хардуерни устройства. Преди Линукс често правеше подразбиращото се допускане, че типовете процесори и специфичният им хардуер вървят ръка за ръка. Което ще рече, че процесорите наследници на i386 се използват само на PC/AT-производни сървъри. В Линукс 2.4 това предположение бе нарушено за i386 с добавянето на поддръжка за Visual Workstation на SGI - платформа работеща на Интел чип. (Всъщност то бе нарушено много преди това от другите архитектури напр. m68k отдавна поддържат Amiga, Macintosh и др. платформи). Голямата промяна в Линукс 2.6 е, че тази особеност и концепция бе стандартизирана по такъв начин, че всички архитектури могат да се справят с това по сходен и подходящ начин, което позволява по-ясното разграничаване между отделните компоненти.

С тази стандартизация идва и поддръжката на две нови платформи за i386. Първата е Voyager архитектурата на NCR. Това е многопроцесорна SMP система (разработена преди стандартната сега спецификация Intel MP) поддържаща процесори 486-686 и нагоре до 32x конфигурации. Действителния брой продадени конфигурации с тази архитектура е относително малък и не всички машини се поддържат все още (най-старите модели нямат поддръжка). Втората поддържана архитектура е по-широко разпространена PC-9800 платформата разработена от NEC и превърната в (почти) преобладаващата PC платформа в Япония до сравнително скоро. Оригиналните PC-9800 машини били снабдени с процесор 8086 и модела най-накрая еволюирал и съзрял (успоредно с AT-наследниците) докато накрая включат поддръжка на SMP и на процесори от клас Pentium. (Разбира се поддръжката на Линукс е ограничена до 386 или по-добър процесор). Въпреки че е абсолютно непознат в САЩ, версии на продукти на Майкрософт до Уиндоус 95, са прехвърлени да работят на този хардуер. Серията е официално закрита от производителя в полза на "по-стандартните" PC.

Формализирайки поддръжката на Линукс за тези "малко различни" видове хардуер, ще опрости прехвърлянето на ядрото и на други системи, като специализирания хардуер за съхраняване на данни и др. компоненти които използват най-често срещаните типове процесори. За да бъда напълно ясен - човек не трябва да взема това направление твърде на сериозно. Тези подархитектури бяха разделени заради многото системни компоненти от ниско ниво (напр. IRQ рутиране) които са малко или коренно различни. Това е по-различно от напр. пускането на Линукс на X-Box, където почти нищо друго освен драйверите за хардуера и някой др. "приумици" различават системата от една "повсеместна" i386 система. Поддръжката на X-Box няма да бъде подархитектурна.

Свръх-нишки - hyperthreading

Друго голямо хардуерно постижение поддържано от Линукс 2.6 е т.нар. "свръх-нишковост" - hyperthreading. Това е възможност, която в момента е вградена само в съвременните Пентиум 4 процесори но приложима и другаде, позволяваща един физически процесор да се маскира (на хардуерно ниво) като два или повече процесора. Това позволява повишаване на производителността в някои случаи, но също така и добавя разпределителна сложност и други противоречия. Ключът за подобрената поддръжка от ядрото на тази възможност е, че разпределителят на задачите сега знае как да разпознае и оптимизира натоварването на процесора върху двата вида виртуални и реални процесори в машината. В предишните версии на Линукс, бе много вероятно да претоварите един единствен процесор защото не бе възможно да се разпредели товарът като цяло. Едно от забележителните неща на това нововъведение е, че Линукс бе пръв изпреварвайки пазарната крива в поддръжката на тази нова хардуерна възможност напълно прозрачно и смислено. (Уиндоус 2000 сървърите могат да виждат допълнителните псевдо-процесори, но не могат да ги разпознаят като виртуални. Също така се изискват и допълнителни процесорни лицензи за да се възползвате от новите възможности. Едва с излизането Уиндоус ХП Майкрософт напълно поддържа тези възможности.)

Специфичните характеристики на Линукс

Подобрено надграждане

В добавка на дотук описаните общи възможности като NUMA и hyperthreading, Линукс 2.6 предлага и други промени за Интел сървърите на върха на хранителната верига. Преди всичко това е подобрената поддръжка за други нови хардуерни възможности на Интел включително PAE ("Physical Address Extension" - разширение на физическия адрес) което позволява на повечето нови 32 битови x86 системи да имат достъп до 64 Гб. RAM, но в страничен режим. В добавка IRQ балансирането беше значително подобрено при многопроцесорните системи главно чрез подобрения в поддръжката на APIC от Линукс.

В допълнение на поддръжката на нови хардуерни възможности, вътрешните ограничения също бяха свалени където това бе възможно, напр. броят на уникални потребители и групи на една Линукс система бе увеличен от 65 000 на над 4 милиарда (от 16 бита на 32 бита), правейки Линукс много по-практичен при големи файлови сървъри и сървъри за проверка на автентичността. По подобен начин броят на PIDs (Process IDs - ПИД идентификатори на процес) преди превъртането им беше увеличен от 32 000 на 1 милиард, подобрявайки времето за стартиране на приложения при много заетите или продължително работещи системи. Въпреки че максималния брой отворени файлове не бе увеличен, Линукс с ядро 2.6 няма повече да Ви задължава да указвате предварително какъв е лимита, а това число ще се самонастройва. И накрая Линукс 2.6 ще включва подобрена поддръжка в 64-битов режим на блокови устройства които го поддържат, дори и при 32 битовите платформи като i386 напр. Това позволява файлови системи с размер до 16TB на непретенциозен хардуер.

Друго основно подобрение в скалируемостта на Линукс 2.6 е, че самото ядро сега не само поддържа повече видове устройства, но то поддържа и много повече устройства от всеки отделен вид. През всички превъплъщения на Линукс до сега (както е всъщност и при повечето Юникс базирани операционни системи) потребители и приложения работещи в системата комуникират с прикрепения хардуер използвайки номерирани устройства (чийто входни точки "възли" са описани в директория "/dev"). Броят на тези възли беше ограничен до 255 основни "major" устройства (обикновено един тип устройство заема една или повече възлови/входни точки) и още 255 второстепенни "minor" номера на устройства (обикновено това са специфични устройства от определен вид) напр. устройството "/dev/sda2" (втория дял на първия открит SCSI диск), получава основен/"major" номер 8, който е общ за всички SCSI устройства и второстепенен/"minor" номер 2 който указва втория дял на диска. Различните видове устройства си разпределят основните и второстепенните номера различно, затова не може да се определи със сигурност колко точно устройства може да имате на една Линукс система. За нещастие тази система се нарушава опасно при големи системи където е напълно възможно да имате напр. повече от 255 устройства от даден тип в системата. (Помислете си само за големите масиви за съхраняване на информация или за печатането й) Под Линукс 2.6 тези ограничения бяха повдигнати, така че да разрешат 4095 основни/"major" устройства и повече от милион допълнителни устройства за тип. Това увеличение трябва да е повече от достатъчно за поддръжката на системите от висок клас засега.

Интерактивност и отзивчивост

В добавка към простото надграждане и скалируемост друг приоритет на новата версия бе да се направи системата по "отзивчива" т.е. с минимално време на реакция. Това е полезно не само за настолния потребител (който винаги иска да види как нещата реагират по-бързо и своевременно), но също и при повече приложения в реално време където е необходима абсолютна точност за постигане на желания ефект. Въпреки всички тези промени Линукс 2.6 няма да бъде "истинска" реално времева ОС, която има много стриктни изисквания за абсолютно гарантиране, че събитията ще се случват в предвидим порядък, но всеобщата й подобрена "отзивчивост" ще апелира към всички категории Линукс потребители. (Освен това съществуват множество външни проекти които предлагат неофициални "кръпки" - "patches" осигуряващи функционалност на реално-времева ОС (RTOS). Тези проекти биха могли евентуално да станат официални при следващия основен пуск на по-нова версия на ядрото.)

Едно от ключовите подобрения в Линукс 2.6 е това, че ядрото най-накрая е с приоритети (приоритетна многозадачност - preemptible). Във всички предишни версии на Линукс самото ядро не може да бъде прекъсвано по средата на работата си . (При система с множество процесори това е вярно за всеки един от тях поотделно). При Линукс 2.6 ядрото вече може да бъде прекъснато по средата на задача, така че другите приложения могат да продължат изпълнението си дори когато нещо сложно и на много ниско ниво работи във фонов режим. Разбира се все още има моменти, когато ядрото не може да бъде прекъсвано по време на своята работа. В реалността обаче, повечето потребители никога не забелязват тези малки забавяния, които рядко са по-големи от малка част от секундата. Въпреки това много потребители може да забележат подобренията в интерактивното поведение когато тази възможност е включена - напр. неща като взаимодействието с потребителя са "видимо" по-бързи, дори когато системата е значително по-натоварена.

Входно/изходните (В/И) подсистеми на Линукс също претърпяха значителни промени позволяващи им да реагират по-бързо при всякакъв вид натоварване. Тези промени включват изцяло пренаписване на В/И превключвател на задачите, кодът на ядрото който определя кои процеси и кога имат право да четат от устройствата. Новонаписаният слой сега по-добре се справя с подсигуряването на това, че никой процес не остава блокиран, чакайки реда си за прекалено дълго време, докато все още позволява на по-старите оптимизации да работят осигурявайки четенето на данни все пак да става по най-ефикасния начин за прилежащия хардуер.

От страна на приложния софтуер другата промяна, която ще направи Линукс програмите по "отзивчиви" (ако те използват тази възможност) е поддръжката на новите футекси "futexes" (или "Fast User-Space Mutexes" - бързи мутекси в потребителското пространство) Това е начинът по който множество процеси или нишки могат да сериализират и подредят събитията така, че да не се препъват един друг (състояние на "конкурентност"). За разлика от традиционните операции с мутекси които повечето библиотеки работещи с нишки поддържат, тази идея е частично базирана на възможностите на ядрото (но само при разрешаване на спорните случаи), тя също поддържа и настройване на приоритетите които разрешават на приложенията и нишките с по-висок приоритет достъп до спорните ресурси преди всички останали. Разрешавайки на програмата да приоритизира изчакващите задачи, приложенията могат да бъдат направени по-отзивчиви в синхронизирането на критичните области.

В добавка към всичко споменато по-горе, направени са и редица други по-малки промени, които ще подобрят интерактивността и производителността в много случаи. Това включва още премахване на заключването на ядрото т.нар. "Big Kernel Lock" (това са глобални /едрозърнести: non-fine-grained/ заключвания които бяха употребявани в ранните дни на многопроцесорна поддръжка на Линукс), оптимизации на файловата система: предварително четене, отложен запис, обработка на малки файлове и други сходни промени.

Други подобрения

Линукс, както и движението за Отворен Код винаги са били знаменосци на флага за ползата от отворените стандарти. Друга основна промяна във версия 2.6 е, че вътрешната инфраструктура на ядрото за поддръжка на нишки беше пренаписана за да разреши Native POSIX Thread Library (NTPL) (библиотеката за работа с чисти POSIX нишки) да работи върху него. Това може да бъде голямо подобрение в скоростта за Пентиум Про и по-добри процесори при многонишковите приложения за което много от върховите играчи в "корпоративното" пространство настояват. (Всъщност РедХет вече е прехвърлила обратно тази поддръжка в Линукс 2.4 и я включва започвайки с RedHat 9 и Advanced Server 3.0) Тази промяна включва новите идеи в сферата на Линукс нишките включително и при групи от нишки, локалната памет за индивидуални нишки, сигнали в стил POSIX и други промени. Една от основните спънки е, че приложения (като напр. някои версии Java на Sun), които не са написани според спецификациите и разчитащи на стари Линукс-изми ще се провалят при разрешаване на новите възможности. Тъй като ползите превишават много "цената" (а и с толкова много големи играчи в играта), пределно ясно е, че най-важните приложения ще поддържат тези промени много скоро след излизането на новото ядро.

Модулната подсистема и обобщения модел за устройствата

Последователно в съвременните операционни системи подсистемите за работа с устройствата овладяха нови висоти във форсирането им да се справят с безброй вътрешни и външни типове шини и все повече устройства от различни производители. Тогава не бива да ни учудва, че предстоящото обновяване на Линукс ядрото ще включва подобрена поддръжка както в зареждащия модулите софтуер така и във вграденото му разпознаване на хардуера. Тези промени варират от чисто козметични (драйверните модули сега използват разширение ".ko" за "kernel object"-обект на ядрото вместо просто ".o") до пълна преработка на обобщения модел за устройствата. През всички тези промени се набляга на стабилността и по-доброто разбиране и обхващане на ограниченията от предишната версия.

Точно в подсистемата за управление на модулите (за работа с устройствата) са направени няколко основни промени за подобряване стабилността. Процесът за сваляне на модулите беше малко променен за да намалят случаите където има възможност модули все още да бъдат използвани докато се прави опит те да бъдат свалени от паметта, често предизвиквайки срив на системата. За системи които не могат да бъдат излагани на подобен риск сега вече е възможно да бъде забранено свалянето на модули от паметта изцяло. В допълнение, положени са значителни усилия да се стандартизира процеса чрез който модулите определят и обявяват какъв хардуер поддържат. В предишните версии на Линукс модулът трябва да "знае" какви устройства поддържа, но тази информация не бе общодостъпна извън самия модул. Тази промяна ще позволи на софтуера за управление на хардуер като напр. "kudzu" на RedHat да правят смислени предположения дори за хардуер който иначе не биха разпознали. Разбира се в случай, че Вие знаете по-добре от текущата версия на драйвера какво подържа той, все още е възможно да форсирате драйвера да се опита да работи с определено устройство.

Освен зареждането на модули, моделът за работа с устройства също претърпя значителни промени в обновената версия на ядрото. Но, за разлика от зареждача на модули, който просто трябва да се грижи за определяне на ресурсните изисквания на новопоявилия се хардуер, то моделът за работа с устройства е с по-задълбочена концепция, която е отговорна за целия хардуер в системата. Версиите на Линукс от 2.2 и по-ранни имаха съвсем оскъдна поддръжка на обобщения модел за работа с устройствата, предпочитайки вместо това просто да оставят цялото разпознаване на хардуера на модулно ниво. Това работеше добре, но за да използваме всички възможности на съвременния хардуер (особ. ACPI) системата има нужда да знае повече от това какви ресурси използва устройството: има нужда да знае неща като - напр. към коя шина е закачено, какви подустройства има, състояние на захранването, дали може да се пренастрои да използва други ресурси в спорни случаи и дори да знае за устройства чийто модули още не са заредени. Линукс 2.4 разшири тази идея и стана първото издание което уеднакви интерфейсите за PCI, PC Card и ISA Plug-and-Play шини в единна структура на устройствата с общ интерфейс. Линукс 2.6, чрез новата си система обекти на ядрото kernel object ("kobject") subsystem извежда това на едно ново ниво не само разширявайки познанието за всички устройства в системата, но също така и осигурявайки централизиран интерфейс, който не само управлява важни дребни детайли като брой на препратките (reference counting), но и предоставя тази информация чрез нов приложен интерфейс (API), както вътре в ядрото така и навън в потребителското пространство.

Сега, когато има в наличност значителен обем информация за хардуера вътре в ядрото, това позволява на Линукс по-добра поддръжка възможностите на съвременните настолни и преносими компютърни системи, които изискват много по-задълбочено познание за хардуера. Най-очевидното приложение за това е в нарастващото разпространение на т. нар. "hot plug" устройства като PC Cards, USB, Firewire и hot-plug PCI. Въпреки че сега е трудно да се върнем чак толкова назад, Линукс не предлагаше истинска поддръжка за тези устройства преди ядра 2.2. Тъй-като поддръжката на "hot-plug" вече е по-скоро правило а не изключение много е удачно, че нова инфраструктура на устройствата значително елиминира разликите между "hot-plug" и стандартните устройства. След като подсистемата на ядрото не прави директна разлика между устройство открито по време на зареждане от друго открито по-късно, значителна част от инфраструктурата за работа с устройства добавяни по време на изпълнение беше опростена. Другата основна движеща сила на тази наскоро пренаписана подсистема е в подобрената поддръжка на управление на захранването. Новият стандарт за управление на захранването в последните години, наречен ACPI - "Advanced Configuration and Power Interface", първоначално бе поддържан в най-груб вид от предишната версия на ядрото. За разлика от старомодния APM ("Advanced Power Management"), ОС работещи на системи с новия интерфейс са длъжни индивидуално да уведомят всички съвместими устройства че те трябва да преминат в друго състояние (б. пр. на захранването - напр. в режим с понижена консумация). Без централизирано познание за хардуера би било невъзможно ядрото да знае с кои устройства трябва да се съгласуват промените и в какъв ред. Въпреки, че това са само два очевидни примера, разбира се съществуват и други области (напр. проверка и контрол на хардуера) които ще извлекат полза от централизираната картина на света

Последното и вероятно най-очевидно разклонение на новата централизирана инфраструктура е създаването на нова "системна" файлова система (която да обедини 'proc' за процесите, 'devfs' за устройствата и 'devpts' за UNIX98 псевдо-терминалите) наречена 'sysfs'. Тази файлова система (предвидена да бъде монтирана на '/sys') е видимо изображение на дървото на устройствата така както ядрото го вижда (с някои изключения). Това представяне обикновено включва редица известни атрибути на откритите устройства, включително името на устройството, неговите IRQ и DMA ресурси, състояние на захранването и др. подобни. Обаче един аспект на тази промяна може да бъде объркващ в краткосрочен план - много от специфичните употреби на устройства от "/proc/sys" директория може би ще бъдат преместени в тази нова файлова система. Тази промяна (все още) не се прилага последователно, така че може би ще продължи да съществува известен период на настройка.

Поддръжка на системен хардуер

С движението на Линукс напред и навлизането му в светлината на прожекторите, с всяка следваща стъпка новото ядро бе много по-добро от предишното във видовете устройства които може да поддържа както за изгряващите технологии (USB в 2.4) така и за стари "наследствени" технологии (MCA в 2.2). Достигайки до 2.6 обаче, броят основни устройства, които Линукс не поддържа е относително малък. Съществуват едва няколко, ако изобщо ги има, все още неовладени основни дяла от хардуерната вселена на ПК. Поради тази причина повечето (но не всички) подобрения в поддръжката на хардуер на i386 се изразяват в подобряване устойчивостта на системата а не в добавяне на нови възможности.

Вградени устройства

Почти толкова важни колкото процесора са и системните шини, които свързват всичко в едно цяло. Светът на ПК не страда от недостиг на такива шинни технологии, от най-старата ISA (в оригиналния IBM PC) до съвременните външни, серийни и безжични комуникационни шини. Линукс винаги е бил бърз в усвояването на нови шини и устройства, още с навлизането им на потребителския пазар, но значително по-бавен в усвояването на технологии с относително слаба употреба.

Подобренията в поддръжката от страна на Линукс на вградени устройства са разпръснати в широк спектър. Характерен пример за бързото наваксване на Линукс е в областта на поддръжката на старите ISA ("Industry Standard Architecture") Plug-and-Play разширения. Линукс не предлагаше вградена поддръжка на PnP въобще преди версия 2.4. Тази поддръжка бе подобрена в предстоящото ядро включвайки пълна поддръжка на PnP BIOS, база данни с имената на устройствата и др. промени с цел по-добра съвместимост. Съвкупността от всички тези промени прави Линукс сега "истинска" Plug-and-Play ОС и тя може да бъде указана като такава в BIOS на машината. Други системни шини като MCA ("Microchannel Architecture" - микро-канална архитектура) и EISA ("Extended ISA" - разширена ISA) също бяха обхванати от новия модел на устройствата и си създават база данни с имена на устройствата. На съвременния фронт Линукс 2.6 извади на масата редица постепенни подобрения в своята PCI ("Peripheral Component Interconnect" - свързваща периферни компоненти) подсистема включително подобрен Hot-Plug PCI и управление на захранването, поддръжка за множество AGP ("accelerated graphics ports" - Ускорени графични портове -- отделно високоскоростно разширение на PCI шината), и др. промени. И накрая, в добавка към всички "реални" шини, Линукс 2.6. вътрешно добави и идеята за "системна" шина, която е специфична за всяка архитектура и съдържа всички предполагаеми устройства, които очаквате да откриете там. На ПК например това може да включва вградените сериен, паралелен и PS/2 порт -- устройства които съществуват но не се представляват от никоя реална шина в системата. Тази поддръжка може да изисква по-сложна работа (напр. запитване към хардуера) при някой платформи, но обикновено това е само обвивка осигуряваща обработката по стандартен начин на всички устройства от новия драйверен модел.

Външни устройства

Въпреки че е вярно, че по-старите видове шини за управление на вградените устройства нямат много нови възможности на този етап на разработка, това не може да се каже за новите външни устройства. Вероятно най-важната промяна в тази сфера е новата поддръжка на USB 2.0 устройства. Тези устройства, общо обозначавани като "високо-скоростни" USB устройства, поддържащи скорости на обмен до 480 мегабита в секунда, сравнено с 12 mbit/sec на сегашните USB. Сродният нов стандарт USB On-the-Go (или USB OTG), (point-to-point) от точка-до-точка вариант на USB протокола за свързване на устройства директно едно с друго (напр. да свържем цифрова камера към принтер без да имаме ПК по средата), не се поддържа в Линукс 2.6. (Кръпки за тази възможност съществуват, но все още не са се влели в официалната версия). Допълнително към поддръжката на тези устройства, бе ревизиран начинът по който те се изброяват вътрешно, така че вече е възможно да имаме много повече устройства от един тип и всички те да бъдат достъпни под Линукс. В добавка към големите промени имаме и едно наблягане в този цикъл на разработка върху опростяване, стабилност и съвместимост, които ще подобрят поддръжката на USB устройствата за всички Линукс потребители.

От друга страна, Линукс 2.6 за пръв път включва поддръжка, позволяваща Линукс машина да бъде USB устройство вместо USB host. Това ще позволи напр. вашият PDA под Линукс да бъде включен във вашия ПК и те да си комуникират използвайки подходящия протокол. Много от тази поддръжка е нова, но това е важна насока за Линукс при вградените устройства.

Безжични устройства

Безжичната технология постигна видим напредък в последните няколко години. Често ни се струва, че кабелите (освен захранващите... може-би?) ще останат в миналото през следващите няколко години. Безжичните устройства обхващат както мрежови устройства (най-широко разпространени в момента) така и устройства с обща употреба като PDA и др.

В сферата на безжичните мрежи, устройствата могат да бъдат разделени на такива с дълъг обхват (напр. AX.25 устройства за аматьори радиолюбители) и с къс-обхват (обикновено 802.11, но съществуват и някои по-стари протоколи). Поддръжката и на двата вида бе отличителна черта на Линукс още от ранните му дни (версия 1.2) и двете подсистеми бяха обновени при разработването на 2.6. Най-мащабната промяна тук е, че основните компоненти на късо-обхватната система за различните видове поддържани карти и протоколи се вля в единната "безжична" подсистема и програмен интерфейс (API). Това сливане разрешава ред дребни несъвместимости в начина по който се обработваха устройствата и укрепва поддръжката от Линукс на подсистемата, създавайки общ набор потребителски инструменти, които да работят с всички поддържани устройства. Освен обикновената стандартизация, Линукс 2.6 въвежда редица общи подобрения включващи подобрена способност за известяване в случаи на промяна в състоянието (напр. когато устройството е в т.нар. "блуждаещо състояние -"roaming" state) и промяна в TCP позволяваща по-добра обработка на периодичните времезакъснения които се срещат при безжичните устройства. Поради натиска за по-добра поддръжка на безжичните устройства под Линукс 2.4, много от тези промени вече ги има в текущото ядро.

При безжичните устройства с общо приложение има сходни подобрения. IrDA (инфрачервения протокол кръстен на Infrared Data Associates групата) има някои подобрения след последната му главна версия като управление на захранването и интеграция в новия драйверен модел на ядрото. Истинският напредък бе направен в обезпечаването поддръжка на Bluetooth устройства в Линукс. Bluetooth е нов безжичен протокол, проектиран да е късо-обхватен и с ниска мощност, но без да има ограничения хоризонт на действие на IrDA. Bluetooth като протокол е проектиран да достига "навсякъде" и бе реализиран в устройства като PDA, клетъчни телефони, печатащи устройства и по странни неща като автомобилно оборудване. Протоколът се състои от два различни типа връзки за обмен на данни: SCO - "Synchronous Connection Oriented" - Ориентиран към Синхронни Връзки, подходящ за аудио приложения и L2CAP, or "Logical Link Control and Adaptation Protocol" - Протокол за Логическо Управление на Връзката и Адаптация (ПЛУВА), за по-здрави връзки поддържащи пре-предаване и др. L2CAP протокола от своя страна поддържа разнообразни под-протоколи (включващи RFCOMM за работа в мрежа тип от точка-до-точка/ "point-to-point" и BNEP за Етернет). Поддръжката в Линукс за нещата които Bluetooth може, продължава да расте и ние можем да очакваме това да съзрее значително щом още нови устройства попаднат в ръцете на потребителите. Трябва да отбележим, че първоначалната поддръжка на Bluetooth беше вградена в по-късните издания на 2.4 ядрото.

Поддръжка на блоковите устройства

Шини за съхранение на данни

Посветените шини за съхраняване на данни, като IDE/ATA ("Integrated Drive Electronics/Advanced Technology Attachment") и SCSI ("Small Computer System Interface"), също получиха по-основно обновяване при 2.6. Най-главните промени са обединени около IDE подсистемата, която бе пренаписвана (и пренаписвана отново) при разработката на новото ядро, разрешавайки много проблеми с надграждането и други ограничения. Например IDE CD/RW - компакт диск записващите устройства могат да пишат директно чрез IDE драйвера, една много по-изчистена от преди реализация. (Преди беше задължително да се използва специален емулиращ SCSI драйвер, което бе объркващо и често трудно). В допълнение бе добавена нова поддръжка за високо-скоростни Серийни ATA (S-ATA) устройства, които имат скорост на обмен надхвърляща 150 MB/sec. Откъм SCSI също бяха направени множество малки промени разпръснати из системата както за разширена поддръжка така и за надграждане. Характерно подобрение за по-старите системи е, че Линукс вече поддържа SCSI-2 многопистови устройства които имат повече от 2 LUN на устройство. (б. пр. LUN -Logical Unit Number - логически номера на устройство)(SCSI-2 е по-нова версия на стандарта SCSI създаден около 1994 г.). Друга важна промяна е тази, че Линукс вече може да прибягва до пробване за смяна на носителя подобно на Майкрософт Уиндоус, за по-добра съвместимост с устройства, които не следват напълно спецификацията. Когато тези технологии се стабилизират с течение на времето, същото ще се случи и с тяхната поддръжка от страна на Линукс.

Въпреки, че не е шина за съхраняване на данни, Линукс включва поддръжка за директен достъп и до BIOS на новите машини т.нар. EDD ("Enhanced Disk Device") BIOS за да определи как сървърът вижда своите собствени устройства. EDD BIOS съдържа информация за всички шини за обмен на данни закачени към системата които BIOS разпознава (включително IDE и SCSI). В допълнение към събирането на конфигурационна и др. информация от закачените устройства, това предоставя и някои други преимущества. Например този нов интерфейс позволява Линукс да знае от кои дискови устройства се е заредила системата, особено полезно при новите системи, където често това не е очевидно. Това разрешава интелигентните инсталационни програми да вземат предвид тази информация, опитвайки се да определят къде да поставят програмата за начално зареждане на Линукс напр. (т.нар. boot loader).

Освен всички тези промени трябва отново да наблегнем и на факта, че всички видове шини (хардуерни, безжични и за съхраняване на данни) се интегрираха в новата подсистема на модела за работа с устройствата в Линукс. В някой случаи промените са чисто козметични. В други те са по-значими (в някои случаи напр. даже логиката за (реда на) откриване на устройствата трябваше да се променя).

Файлови системи

Най-очевидната употреба на блоково устройство в Линукс (или друга) система е чрез създаване на файлова система за него, а поддръжката на файлови системи на Линукс бе значително подобрена след Линукс 2.4 в редица отношения. Ключови сред тези промени са поддръжката на разширени атрибути и контрол за достъп в стил POSIX.

Работейки със строго конвенционалните Линукс файлови системи втората (и третата) разширени ("ext2" и "ext3") файлови системи са системите, които най-често се асоциират с базовата Линукс система. (ReiserFS е третата най-разпространена възможност.) Тъй като това са файловите системи който вълнуват най-много потребителите, съответно те са с най-много подобрения в разработката на Линукс 2.6. Основна сред тези промени е поддръжката на "разширени атрибути" или мета-данни, които могат да се вграждат в самата файлова система за специфичен файл. Някои от тези разширени атрибути ще се ползват от системата и ще бъдат четени и писани само от администратора "root". Много други операционни системи напр. Windows и MacOS вече се възползват от подобен род атрибути. За жалост UNIX и производните й операционни системи обикновено не предоставят добра поддръжка за тези атрибути и много потребителски инструменти (като 'tar' напр.) ще трябва да бъдат модернизирани за да могат да записват и възстановяват тази допълнителна информация. Първото истинско приложение на новата подсистема с разширени атрибути е в реализацията на (access control lists - ACLs) списъци за контрол на достъпa в стил POSIX, едно разширено подмножество на стандартните за Юникс права за достъп, които позволяват по фин контрол. В допълнение към тези промени в ext3 са направени и няколко по-малки: времето за съхраняване на журнала на файловата система вече може да бъде настройвано, така че то да бъде по-подходящо за потребителите на преносими машини (на които може да им се наложи да развъртят диска, ако той е в режим за пестене на енергия), подразбиращите се настройки за монтиране на устройствата вече също могат да бъдат съхранени във файловата система (така, че да не се налага да се предават по време на монтиране на устройствата) и вече може да отбележите директория като "индексирана" за да ускорите търсенето на файлове в нея.

Извън тези промени, Линукс направи и редица подобрения отвън и вътре във файловата система с цел подобряване съвместимостта с преобладаващите операционни системи за ПК. Да започнем с това, че Линукс 2.6 вече поддържа управлението на логически дискове под Уиндоус (тъй нар. "Динамични дискове"). Това е нова схема за разпределяне на таблицата на дяловете на диск, която Уиндоус 2000 или по-нови възприеха с цел по-лесно създаване и преоразмеряване на множество дялове. (Разбира се слабо вероятно е, че Линукс системите ще използват скоро тази схема при нови инсталации.) Линукс 2.6 предоставя и подобрена (и пренаписана) поддръжка за файловата система NTFS, като вече е възможно да се монтира NTFS дял за четене/запис. (Поддръжката на запис все още е експериментална и постепенно подобрявана, като може да бъде или да не бъде включена при окончателния пуск.) И накрая, поддръжката под Линукс на FAT12 (файловата система на ДОС използвана при много стари системи и при работа с дискети) бе подобрена за да се заобиколят грешките при някои MP3 плейъри които ползват този формат. Макар и не толкова преобладаваща на пазара, Линукс също така предлага и подобрена съвместимост с ОС/2, чрез добавяне на поддръжка на разширени атрибути за HPFS файловата система. Както и при предишните издания, новите допълнения на Линукс 2.6 демонстрират важността на разбирателството с другите и укрепва позицията на Линукс като "швейцарско джобно ножче" сред операционните системи.

В допълнение към тези изменения, има още редица по-разхвърляни промени в поддръжката на файлови системи от Линукс. Поддръжката на квоти бе пренаписана за да позволява поддръжката на по-голям брой потребители в системата. Индивидуалните директории вече могат да бъдат отбелязвани като синхронни, така че всички промени в тях (допълнителни файлове и т.н.) ще бъдат атомарни. (Това е най-полезно при системи за ел. поща и бази данни разпределени в директории, в добавка към подобрената им възможност за възстановяване при срив на диска.) Прозрачното компресиране (уникално Линукс разширение) бе добавено към ISO9660 файловата система (която се използва при CD-ROM устройства.) И накрая новата разположена в паметта файлова система ("hugetlbfs") бе създадена изключително за по-добрата поддръжка на бази данни разположени в споделена памет.

Поддръжка на вход/изход

От "външната" страна на всяка една компютърна система са входните и изходните устройства, частите които почти никога не изглеждат чак толкова важни, колкото в действителност са. Те включват очевидни неща като мишки, клавиатури, звукови и видео карти и не дотам очевидни неща като джойстици и пр. Много от потребителските подсистеми в Линукс бяха разширени в периода на разработка на 2.6, но поддръжката на повечето обикновени устройства бе вече напълно развита. До голяма степен подобренията за тези устройства произтичат директно от подобрената поддръжка от страна на ядрото на външните шини, такива като Bluetooth безжични клавиатури и подобни. Това обаче са само част от сферите на мащабни подобрения в Линукс.

Устройства за връзка с потребителя

Една основна вътрешна промяна в Линукс 2.6 е преработката на по-голяма част от слоя за връзка с потребителя. Той е в центъра на потребителския опит с Линукс системата включващ: видео изход, мишки и клавиатури. В новата версия на ядрото този слой е преработен и разделен на модули повече от всякога преди. Сега е възможно да се създаде "обезглавена" Линукс система без включена каквато и да е поддръжка за монитор и каквото и да е друго В/И устройство. Основната полза от този модулен принцип може да бъде при разработчиците на вградени системи, създаващи устройства, които могат да бъдат администрирани само по мрежата или през сериен интерфейс, но крайните потребители се възползват от това, че много от основните допускания за устройствата и архитектурите са на модулен принцип. Например: преди винаги се приемаше, че ако имате ПК то имате нужда от поддръжка на стандартния АТ (i8042) клавиатурен контролер - новата версия на Линукс премахва това изискване, така че ненужния код може да бъде държан настрана от по-нестандартните системи.

Поддръжката на обработката на изхода към монитора в Линукс също претърпя ред промени, въпреки че повечето от тях са полезни само в конфигурации използващи подсистемата на вградения конзолен кадрови буфер на ядрото. (Повечето Линукс системи базирани на Интел не са конфигурирани по този начин, но това не е така за много други архитектури.) По мое лично мнение най-характерната особеност е, че емблемата при зареждане (един сладък пингвин, ако никога не сте го виждали) вече поддържа разделителна способност до 24 бита за пиксел. Освен това другите нови възможности на конзолата включват промяна на размера и въртене (за PDA и подобни) и разширена поддръжка за ускорение на повече хардуер. И накрая, Линукс вече включва поддръжка в ядрото на запитвания към VESA ("Video Electronics Standard Association" - Асоциация за стандартизиране на видео електроника) монитори за информация за възможностите на устройството, въпреки че XFree86 и повечето дистрибуции вече покриват този аспект в потребителското пространство.

В добавка към големите промени, Линукс включва още ред по-малки промени при контактуване с потребителя. Напр. вече се поддържат екраните реагиращи на допир (touch screens). Драйверите за мишка и клавиатура също бяха обновени и стандартизирани, така че да експортират един единствен възел/модул за устройство(то) (напр. "/dev/input/mouse0") независимо от прилежащия хардуер или протокол. По-особените мишки (напр. тези с няколко колелца за превъртане) вече също се поддържат. Разпределението (съответствията) на клавишите от клавиатурата за ПК също бе преработено да следва Уиндоус "стандарта" за разширени клавиши. Поддръжката на джойстик също бе подобрена благодарение не само на добавянето на много нови драйвери (вкл. игровата подложка на X Box), но също и включването на нови възможности като усилена обратна връзка (force-feedback). И последно (но не по важност), новата версия също включва поддръжка за брайловия четец на Таймън Вояджър (Tieman Voyager braille TTY device) позволяващ на слепи потребители по-добър достъп до Линукс. (Тази възможност е толкова важна, че тя вече е прехвърлена обратно на Линукс 2.4).

Като допълнителна бележка, Линукс също промени и интерфейса за "системни заявки" с цел по-добра поддръжка на системи без локална клавиатура. Интерфейсът за системно запитване ("sysrq") е метод за системните администратори на локалната конзола да получат информация за тестване и настройка (debugging information), да рестартират системата принудително, да де- и ре- монтират файлови системи само за четене, и да правят и др. фокуси. От Линукс 2.6 насам се поддържа и напълно "обезглавена" система, сега вече е възможно да предизвиквате тези събития използвайки /proc файловата система. (Разбира се, ако системата Ви зависне а Вие искате да я накарате да върши работа, това няма да Ви бъде от особена полза).

Аудио и мултимедия

Една от най-дългоочакваните нови възможности на Линукс 2.6 за настолните потребители е включването на ALSA ("Advanced Linux Sound Architecture") вместо старата звукова система. По-старата система позната като OSS или "Open Sound System" служи добре на Линукс още от най-ранните му дни, но имаше много архитектурни ограничения. Първото голямо подобрение в системата е, че тя е проектирана от самото начало да бъде SMP и нишково обезопасена, поправяща проблемите с много от старите драйвери, там където те не биха работили правилно извън очакваната "настолна-значи-еднопроцесорна" парадигма. По-важното е, че драйверите са проектирани да бъдат модулни от самото начало (потребителите на по-стари версии Линукс ще си спомнят, че този модулен принцип бе вграден в звуковата система още от Линукс 2.2 насам) и това позволява подобрена поддръжка на системи с няколко звукови карти, включително карти от различен тип. Въпреки вътрешната й красота, системата няма да е голямо подобрение за крайния-потребител ако не включва някои привлекателни и крещящи нови възможности, а новата звукова система има доста такива. Ключови сред тях са поддръжката на нов хардуер (включително USB аудио и MIDI устройства), двупосочни (full-duplex) запис и възпроизвеждане, хардуерно и непрекъснато миксиране, поддръжка на "смесващи" звукови устройства и др. подобни. Независимо дали сте аудиофил или просто обичате да слушате MP3-ки, подобрената поддръжка за звука в Линукс е една стъпка напред в правилната посока.

Освен обикновено аудио, това което потребителите искат днес е поддръжката на наистина разнороден хардуер като уеб камери, радио и ТВ адаптори и цифрови видео рекордери. И в трите случая поддръжката в Линукс бе подобрена в 2.6. Докато Линукс има поддръжка (в по-голяма или по-малка степен) за радио карти от доста отдавна, то поддръжката на ТВ тунери и видео камери бе добавен през последните една-две основни версии. Тази подсистема известна като (Видео-3а-Линукс) Video4Linux (V4L) бе основно подобрена в етапа на разработка на новата версия на ядрото включващо разчистване на програмния й интерфейс (API) и поддръжка на повече функционални възможности на картите. Новия програмен интерфейс не е съвместим със стария и приложенията които все още го поддържат трябва да бъдат обновени заедно с ядрото. В съвсем друга насока Линукс 2.6 включва вградена поддръжка на хардуер за цифрово видео-разпръскване (Digital Video Broadcasting -DVB). Такъв тип хардуер, често срещан при конфигурации от висок клас може да бъде използван за да превърне Линукс сървър в Тиво-подобно устройство (Tivo-like device), чрез използване на подходящия софтуер.

Софтуерни подобрения

Работа в мрежа

Върховата мрежова инфраструктура на Линукс винаги е била едно от основните му предимства. Линукс като ОС вече поддържа повечето от преобладаващите мрежови протоколи включително TCP/IP (v4 и v6), AppleTalk, IPX и др. (Единствения неподдържан такъв който ми идва наум е старомодният и заплетен NetBEUI протокол на IBM/Microsoft). Както много от промените в другите подсистеми, повечето промени в мрежовия хардуер в Линукс 2.6 са "под капака" и не са толкова очевидни. Това включва промените на ниско ниво с цел възползване от новия модел за работа на устройствата и обновяване на много от драйверите на устройства. Напр. Линукс вече включва отделен интерфейс MII (Media Independent Interface или IEEE 802.3u), подсистема която се ползва от редица драйвери на мрежови устройства. Тази нова подсистема е заместител в многото случаи когато всеки драйвер обработваше поддръжката на MII по малко по-различен начин, с цената на доста повтарящ се код и усилия. Другите промени включват основно обновяване на ISDN и т.п.

От страна на софтуера, една от най-големите промени е поддръжката в Линукс на IPsec протоколи. IPsec или IP Security е набор протоколи за IPv4 ("нормалния" IP) и IPv6 които позволяват криптографска сигурност на ниво мрежови протокол. А след като сигурността е на протоколно ниво, приложенията не е нужно да бъдат изрично запознати с това. Това е подобно на SSL и другите тунелизиращи/сигурни протоколи, но на много по-ниско ниво. Поддържаното в момента в ядрото криптиране включва различни разновидности на SHA ("secure hash algorithm"), DES ("data encryption standard") и др.

Още по протоколната част, Линукс подобри своята поддръжка за мрежи с множествено разпръскване (multicast networks). Това са мрежи, в които един единствен изпратен пакет е предназначен да бъде получен от множество компютри. (В сравнение с традиционните мрежи тип точка-до-точка, където връзката винаги е едно към едно). Основно тази функционалност се използва от системи за обмен на съобщения (напр. Tibco) и аудио/видео конферентен софтуер. Линукс 2.6 подобри това, чрез поддръжката на новите SSM (Source Specific Multicast) протоколи, включително MLDv2 (Multicast Listener Discovery) и IGMPv3 (Internet Group Messaging Protocol.) Това са стандартни протоколи поддържани от повечето производители на хардуер от висок клас, такива като Cisco.

Линукс 2.6 също така извади и отделен LLC стек. Протоколът LLC -Logical Link Control (IEEE 802.2) е протокол на ниско ниво работещ под няколко мрежови протокола от високо ниво, като NetBeui на Майкрософт, IPX и AppleTalk. Като част от тази промяна, драйверите за IPX, AppleTalk, и Token Ring бяха пренаписани за да се възползват от предимствата на новата обща подсистема. В допълнение, от външен източник бе сглобен работещ NetBEUI стек и остава да се види само дали той ще бъде интегриран в готовото ядро.

В допълнение към тези бяха направени и множество по-малки промени. IPv6 претърпя някой основни промени и вече може да работи с мрежи Token Ring. Поддръжката в Линукс на NAT/маскиране бе разширена за по-добра обработка на протоколи изискващи множество връзки (H.323, PPTP, и т.н.) От гледната точка на Линукс-като-маршрутизатор, поддръжката за конфигуриране на VLAN под Линукс вече не е "експериментална".

Мрежови файлови системи

Опираща се на здравата поддръжка на мрежови протоколи в Линукс е и еднакво добрата поддръжка на мрежови файлови системи. Монтирането (понякога и експортирането) на мрежова файлова система е една от редките мрежови операции на високо ниво, които ядрото извършва директно. (Другата най-очевидна, "мрежовото блоково устройство", не претърпя много промени в 2.6 и обикновено се употребява в специализирани приложения, където обикновено бива използвано подобно на обикновена файлова система.) Всички други мрежови операции са прехвърлени по взаимно съгласие в потребителската сфера и извън областта на разработчиците на ядрото.

В света на Линукс и UNIX-клонингите, най-често срещаната от мрежовите файлови системи е уместно именувана Network File System или NFS. NFS е сложен протокол за обмен на файлове, с дълбоки корени в UNIX (и по-специално в прекрасната му реализация в Solaris на Sun). Основният транспортен протокол може да използва всеки един от TCP или UDP, но също така са му необходими няколко допълнителни протокола, всеки от които работи върху отделен RPC ("remote procedure call" - за извикване на отдалечена функция) протокол. Те включват отделен протокол за "монтиране", за проверка за автентичност и NLM ("network lock manager") за заключване на файлове. (Обикновено реализацията му е също здраво свързана с други общи RPC-базирани протоколи, включително NIS-- "network information service"-- за проверка за автентичност. NIS и неговите наследници не са често използвани за проверка на автентичност в Линукс машини поради неговата несигурност). Може би именно поради тази му сложност NFS не бе широко възприет като "интернет" протокол.

В Линукс 2.6, тази основна файлова система претърпя много промени и подобрения. Най-голямо от които е експерименталната поддръжка на новата и още не възприета широко версия на NFSv4 протокола в двете му реализации - клиентска и сървърна. (Предишните версии на Линукс включваха поддръжка само за версии 2 и 3 на протокола). Новата версия поддържа по-сигурна и по-добра автентичност (с криптография), по-интелигентно заключване, поддръжка на псевдо-файлови системи и др. промени. Не всички нови възможности на NFSv4 са реализирани в Линукс, но поддръжката е относително стабилна и може да се ползва за някои представителни приложения. В допълнение, реализацията на NFS сървър под Линукс бе подобрена за да бъде по-разширяема (до 64 пъти повече потребители едновременно и по-големи опашки за заявки), да бъде по-завършена (чрез поддръжка на услуги и по TCP, в допълнение към UDP), да бъде по-устойчива (отделните драйвери на файловата система могат да нагласят начина по който файловете на тези системи се експортират, така че по-добре да отговарят на техните особености) и да бъде по-лесно поддържана (чрез управление под новата 'nfsd' файлова система вместо чрез системни изисквания). Освен това има и много други промени "под капака", в това число разделяне на lockd и nfsd, поддръжка на нулево-копиране по мрежата върху поддържаните интерфейси. NFS освен това вече е по-лесно да бъде подсигурена чрез разрешаване номерата на lockd портовете на ядрото да бъдат присвоявани от администратора. Клиентската част на NFS също се възползва от ред подобрения в реализацията на прилежащия RPC протокол включващи кешираща инфраструктура, контрол на връзката по UDP и др. подобрения за TCP. Поддръжката под Линукс на NFS-споделени дялове като коренна (root) файлова система (за бездискови системи) също бе подобрена, като ядрото вече поддържа NFS по TCP за тази цел.

В допълнение към подобряване поддръжката за мрежовите файлови системи Юникс-стил, Линукс 2.6 предоставя много подобрения и при мрежовите файловите системи в Уиндоус-стил. Стандартната файлова система за споделяне на ресурси при Уиндоус сървъри (също както и при ОС/2 и др. операционни системи) се базира на SMB ("server message block") протокола и ядрото на Линукс има отлична клиентска поддръжка на SMB протокола от доста версии насам. Уиндоус 2000 обаче стандартизира върху подобрено подмножество от SMB протокола, познато като CIFS ("common internet filesystem.") Намерението на това основно обновление бе да рационализира и усъвършенства някои аспекти на SMB които по онова време бяха се превърнали в пълна каша. (Протоколът не е точно дефиниран и често надстройван дотам, че дори има случаи където Win95/98/ME версията му е несъвместима с WinNT/Win2k версията.) CIFS продължи в тази насока и добави поддръжка на Уникод, подобрено заключване на файлове, твърди връзки, премахна и последните следи от NetBIOS зависимостите и добави няколко други възможности за Уиндоус потребителите. Тъй-като Линукс потребителите не обичат да бъдат държани за дълго на тъмно, Линукс 2.6 вече включва напълно пренаписана поддръжка за монтиране на CIFS файлови системи. Линукс 2.6 вече включва поддръжка и за SMB-UNIX разширенията на SMB и CIFS протоколите, което позволява на Линукс да има достъп до не-Уиндоус файлови типове (като възли на устройства и символични връзки) на SMB сървъри които го поддържат (напр. Samba). Макар и не чак толкова често срещани днес, Линукс не е забравил напълно и за Novell NetWare потребителите. Линукс 2.6 вече позволява Линукс клиенти да монтират максималния брой от 256 споделени връзки на NetWare дял използвайки вградения си NCP ("NetWare Core Protocol") драйвер на файловата система.

Линукс 2.6 още включва и подобрена поддръжка за сравнително новата област на разпределените мрежови файлови системи, където файловете на един логически дял могат да бъдат разпръснати върху множество мрежови възли. В добавка към файловата система CODA въведена с Линукс 2.4, Линукс вече включва някаква поддръжка и за две други разпределени файлови системи: AFS и InterMezzo. AFS - Andrew filesystem (именувана така защото бе разработена първоначално в CMU - Carnegie Mellon's Project Andrew б. пр.), в момента е много ограничена и извършва операции само за четене. (По-пълна версия на AFS с повече възможности е налична извън ядрото.) Втората нова файлова система InterMezzo (също разработена от CMU) също се поддържа за пръв път от Линукс 2.6, като тя позволява по-съвременни възможности като отделяне (disconnect) (така че да можете да работите над локални /кеширани/ копия на данните) и е подходяща за критични приложения които трябва да гарантират че хранилището за данни им е винаги на разположение т.е. то никога не е недостъпно (или подправено докато не работи). Освен това има и приложения които поддържат данните синхронизирани между множество компютри, като преносими или PDA и настолния компютър. Много от проектите предлагащи поддръжка на тези нови видове файлови системи първоначално са разработени под Линукс, поставяйки го доста напред от другите в поддръжката на тези нови възможности.

Разнообразни възможности

Сигурност

Друга от големите промени в Линукс 2.6 която не получава достатъчно внимание е голямото изобилие от промени засягащи сигурността. Най-основна сред които е, че съвкупността подобрения на сигурността базирана в ядрото (правомощията на свръх-потребителя/администратора в Юникс-подобна операционна система) бе изнесена на външни модули за да стане само един от възможните алтернативни модули за сигурност. (В момента обаче, единствения предлаган модел за сигурност е подразбиращият се и пример как да си направите свои). Като част от тази промяна всички части на ядрото бяха обновени да използват "възможностите" като основа за по-фин контрол на потребителския достъп, за разлика от старата система със "свръх-потребителя". Почти всички Линукс системи ще продължат да имат "свръх-потребител" ("root"), който има пълен достъп, но позволява и да бъдат създадени Линукс-подобни системи които не правят такова основно допускане. Друга промяна в сигурността е че двоичните модули (напр. драйверите пускани от производителите на хардуер) повече не могат да "презареждат" ("overload") системни извиквания (да ги заместват - б.пр.) със свои собствени и вече не могат да виждат и променят таблицата на системните извиквания (на функции от ядрото). Това значително ограничава размера на достъп до ядрото който модулите с не-отворен изходен код имат и вероятно запушва и някои правни вратички в ГПЛ (GPL). Последната промяна донякъде свързана със сигурността е, че Линукс с новото ядро вече има възможността да ползва хардуерни генератори на случайни числа (като тези вградени в някои от новите процесори), отколкото да разчита на (сравнително добрите) базирани на ентропиен принцип случайни хардуерни флуктуации.

Виртуализиране на Линукс

Една от най-интересните нови възможности в Линукс 2.6 е включването на архитектура за работа в "потребителски-режим". Това по-същество е прехвърляне/port (също както и при различна хардуерна архитектура) на Линукс към самият себе си, позволяващо стартиране на напълно виртуализирано Линукс-върху-Линукс обкръжение. Новото копие на Линукс се стартира като нормално приложение. "Вътре" в приложението, можете да конфигурирате фиктивни мрежови интерфейси, файлови системи и др. устройства чрез специални драйвери, комуникиращи нагоре с основното копие на Линукс по сигурен начин. Това се оказа доста полезно както за целите на разработката (профилиране и т.п.) така и за анализ на сигурността и honeypots (б.пр. honeypot буквално "гърне с мед", обик. за лов на маймуни а в случая и за лов на хакери - ако се хванат. Обикновено това е мрежа която наподобява и симулира работата на истинска система в интернет, само че разположена на отделен хардуер нямащ нищо общо с реалната машина. Това позволява безопасно наблюдение действията на потенциалните хакери, а понякога и залавянето им, без опасност за срив в системата). Докато повечето потребители едва ли някога ще се възползват от такъв тип поддръжка, това е изключително "привлекателна" възможност която да си имате на вашата машина. (Впечатлете приятелите си!)

Преносими компютри

В добавка към цялата много-целева поддръжка описана дотук (подобрените APM и ACPI, подобренията в поддръжката на безжични мрежи и т.н.), Линукс също включва и две други възможности които е трудно да бъдат класифицирани, улесняващи най-много потребителите с преносими компютри. Първата е, че новото издание на ядрото вече поддържа напълно софтуерна suspend-to-disk функционалност за Линукс потребителите на път. (б .пр. suspend-to-disk е възможността на системата да премине в режим с понижена консумация на енергия или да се изключи напълно от захранването, като преди това съхрани текущото си състояние на диска. При последващо включване на системата, състоянието й се зарежда от диска и все едно системата никога не е била изключвана.) Новата версия също поддържа и възможностите на новите мобилни процесори да променят скоростта си (и изискванията си към захранването) въз основа на това дали са включени в ел. мрежа или не.

Поддръжка на наследството от предишните версии

Въпреки че Линукс 2.6 представлява едно основно обновяване, разликите за приложенията в потребителски режим ще бъдат почти незабележими. Едно важно изключение от това правило е в много-нишковата работа: някои приложения може да се опитват да правят неща които са работили под 2.4 и 2.2 но вече не са позволени. Обаче тези приложения трябва да бъдат по-скоро изключение от правилото. Разбира се приложенията от ниско ниво като модулните инструменти определено няма да работят. Допълнително, някои файлове и формати в /proc и /dev директориите са променени и приложенията имащи подобни зависимости може да не работят правилно. (Това е особено важно когато все повече и повече неща се прехвърлят на новата "/sys" виртуална файлова система. В случая на "/dev", могат лесно да бъдат конфигурирани обратно-съвместими имена на устройствата.)

В добавка към тези стандартни опровержения, съществуват редица други по-малки промени, които може да въздействат в някои обкръжения. Първо, много старите swap файлове (от Линукс 2.0 и по-ранни) ще трябва да бъдат преформатирани преди да могат да бъдат използвани с 2.6. (Тъй като swap файловете не съдържат постоянни данни, това не би било проблемно за крайния потребител.) kHTTPd daemon - процесът, който позволява на ядрото да обслужва директно заявките за уеб страници също бе премахнат, като повечето тесни места в производителността спиращи Apache, Zeus, и др. да достигнат скоростта на работа на ядрото бяха разрешени. Автоматичното откриване на ДОС/Уиндоус дискови мениджъри като OnTrack и EzDrive за поддръжка на големи дискове с по-старите BIOS бяха премахнати. И накрая, поддръжката за специалните сектори за първоначално зареждане на ядрото при стартиране от дискета също бе премахната - вместо това трябва да използвате SysLinux.

Нещата в края

Този документ бе сглобен основно от дългите часове четене на журналните файлове на BitKeeper, разглеждане и играчка с изходния код, четене и изпращане публикации във форумите и много, много търсене с Google и Lycos на документация за това и онова. Поради това е възможно да има места където нещо липсва или е погрешно схванато и места където нещо може да бъде отхвърлено постфактум. (Аз бях изключително внимателен с двете версии IDE поддръжка над които се работеше през това време, но съществуват и др. примери.) Поради това че част от моите изследвания бе извършена чрез разглеждане на уеб страниците на различни проекти в ядрото, аз трябваше да внимавам независимите проекти да не са много по-напред с възможностите отколкото вече възприетите в основния Линукс код. Ако откриете някакви грешки в този документ или искате да ми пратите писмо по ел. поща за да ме попитате как съм днес, Вие можете да го изпратите на jpranevich <на> kniggit.net.

Допълнителна информация за състоянието и възможностите на Линукс 2.6 може да намерите на редица места в мрежата. Джулием Босиер поддържа страница на http://www.kernelnewbies.org/status с информация за промените версия по версия. Дейв Джоунс също поддържа полу-официален списък с промените на http://ftp.kernel.org/pub/linux/kernel/people/davej/misc/post-halloween-2.5.txt. И двете места в мрежата изглеждат малко остарелички, но тъй като минаха три месеца между отделните ми версии (на този документ), кой съм аз че да се оплаквам?

Най-новата версия на този документ винаги може да бъде намерена на http://kniggit.net/wwol26.html.

Преводи

Не говорите английски или български език? Този документ (или по-старо издание) е преведен на няколко чужди езика.

Китайски - http://www-900.ibm.com/developerWorks/cn/linux/kernel/l-kernel26/index.shtml (Стоун Уанг и др.)
Чешки - http://www.linuxzone.cz/index.phtml?ids=10&idc=782 (Дейвид Харинг)
Френски - http://dsoulayrol.free.fr/articles/wonderful_2.6.html (Дейвид Солейрол)
Унгарски - http://free.srv.hu/b/e/behun/pn/modules.php?op=modload&name=News&file=index&catid=&topic=12 (Ъруин Новак) (Все още незавършен).
Португалски (бр) - http://geocities.yahoo.com.br/cesarakg/wwol26-ptBR.html (Цезар А. К. Гросмън)

Съкратена версия се появи и в Германия в изданието на списание LanLine от септември 2003 г.

В добавка мога да кажа, че навярно съществуват и италианска и корейска версия, но поне аз не знам къде са сложени. Ако Вие знаете за някои допълнителни преводи, които могат да бъдат добавени към този списък, моля да ме уведомите.


Авторските права запазени (C) 2003 Джоузеф Праневич. Разпространението чрез интернет без модификации е разрешено. Насърчава се разпространението и на друг вид носители на информация, но моля първо ми пратете ел. поща да обсъдим нужните детайли. Преводите се окуражават - моля пратете ми ел. поща така че да мога да помогна за координацията им.