LinuxBegin.ru - offline-версия от 26.04.2004
Главная | Все темы | Все статьи | Ссылки | Аналоги Windows-программ в Linux | Top 20

Замечательный Мир Linux 2.6 - часть 1
(Некоторые возможности Linux)


- Joseph Pranevich, оригинал. Перевод: Death_Mokar, 26.10.2003 -

Часть 1
Часть 2

Казалось бы, только вчера мы запускали наши первые Linux-системы с ядром 2.4, время летело, контора писала, вот уж озимыя заколосились... и команда разработчиков ядра приблизилась к завершению работы над новой версией ядра - 2.6. В этом документе будут описаны новые особенности ядра 2.6 (с сильным уклоном к i386 порту Linux). В отличие от объявлений предварительных выпусков закрытого ПО, все особенности, описанные здесь, доступны уже сейчас (одни более, другие менее свободны от багов) в экспериментальном ядре Linux 2.5 (по традиции Linux, четно пронумерованные ядра "стабильны" и предназначены для готовых систем, в то время как нечетные ядра - для смельчаков))).

Учитывая сказанное, следует иметь в виду, что некоторые из особенностей, описанные здесь, могут быть удалены или помечены как "экспериментальные" в актуальных выпусках ядра 2.6. Однако на текущий момент развитие ядра имеет статус "feature-freeze", т.е. никакие новые возможности более не добавляются в ядро, и это радавает нас, патаму ша карашо, ибо финальный релиз не будет сильно отличаться от того что описано тута. Также следует учесть, что некоторые из "новых" особенностей, обсуждаемых здесь, возможно, были портированы задним числом в Linux 2.4 после их появления в Linux 2.6, официально ли или дистрибутором, опять же ли.

При создании данного документа возникли некоторые сложности, точный номер ожидаемой версии Linux еще не был определен. Наиболее вероятный номер - v2.6, но были предложения, чтобы v3.0 стал следующим номером из-за включения NUMA и MMU-less поддержки в будущей версии (подробнее об этом позже). Для удобства, этот документ будет всегда, что касается будущей версии ядра, ссылаться на него как на v2.6 и в настоящем времени.

То что вы читаете - первый проект этого документа, датированный 13.07.2003 и основывается на экспериментальном ядре 2.5.75. Будут выпущены и другие версии этого проекта, по мере завершения работы над ядром, но этот документ "официально" не будет закрыт до выхода финального релиза ядра. Поскольку это первый черновик, то могут быть ошибки или упущения; если вы найдете их, сообщите мне, я буду счастлив устранить их (а иначе ты будешь несчастен до конца дней своих?))).

Скоро сказка сказывается ...

Ядро Linux было зачато в 1991 году Линусом Торвальдсом как Minix-подобная операционная система для его кампика, i386. Изначально Линус хотел назвать проект Freax, но нам всем крупно повезло, потому что он передумал (спрашивается: ПОЧЕМУ??? - двойной смысл вопроса))). Первый официальный выпуск Linux 1.0 был представлен в марте 1994-го, официально он поддерживал только i386 и только однопроцессорные персональные компьютеры. Linux 1.2 был выпущен в марте 1995-го и стал первой версией, которая официально поддерживала различные архитектуры (в частности Alpha, Sparc, и Mips).

Linux 2.0 появился в июне 1996-го и поддерживал много новых архитектур, но что наиболее важно, это была первая версия, которая поддерживала многопроцессорные машины (SMP). Linux 2.2 вышел в январе 1999-го как дополнительное усовершенствование, которое существенно повысило производительность на многопроцессорных машинах и снова был расширен диапазон поддерживаемых аппаратных средств. И наконец, Linux 2.4 был выпущен в январе 2001-го как следующее основное усовершенствование масштабируемости с SMP, при этом много десктопных особенностей было интегрировано в основную ветку ядра, включая USB, PC Card (aka PCMCIA), встроенный plug-and-play и т.д. Linux 2.6 базируется не только на этих особенностях, но также делает другой "большой скачок" в улучшении поддержки как больших систем (полагаю, немеряных мэйнфреймов), так и встраиваемых (PDA и прочие embedded Linux`s).

Расширение списка поддерживаемых архитектур.

Одной из многих сильных сторон ОС, основанных на Linux (типа GNU ОС, ОС и различные программы, которые так часто распространяются вместе с Linux, что уже не воспринимаются как отдельные объекты) - является то, что они поддерживают широкий диапазон аппаратных средств и платформ. Каждая версия, начиная с 1.2, включала поддержку новых типов процессоров и особенностей. Linux 2.6 не является исключением в этой тенденции, и хотя этот факт прямо не влияет на использование Linux на Intel-е, он очень важен для Linux и для его как можно более широкого распространения.

Масштабирование вниз - Linux для Встроенных Систем

Одним из главных направлений роста Linux 2.6 была поддержка множества платформ, в частности посредством включения многих возможностей из проекта uClinux в основное ядро. Проект uClinux (возможно произношение "you-see-Linux", но более верно произносить с греческими символами "mu" (эт как это???) - это проект Linux для микроконтроллеров. Много лет это ответвление Linux было основой поддержки многих встраиваемых процессоров, и очень приятно получить более высокую степень интеграции в ядре основной ветки.

В отличие от обычных портов Linux, встраиваемые порты, описанные здесь, не имеют всех возможностей обычного Linux из-за аппаратных ограничений. Основное различие в том, что процессоры, под которые эти порты созданы, не поддерживают MMU. (В мире Intel, MMU был представлен с i386). В то время как эти Linux системы истинно многозадачны, они не имеют защиты памяти (так что любая программа может разрушить любая другую) и некоторые системные вызовы, имеющие дело с клонированием процессов, заблокированы. И поскольку эти системы не имеют защиты памяти (в самом деле, какая уж тут безопасность), они оказываются бесполезными в качестве многопользовательских систем.

Есть четыре основных линейки встраиваемых процессоров, поддерживаемых Linux 2.6. Первый из этих портов - для новейшей линейки встраиваемых процессоров m68k фирмы Motorola. Эти процессоры выпускаются с именами типа Dragonball и ColdFire и включены в системы и "полуфабрикатные" платы, изготовленные фирмой Motorola, Lineo, Arcturus, и другими. Большинство пользователей Linux знакомы с этими процессорами как лежащими в основе Palm Pilot-ов, начиная с первого (Palm 1000), и до Palm III. Печально, но поддержка старших m68k процессоров без MMU (типа 68000, используемый в ранних Macintosh) еще не включена в это ПО. Среди новых поддерживаемых встраиваемых платформ такие как серия H8/300 от Хитачи (H8S еще не поддерживается, но вскоре могут быть включены) и NEC v850 процессор.

Акцентирую внимание на том, что это - серьезное смещение приоритетов в сторону поддержки систем без MMU под Linux 2.6. Все предыдущие версии Linux были получены, однако косвенно, ограниченным наследованием начальной разработки Линуса на Intel 80386. Экстраполируя в этом направлении, будем надеяться что поддержка и других устаревших аппаратных средств будет реализована в будущем (ацтой!!! даешь вечный апгрейд!!!))) (действительно, есть проекты, которые работают в этом направлении), а также много новых и захватывающих дверей будут открыты? (смысл понятен). В отличие от работы на современных и разрабатываемых встраиваемых процессоров, перечисленных здесь, поддержка устаревших моделей в значительной степени определяется "хоббистами"))))) и наиболее вероятно бесполезна для конечных пользователей (и возможно не достаточно важна для включения в официальные релизы Линукса в будущем).

Несмотря на то, что часть uClinux интегрирована, не технически (потому что включает MMU), последние версии Линукса также включает поддержку процессоров Axis Communications'' ETRAX CRIS ("Code Reduced Instruction Set - код с уменьшенным количеством инструкций"). (В частности поддерживаются ETRAX 100LX и более новые). Фактическая поддержка этих процессоров появилась в процессе разработки ветки 2.4, но данная возможность была представлена после релиза 2.4.0, поэтому заслуживает упоминания здесь. Axis Communications'' ETRAX CRIS - это встраиваемый процессор, который используется прежде всего в сетевом оборудовании. ETRAX100 родственник MMU-less процессоров, которые поддерживаются в uClinux, но его поддержка в основной ветке дерева ядер Линукса не была интегрирована.

Opteron Поддержка - 64-битный Линукс для Потребителя

Другой процессор, поддержка которого была интегрирована при развитии ветки 2.4.x, но заслуживающая упоминания здесь - поддержка Линуксом процессоров AMD Opteron (основанных на архитектуре AMD64.) Это новый чип обратно совместим с существующими процессорами-клонами Intel и получивший даже "обратную" поддержку от Microsoft. Станет ли этот процессор или же член Itanium-семейства Intel стандартом де-факто для 64-битных пользовательских продуктов покажет время.

В то время, как более поздние редакции ядра 2.4 поддерживали этот процессор, все же были ограничения, не позволявшие широкое использование этих систем. Наиболее критичным при использовании в высокопроизводительных системах является то, что каждая задача ограничена 512 Мбайтами памяти.. Кроме того была улучшена поддержка х86 (32-разрядных) программ.

Поддержка "субархитектуры".

В дополнение к нескольким новым процессорным архитектурам, поддерживаемым ядром 2.6., новая версия Линукса включает также новую концепцию, называемую "субархитектурой". Раньше Линукс чаще всего предполагал, что тип процессора и тип его аппаратного окружения совпадают. То есть, потомки i386 процессоров используются исключительно в PC/AT серверах. В ядре 2.4. это допущение было нарушено в отношении i386, с добавлением поддержки Визуальной Рабочей Станции от SGI, "безнаследственной" платформы, работающей на чипах Intel (фактически, данный перелом произошел задолго до этого на многих других архитектурах. Например, m68k длительное время поддерживался на Amiga, Macintoshe и других платформах). Существенным изменением в ядре 2.6. стало то, что данные возможность и концепция были стандартизированы так, чтобы все архитектуры оперировали ими одинаково и способом, позволяющим четко разделять только те компоненты, которые требуют данного разделения.

С этой стандартизацией приходит две новые платформы, поддерживающие i386. Первая - архитектура NCR Voyager. Это SMP система (разработанная ранее и являющаяся сейчас стандартной спецификацией Intel MP) поддерживающая 486-686 процессоры в конфигурации вплоть до 32-х процессоров. Количество проданных конфигураций данной архитектуры довольно мало, и еще не все машины поддерживаются (наиболее старые не поддерживаются). Вторая поддерживаемая архитектура - более широко распространенная платформа PC-9800, разработанная фирмой NEC, до недавнего времени практически доминирующая платформа PC в Японии. Оригинальные РС-9800 машины строились на базе 8086 процессоров и дальнейшем их развитии (параллельно с АТ-потомками), в итоге выросшем в процессоры Pentium-класса с появившейся поддержкой SMP (естественно, поддержка для Линукса ограничена i386 или лучше (РАЗВЕ???)). Эта платформа была абсолютно неизвестна в США до тех пор, пока Microsoft не выпустила Windows 95, портированный на нее)))))))). Выпуск этой линейки был официально прекращен производителем в пользу более "стандартных" ПК-шек.

Формализация поддержки Линуксом этих "незначительно различных" аппаратные типов позволит более легко портировать ОС на другие системы, такие как выделенные хранилища данных и другие компоненты, используемые преимущественно в индустриальных типах процессоров. Для ясности скажем, что нельзя не учитывать эту категорию. Эта субархитектура была выделена потому, что низкоуровневые компоненты системы (такие как IRQ маршрутизация) более или менее различны. Вышесказанное отличается от Линукса, запущенного, например, на X-Box, потому что не драйвера или другие особенности, а нечто другое отличает эту систему от основных i386 систем. Поддержка X-Box не является субархитектурой.

Масштабирование вверх - NUMA и Большое Железо.

В дополнение к поддержке перечисленных новых типов оборудования, новый выпуск ядра Линукса включает особенности, которые делают более приемлемым его использование на все более крупных серверах (некоторые работают на i386 процессорах, некоторый нет). Поскольку данная поддержка в новинку для Линукса, многое еще предстоит сделать (в направлении оптимизации). Это область, в которой Линукс очень быстро растет и созревает, и можно ожидать, что Линукс довольно скоро станет здесь сильным соперником.

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

Чтобы должным образом поддерживать новые NUMA машины, необходимо было адаптировать Линукс сразу в нескольких направлениях, чтобы новая модель стала эффективной. Для начала был создан API внутренней топологии, позволяющий ядру понять, один процессор или один пул памяти связаны с устройствами ввода-вывода и как они связаны между собой. Опираясь на эту информацию, планировщик процессов Линукса теперь может понять эти взаимосвязи и оптимизировать выполнение задач с наиболее выгодным распределением локальных ресурсов. Кроме того, многие NUMA машины построены таким образом, что имеют "дыры" в линейном адресном пространстве между узлами. Новое ядро решает эту проблему разумным способом. Было сделано множество других внутренних изменений, которые позволят Линуксу работать с этими новыми хай-энд машинами, и в целом - это направление, определяющее дальнейшее совершенствование ядра. В течение следующего года мы можем ожидать новые доработки и усовершенствования поддержки Линуксом этих высокопроизводительных систем.

Внутренняя организация Линукса

В дополнение к поддержке нового оборудования, в ядре 2.6. также усовершенствована поддержка уже существующих платформ. Сюда входит оптимизация, специфичная для процессоров Transmeta Crusoe; Intel Pentium 4 Xeon, Pentium 3-M, и Pentium 4-M, а также мобильные процессоры AMD. Новые версии Линукса также могут обходить проблемы, имеющие место в некоторых Athlon-ах. И хотя большинство пользователей не замечают некоторых проблем, Линукс 2.6. решает проблему, возникающую в некоторых системах с более чем 16-ю процессорами при загрузке.

Hyperthreading

Хотя это не новинка Линукса 2.6., поддержка Hyperthreading появилась еще в ядре 2.4.17 (данная возможность описывается здесь потому, что начальный релиз 2.4. не поддерживал Hyperthreading, а также потому, что с того времени сделано много серьезных изменений). Hyperthreading - это способность одного процессора маскироваться под два (или больше) процессора от ОС. Удивительно то, что Линукс - первая ОС, которая вышла на рынок с поддержкой этой возможности, несмотря на то, что Intel выпустил процессоры с Hyperthreading всего около года назад. Говорят что Майкрософт колеблется в вопросе лицензирования таких процессоров: лицензировать как один или же как два (уже порешили). Открытая модель Линукса (и отсутствие лицензирования за процессор) позволили различным дистрам стать первыми в поддержке Hyperthreading (ура товагищи!). Естественно, процессор претендующий быть "двумя", все же остается одним процессором и производительность растет не сильно.

Одна вещь действительно новая в 2.5. - это планировщик, позволяющий получить выигрыш за счет Hyperthreading всегда. В 2.4. так было не всегда, и в некоторых случаях включение данного режима работы процессора приводило к замедлению работы.

Вопросы Размера - Усовершенствование Масштабируемости

Кроме поддержки NUMA, Линукс 2.6. реализовал и другие изменения касающиеся серверов Intel, стоящих на верхушке "пищевой цепочки". Первое - это полная поддержка PAE ("Physical Address Extension" - расширение физического адреса), которая позволяет новейшим 32-битным х86 системам адресовать до 64 Гбайт ОЗУ, но, в страничном режиме. Кроме того, посредством улучшенной поддержки APIC и других изменений, было существенно улучшено распределение IRQ в многопроцессорных системах.

Во многих других отношениях были расширены пределы других внутренних ограничений. Так, количество уникальных пользователей и групп системы Линукс возросло с 65000 до более чем 4 миллиардов (с 16 до 32 бит). Это позволит Линуксу работать на больших файл-серверах и серверах аутентификации, где ранее, возможно, поджимали предыдущие ограничения. Точно так, максимальное количество PID-ов (ID процесса) было увеличено с 32000 до 1 миллиарда. Это изменение, совместно с другими усовершенствованиями в PID-подсистеме, улучшит производительность запуска приложений на очень занятых или долго работающих системах. Хотя максимальное количество открытых файлов не было увеличено, ядро 2.6. более не требует вашего вмешательства в установление этого предела заблаговременно, а самомасштабирует это количество. И, наконец, Линукс 2.6. включает улучшенную поддержку 64 бит на блочных устройствах, поддерживающих работу в данном режиме, даже на 32-битных платформах, таких как i386. Это позволяет создавать файловые системы, размером до 2 Тбайт.

Интерактивность и скорость реакции ядра.

Одним из направлений, в котором сфокусировано развитие ядра 2.6., является создание для пользователей настольных систем, и других задач, требующих высокого уровня контроля над происходящими событиями, более интерактивной системы. Каждое из этих целевых направлений имеет свои проблемы, но было внесено много изменений, которые принесут пользу в обоих случаях.

Главное внутреннее изменение, представленное в ядре 2.6. и значение которого не может быть преуменьшено, это то, что теперь само ядро является выгружаемым. В предыдущих версиях Линукса, когда ОС выполняла что-либо в ядре она не могла быть прервана (на многопроцессорных машинах это было истинно в отношении каждого процессора). Начиная с ядра 2.6., пользовательская задача может прервать работу ядра даже если оно выполняет нечто сложное (чтобы избежать вызванных этим явных коллизий, ядро имеет части, которые не могут быть прерваны в процессе выполнения). Основной выигрыш, достигнутый этими изменениями, заключается в том, что улучшается интерактивная производительность (например при работе пользователя настольной системы) и таким образом система становится более чувствительной к таким вещам как пользовательский ввод.

Другим изменением, позволившим Линуксу стать более интерактивной ОС в отношении приложений, поддерживающих такую интерактивность, стала поддержка новых "futexes" (или "Fast User-Space Mutexes" - быстрые семафоры пользовательского пространства). Futexes - это возможность, с помощью которой множественные процессы и нити могут выстраивать последовательность событий так, что они не будут наступать друг другу на пятки ("состояние гонки"). В отличие от традиционных операций взаимоисключения, поддерживаемых большинством библиотек распараллеливания процессов, данный способ частично базируется на поддержке ядра (но только в случае возникновения разногласий) и он также поддерживает систему приоритетов, позволяющую приложениям или нитям с более высоким приоритетом, получить первоочередной доступ к запрошенным ресурсам. Программное определение приоритета задач, позволило получить более интерактивную систему, что может быть очень важно в критичных ко времени приложениях.

Серьезным изменениям подверглась подсистема ввода-вывода Линукса, сделав его более чувствительным независимо от степени загрузки. Эти изменения включают полностью переписанную подсистему планирования ввода-вывода, кода ядра, определяющего какие процессы будут производить чтение с устройств и когда. Учитывая более раннюю оптимизацию, которая обеспечивала чтение в порядке, наилучшем относительно оборудования, переписанный код обеспечивает исключение долговременного простоя процессов в ожидании ввода-вывода.

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

Подсистема Модулей - Драйверы Устройств

Другой измененной частью, с выходом ядра 2.6., стала подсистема модулей. Большая часть кода была переписана с целью повышения стабильности и создания более прозрачной системы. Кроме очевидных внешних изменений, многое было изменено "внутри", то есть то как ядро видит и использует модули.

Первое и наиболее очевидное изменение (хотя и наименее функциональное) в драйверах ядра 2.6. - это изменение расширений файлов. Вместо бывшего ".о" (общее расширение для "объектных" файлов, обычно создаваемые в результате компиляции любой программы до линковки в исполняемый файл) теперь используется расширение ".kо" ("kernel object"). Это лишь косметическое изменение, делающее более ясным то, что модули не являются промежуточными объектными файлами.

Абсолютно не косметическое изменение - огромная работа, проделанная для устранения состояний гонки, которые имели место в коде многих предыдущих ревизий. Загвоздка в том, что какое-либо устройство может обратиться к модулю в процессе его выгрузки, но уже после того, как модуль проверит не используется ли он. Новый код модульной части ядра сводит такие состояния к минимуму. Следующий шаг данного решения - возможность простого отключения выгрузки модулей в целом.

Улучшенная прозрачность - еще одна возможность новой подсистемы модулей. Почти во всех предыдущих версиях Линукса модули были достаточно умными для определения устройств, поддерживающих определение ID устройства сканированием шин (таких как PCI, ISA PnP, и PC Card). В ядре 2.6. большая часть такой поддержки была стандартизована и вынесена вне ядра, что позволило внешним программам и загрузчикам модулей определять какие устройства поддерживает конкретный модуль. Это позволит различным программам управления оборудованием (таким как "kudzu") принимать интеллектуальные решения об оборудовании, даже если они его не "знают". И если вы уверены, вы можете "заставить" драйвер попытаться работать с устройством, которое он не поддерживает (посредством интерфейса новой файловой системы "sys", описанной ниже).

Другие Усовершенствования

В дополнение ко многим изменениям, описанным выше, было сделано много других основных изменений внутри Линукса, повышающих производительность во многих случаях. В них вошло много устранений "Big Kernel Lock" ("грубые" блокировки, использовавшиеся в ранних версиях Линукса, поддерживающих несколько процессоров), оптимизация упреждающего чтения файловой системы, отложенная запись, манипуляции с маленькими файлами и другое.

В Линуксе 2.6. решена одна из серьезных проблем стабильности: более невозможно выделить памяти больше, чем есть в системе ОЗУ (плюс своп). Раньше, в некоторых случаях, Линукс мог позволить успешно вызвать malloc() ("выделение памяти") даже если память была исчерпана. Была пересмотрена логика выделения ресурсов и подобные случаи сделаны невозможными (конечно если вы исчерпаете системное ОЗУ - даже без превышения максимума - у вас возникнут серьезные проблемы).

Линукс всегда был выгодной платформой открытых стандартов. Одним из больших внутренних изменений стала полностью переписанная инфраструктура нитей, позволившая использовать поверх себя Native POSIX Thread Library (NTPL). Это дало серьезное увеличение производительности на процессорах Pentium Pro и лучше в сильно "распараллеленных" приложениях, многие крупные игроки уровня предприятия требовали этого (фактически, Red Hat портировала эту возможность в ядро 2.4., входящее в состав Red Hat Linux начиная с версии 9.0). Это изменение привнесло новые концепции в Линукс включая группы нитей, локальная память отдельных нитей, сигналы в стиле POSIX и многое другое. Одним из главных недостатков является то, что приложения (такие как Sun Java) написанные без учета данной спецификации и опирающиеся на старый Linux-isms, не будут поддерживаться. Поскольку преимущества оказываются довольно дороги (и учитывая множество крупных игроков в игре) , становится ясным, что большинство важных приложений включат поддержку изменений задолго до выхода нового ядра.

И, наконец, хотя большинство приложений Линукса не получат прямой выгоды, ядро 2.6. теперь включает возможность полностью отказаться от поддержки свопа при компиляции ядра. Это позволит Линуксу работать в немного меньшем объеме памяти, что может быть полезно во встраиваемых устройствах, где маловероятно использование свопа.

Модель Унифицированного Устройства

Очень часто принимаемая за отдельный компонент ОС, принятая в ней модель устройств очень важна для ОС, спроектированной для работы с широким спектром оборудования. Если коротко, то модель устройств представляет собой внутреннюю инфраструктуру ядра, обнаруживающую и определяющую использование ресурсов всех дополнительных компонент системы. Всем ОС (и разновидностям Линукса) свойственно иметь какую-либо концепцию представления устройства. Предыдущие версии Линукса (2.2. и старше) имели низкоуровневое представление об устройствах. Существовали драйверы для различных устройств с шинной архитектурой и различные драйверы устройств знали как опрашивать поддерживаемую ими шину для определения подключенных к ней устройств. Такая система постоянно расширялась и различные шинные архитектуры имели различные и не совместимые API для выполнения разнообразных операций. Линукс 2.4. стал первым шагом к "унификации" модели устройств объединив PCI, PC Card и ISA Plug-and-Play в единую структуру устройств с общим интерфейсом. Линукс 2.6. приложил значительные усилия для того, чтобы сделать завершенное новое видение того, как ядро Линукса видит оборудование с которым работает - универсальное видение для всей системы.

Абстракция Объектов Ядра

Ядро новой инфраструктуры модели устройств - новый объектно-ориентированный интерфейс, который должны использовать все низкоуровневые устройства. Эта объектная структура устройств ядра (называемая "К-объект") включает все интерфейсы, необходимые для обеспечения связей и обработки подустройств. Низкоуровневые устройства (такие как системные шины) теперь используют эту общую прослойку для представления системы в унифицированном виде, как в ядре, так и в пользовательском пространстве. Теперь, когда все это централизовано, Линукс может делать множество полезных вещей используя эту информацию.

С этой новой информацией, полностью размещенной в ядре, Линукс способен лучше поддерживать системы, где требуется глубокое знание оборудования. Очевидным примером использования этой информации является управление электропитанием. В последние годы стандартом управления питанием является ACPI. ACPI - "Advanced Configuration and Power Interface" (продвинутая конфигурация и интерфейс питания) - поддерживается начиная с Линукса 2.4. В отличие от APM, системы с этим новым интерфейсом должны индивидуально сообщать всем совместимым устройствам о том, что они должны изменить свое состояние питания. Новая система ядра это то, что доктор прописал; она позволяет подсистеме контролировать устройства, которые должны быть отключены или переведены в другое состояние питания. Другой пример использования данной возможности - шины с "горячим" подключением. Возможность подключать устройства после загрузки системы сейчас воспринимается как должное, но до Линукса 2.2. включительно ядро не поддерживало "горячее" подключение. Начиная с ядра 2.4. эта возможность была отработана и включена поддержка "горячего подключения" PCI, PC Card, USB, и Firewire устройств. Новая ревизия централизованной системы устройств ядра развивает данную поддержку и практически стирает разницу между устройствами с "горячим" подключением и без оного. Когда вы загружаете компьютер, подсистема обнаружения устройств систематически "подключает" все устройства вашей системы. После того, как были созданы представления в ядре для всех объектов системы после их обнаружения, независимо от того когда это произошло - во время загрузки или позже, становится гораздо проще работать со съемными устройствами.

Системная Файловая Система.

Возможно наиболее очевидным видимым для пользователя в новой модели устройств является создание новой системной файловой системы (дополняющей "proc" для процессов, "devfs" для устройств и "devpts" для псевдотерминалов UNIX98), называемой "sysfs". Эта файловая система (монтируемая в "/sys") является визуальным представлением дерева устройств, каким его видит ядро. Ядро получает эту информацию непосредственно от подсистемы объектов ядра: когда создается объект ядра, также создается файл или каталог (возможен явный отказ объекта ядра от создания записи в sysfs, если в этом есть необходимость).

После того как каждое устройство в системе (точнее К-объект) получает уникальную структуру каталогов, следующим логическим шагом становится экспорт различных известных атрибутов устройства (имя устройства, режим питания, прерывания и подобное) в дерево таким образом, что они могли быть прочитаны и записаны администратором. Это выгодный побочный эффект (вначале слегка запутывающий) позволяющий многие аппаратно-зависимые случаи использования /proc/sys перенести в /sys уже сегодня или же в будущем.

Поддержка Оборудования в Ядре

За последние годы Линукс существенно продвинулся вперед и в направлении мэйнстрима (ширпотреба))), каждый этап развития ядра был скачком, лучшим чем предыдущий в контексте поддерживаемых устройств - как вновь появившихся технологий (USB в 2.4.), так и старых технологий (MCA в 2.2.). Таким образом мы пришли к тому, что число устройств, не поддерживаемых ядром 2.6. относительно мало. Осталось очень мало, если вообще осталось, основных направлений РС оборудования, требующего исследований. По этой причине большинство (но, конечно, не все) улучшений в поддержке оборудования РС (включая вышеупомянутую модель устройств) были связаны с упрочнением уже существующей поддержки.

Внутренние Шинные Архитектуры Устройств.

Не менее важными чем процессор, являются системные шинные архитектуры, служащие связующим звеном между устройствами. Мир РС прошел длинный путь системных шинных архитектур, от старейшей ISA (разработанной в оригинальных IBM PC) до современных внешних последовательных и беспроводных шин. Линукс всегда быстро реагировал на появление новых типов шин и устройств, по мере их распространения среди потребителей, и значительно менее быстро адаптируется к технологиям, относительно меньше распространенным.

Примером того, как Линукс включил поддержку нового типа шины позднее, чем коммерческие ОС, стало расширение ISA Plug-and-Play (PnP) в ядре 2.4. (вы могли ранее иметь данную поддержку сделанными наспех пользовательскими утилитами). В Линукс 2.6. включено существенное обновление данной подсистемы, делая ее практически законченной и хорошо интегрированной в остальную часть новой модели устройств. Среди новых возможностей - полная поддержка PnP BIOS, базы данных имен устройств и другие изменения, делающие поддержку более устойчивой. Результатом всех изменений стало то, что Линукс теперь является полностью Plug-and-Play ОС и может быть установлен в машины с совместимым BIOS.

Альтернативами PnP в ISA (довольно не популярными) были MCA (архитектура микро канала) и EISA (расширенная стандартная архитектура промышленного применения). Обе эти подсистемы были улучшены в процессе разработки Линукса 2.6. с целью улучшения поддержки новой модели устройств. Более того, EISA была далее стандартизирована с другими подсистемами посредством включения базы данных имен устройств.

Другими, не столь кардинальными, стали несколько примечательных изменений Линукса в поддержке шинных архитектур. Шина PCI - наиболее распространенная и важная из всех шин - получила существенно улучшенную поддержку в процессе разработки ядра 2.6. включая усовершенствование "горячего" подключения и поддержки управления питанием. В этой же струе, новое ядро теперь поддерживает системы с несколькими AGP ("accellerated graphics ports" - ускоренный графический порт - выделенная высокоскоростная шина, также использующая протокол PCI), такие как высокопроизводительные графические станции. В свете поддержки описанных типов внутренней организации РС, Линукс идет в ногу с общими тенденциями на рынке.

Кроме поддержки всех "физических" шинных архитектур, Линукс 2.6. привнес концепцию "функциональной" шины (по крайней мере внутренне). Шина этого типа определена в каждой архитектуре и содержит все мыслимые устройства, которые вы ожидаете увидеть. В РС, например, она может включать набортные последовательный, параллельный и PS/2 порты - устройства, которые имеют место быть, но не привязаны к какой-либо физической шине в системе. На некоторых платформах, данная функциональная поддержка может включать множество сложных вещей (таких как запрос встроенного ПО), но чаще всего это лишь обертка, позволяющая устройству быть обработанным стандартным образом согласно новой парадигме драйвера.

Шины Внешних Устройств

Все вышеперечисленные "старые" стандарты созревали и добавляли относительно немного новых возможностей в систему, чего нельзя сказать о USB. Универсальная Последовательная Шина претерпела множество изменений в течение недавнего времени. Самое заметное изменение - поддержка новым ядром устройств USB 2.0. USB2 - это новый стандарт, поддерживающий передачу данных со скоростью 480 Мбит/с (по сравнению с 12 Мбит/с у USB 1.1.). Устройства поддерживающие этот стандарт и маркируемые как "high speed" USB ("высокоскоростной USB) постепенно завоевывают рынок. Новый родственный стандарт, называемый USB On-The-Go (или USB OTG) - вариант точка-точка протокола USB, для соединения устройств напрямую друг с другом (например, для подключения цифровой камеры к принтеру без участия РС), в настоящее время не поддерживается ядром 2.6. (патчи с возможностью такой поддержки существуют, но пока не включены в официальный выпуск ядра). В дополнение к поддержке новых устройств, был пересмотрен внутренний пересчет USB устройств таким образом, что стало возможным иметь доступ к намного большему числу однотипных устройств в Линуксе. В основном при этом выиграли большие принт- и файл-серверы (хотя последние, вероятно, будут использовать выделенную шину памяти). Это определенно область технологий, существенно повзрослевших за последние несколько лет, и Линукс работает над тем, чтобы успевать за развитием устройств на рынке.

Беспроводные Устройства

В течение нескольких предыдущих лет технология беспроводного доступа существенно продвинулась вперед. Все чаще кажется что кабели (исключая кабель питания!) канут в лету в ближайшие годы. Ныне беспроводные устройства охватывают как область сетей (наиболее распространено в настоящем), так и множество обычных устройств, таких как PDA и прочие.

В области беспроводных сетей устройства можно разделить на дальнодействующие (например, устройства АХ.25 поверх любительского радио) и короткодействующие (обычно 802.11, но есть и более старые протоколы). Линукс поддерживал устройства обоих типов начиная с ядра 1.2. и обе подсистемы были усовершенствованы в процессе разработки ядра 2.6. Главное изменение заключается в том, что основные компоненты "короткодействующей" подсистемы, поддерживающие различные платы и протоколы, были объединены в единую "беспроводную" подсистему и API. Такое объединение решило проблему мелких несовместимостей различных поддерживаемых устройств, и усилило подсистему поддержки Линуксом единого набора пользовательского инструментария, позволяющего работать со всеми поддерживаемыми устройствами. В дополнение к стандартизации, Линукс 2.6. предлагает множество полноценных усовершенствований, включая улучшенную способность уведомления в случае изменения состояния устройства (например состояние перемещающихся устройств("roaming")) и изменения в ТСР, позволяющие лучше обрабатывать периодические задержки, возникающие в беспроводной сети. Поскольку ядро 2.4. обеспечивало хорошую поддержку беспроводных устройств, многие изменения уже присутствуют в готовом ядре.

В области беспроводных устройств также были сделаны существенные подвижки. IrDA ("инфракрасный" протокол названный так группой Infrared Data Associates) был улучшен со времени последнего релиза, в частности были добавлены управление питанием и интеграция с новой моделью драйверов ядра. Значительный прогресс был достигнут Линуксом в обеспечении поддержки Bluetooth устройств. Bluetooth - это новый протокол беспроводного доступа, разработанный для работы на коротких расстояниях и с низким энергопотреблением, но не имеющий в отличие от IrDA такого ограничения как условие прямой видимости. Bluetooth это протокол, спроектированный чтобы "быть везде", и им оснащаются такие устройства как PDA, cell-телефоны, принтеры и более экзотические устройства типа автомобильного оборудования. Сам протокол работает с двумя различными типами передачи данных: SCO, или Synchronous Connection Oriented (синхронно-ориентированное соединение), предназначенное для аудио приложений не чувствительных к потерям при передаче; и L2CAP, или "Logical Link Control and Adaptation Protocol" (протокол контроля логического соединения и адаптации), для более устойчивого соединения, поддерживающий повторную передачу и подобное. Кроме того протокол L2CAP поддерживает различные под-протоколы (включая RFCOMM для соединения точка-точка и BNEP для Ethernet-подобного соединения в сеть). Поддержка Линуксом таких вещей как Bluetooth продолжает развиваться и мы можем ожидать значительно большей поддержки потребительских устройств. Следует упомянуть, что поддержка Bluetooth также была интегрирована в последние выпуски ядра 2.4.

Дальше >>

Просмотров: 6435  |  Рейтинг статьи: 4.20 (Голосов: 24).
4.20
Дата размещения статьи: 2003-10-28 16:08:56



5 последних поступлений в раздел Некоторые возможности Linux:

13.12.03: Вся система в одном файле. Часть 1 (Я уже неоднократно встречал на форумах вопросы навроде "как запустить iso-образ LiveCD прямо с винчес...)
12.11.03: Дела сердечные (В новом ядре изменений так много, что первоначально даже поговаривали, будто номер его будет 3.0, а н...)
28.10.03: Замечательный Мир Linux 2.6 - часть 2 (Команда разработчиков ядра уже приблизилась к завершению работы над новой версией ядра - 2.6. В этом ...)
28.10.03: Замечательный Мир Linux 2.6 - часть 1 (Команда разработчиков ядра уже приблизилась к завершению работы над новой версией ядра - 2.6. В этом ...)
04.02.03: LINUX и три восклицательных знака. (Количество восклицательных знаков на означенную площадь вполне оправданно и у автора не вызывает ника...)

Комментарии:

Re: Замечательный Мир Linux 2.6 - часть 1 (Оценка: 0)
от Anonymous на 30.10.03
чего к человеку привязался?

-- Anonymous


Re: Замечательный Мир Linux 2.6 - часть 1 (Оценка: 0)
от Anonymous на 30.10.03
Что за школьник-недоучка переводил статью? А может это был кул хацкер? Создается такое впечатление что он по русски без жаргона не умеет разговаривать. Чего стоят словечки вроде:

Кампик
ацтой!!! даешь вечный апгрейд!

Или вот еще щедевр лексики и логики:

Существенным изменением в ядре 2.6. стало то, что данные возможность и концепция были стандартизированы так, чтобы все архитектуры оперировали ими одинаково и способом, позволяющим четко разделять только те компоненты, которые требуют данного разделения.


-- Anonymous


Re: Замечательный Мир Linux 2.6 - часть 1 (Оценка: 1, Прикол :))
от Anonymous на 01.11.03
Это был Промт

-- Anonymous


Re: Замечательный Мир Linux 2.6 - часть 1 (Оценка: 0)
от Anonymous на 04.04.04
Ха-ха-ха-ха-!!!!!)))))))

-- Anonymous


LinuxBegin.ru © 2003-2004 Valery V. Kachurov | Условия использования материалов | О проекте