Дальнейшее развитие ядра

Рис. 10. Образование 2-х веток ядра [Bentson]

После выхода версии 1.0 дальнейшее развитие ядра Linux стало осуществляться в виде двух веток – стабильной (версии, рекомендуемые к широкому использованию) и экспериментальной (версии ядра, включающие новые, еще не проверенные или недостаточно оттестированные части кода). Номерами с четной второй цифрой (1.0.0, 1.0.1, 1.0.2, 1.2.x,...) стали обозначать стабильные версии, а экспериментальные версии обозначали номерами с нечетной второй цифрой (1.1.x, 1.3.x,...). Экспериментальные версии предназначались для дальнейшего развития, тестирования новых свойств или особенностей, только что включенных в ядро (и не обязанных, вообще говоря, в нем оставаться). После того, как новые части ядра проходили достаточную отладку, внесение изменений в экспериментальную ветку прекращалось, допускалось только устранение ошибок в коде, и через некоторое время код этой версии служил основой для выпуска очередной версии стабильной ветки ядра. Обычно в стабильной версии допускалось только устранение явных ошибок.

Новые версии в стабильной ветке ядра появлялись сравнительно редко, только после тщательной отладки, а в экспериментальной ветке - значительно чаще. Например, выход версии 1.0.9 состоялся только через полгода после 1.0, а версия 1.1.0 претерпела более 50 изменений за первые 10 месяцев. Наконец, после выхода версии 1.1.60 в экспериментальной ветке была выпущена стабильная версия 1.2.0. Одновременно ее двойник под номером 1.3.0 дал начало новой экспериментальной ветке (см. рис. 10).

Одной из главных проблем, которые стояли перед разработчиками Linux на первых этапах ее развития, было обеспечение поддержки широкого спектра аппаратных устройств. В самых первых версиях Linux поддерживал только стандартные IDE-диски. Естественно, что такая система не могла получить широкого распространения. Начиная с версии 1.2 каждая новая версия ядра включала поддержку новых типов процессоров и новых устройств. Процесс этот проходил достаточно сложно.

Во-первых, чтобы написать и отладить драйвер устройства, необходимо это устройство иметь. Очевидно, что ни у Линуса, ни у каждого из его добровольных помощников не было в наличии различных материнских плат, сетевых и звуковых карт, IDE-контроллеров, цифровых камер, принтеров и других видов устройств, общее число которых исчисляется тысячами. К счастью, большинство драйверов устройств независимы друг от друга и взаимодействуют с ядром операционной системы через строго определенные интерфейсы. Поэтому довольно легко можно написать драйвер устройства, не вникая во все сложности операционной системы. Это как нельзя лучше соответствовало той модели распределенной разработки, которая сложилась в ходе развития Linux. Разработчики ядра освобождены от необходимости заниматься разработкой драйверов и имеют возможность сосредоточится на обеспечении функциональности собственно ядра, возложив разработку драйверов на плечи тех независимых разработчиков, у которых соответствующее устройство имеются, и которые непосредственно заинтересованы в разработке драйвера для него.

Но такая модель тоже не лишена своих проблем. Когда новое устройство появляется на рынке, проходит несколько месяцев, пока какой-то программист удосужится написать для него драйвер. А производители устройств не были заинтересованы выпускать драйверы своих устройств под Linux, пока эта ОС еще не получила достаточно широкого распространения. Более того, для создания независимым программистом драйвера какого-то устройства, как правило, необходимо, чтобы были опубликованы спецификации этого оборудования, данные об интерфейсах и т.п.. На первых этапах существования Linux не все производители публиковали эту информацию, поскольку не считали нужным обеспечивать поддержку своего оборудования в системе Linux. Разработчики Linux даже вынуждены были создавать специальные списки устройств, с которыми могла работать эта система. Однако по мере того, как Linux приобретал все больше и больше сторонников, ситуация менялась и большинство фирм-производителей не только предоставляют необходимые данные разработчикам, но и сами разрабатывают драйверы устройств под Linux. Поэтому в наши дни Linux обеспечивает работу со всем спектром производимых аппаратных средств.

Поскольку число различных аппаратных устройств очень велико, драйверы устройств составляют бОльшую часть объема программного кода в Linux. Основные функции ядра, типа организации многозадачного режима или управления памятью, реализуются сравнительно небольшими частями программ. И если, с одной стороны, поддержка широкого диапазона аппаратных средств и платформ является в настоящее время одной из сильных сторон ОС Linux, то, с другой стороны, непосредственным следствием включения драйверов различных устройств является рост объема программного кода ядра. В таблице 3 показано, как происходил этот рост.

Таблица 3. Развитие ядра Linux

Версия Дата выхода Объем кода Новые свойства
0.01   8400 строк  
1.0   170 000 строк  
1.2.x Март 1995 250 тысяч строк  
1.4      
2.0 июнь 1996   Поддержка множества новых архитектур, но что наиболее важно, это была первая версия, которая поддерживала многопроцессорные машины (SMP - symmetrical multiprocessing).
2.2 январь 1999   Существенно повышена производительность на многопроцессорных машинах и снова расширен диапазон поддерживаемых аппаратных средств.
2.4 январь 2001 >3 000 000 строк
  • - Усовершенствование масштабируемости при работе с SMP;
  • - поддержка новых аппаратных средств, включая USB и firewire-устройства, PC Card (aka PCMCIA), встроенный plug-and-play и т.д.;
  • - поддержка таких архитектур как Intel Corp.'s 64-bit Itanium и IBM's S/390.
  • - новый Web-сервер, Tux, работающий на уровне ядра;
  • - поддержка файлов размером более 2 GB (долгожданное изменение, особенно для систем с большими log-файлами и серверами базы данных);
2.6 15 декабря 2003   В этой версии ядра изменений так много, что первоначально даже поговаривали, будто номер его будет версия 3.0, а не 2.6. Это действительно продукт совсем иного качества, и это даже не шаг, а прыжок вперед. Подробнее о всех изменениях в этой версии можно прочитать в следующих статьях:
  • С.Яремчук “Дела сердечные”, еженедельник “Мой компьютер” номер 44 за 03.11.2003;
  • Дж.Праневич "Замечательный мир Linux 2.6";
  • С.Шенкланд "Linux сделали пересадку сердца".

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

В наши дни, как только появляется новое устройство, ядро Linux дорабатывается с целью обеспечить поддержку этого устройства. Например, через несколько недель после того, как фирма Intel выпустила микропроцессор Xeon® в ядро Linux были внесены необходимые изменения для его поддержки.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: