Показать сообщение отдельно

  #2  
Старый 25.07.2007, 13:28
Mr. P.S.
Участник форума
Регистрация: 27.05.2007
Сообщений: 237
Провел на форуме:
2256445

Репутация: 767
По умолчанию

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

В дополнение ко многим изменениям, описанным выше, было сделано много других основных изменений внутри Linux, повышающих производительность во многих случаях. В них вошло много устранений Big Kernel Lock (грубые блокировки, использовавшиеся в ранних версиях системы, поддерживающих несколько процессоров), оптимизация упреждающего чтения файловой системы, отложенная запись, манипуляции с маленькими файлами и другое.
В Linux 2.6. решена одна из серьезных проблем стабильности: более невозможно выделить памяти больше, чем есть ОЗУ (плюс своп). Раньше, в некоторых случаях, Linux мог позволить успешно вызвать malloc() (выделение памяти) даже если память была исчерпана. Была пересмотрена логика выделения ресурсов и подобные случаи сделаны невозможными.
Одним из больших внутренних изменений стала полностью переписанная инфраструктура нитей, позволившая использовать поверх себя Native POSIX Thread Library (NTPL). Это дало серьезное увеличение производительности на процессорах Pentium Pro и лучше в сильно “распараллеленных” приложениях, многие крупные игроки уровня предприятия требовали этого (фактически, Red Hat портировала эту возможность в ядро 2.4., входящее в состав Red Hat Linux начиная с версии 9.0). Это изменение привнесло новые концепции в Linux, включая группы нитей, локальная память отдельных нитей, сигналы в стиле POSIX и многое другое. Одним из главных недостатков является то, что приложения (такие как Sun Java) написанные без учета данной спецификации и опирающиеся на старый Linux-isms, не будут поддерживаться. Поскольку преимущества оказываются довольно дороги (и учитывая множество крупных игроков в игре) , становится ясным, что большинство важных приложений включат поддержку изменений задолго до выхода нового ядра.
И, наконец, хотя большинство приложений не получат прямой выгоды, ядро 2.6. теперь включает возможность полностью отказаться от поддержки свопа при компиляции ядра. Это позволит Linux’у работать в немного меньшем объеме памяти, что может быть полезно во встраиваемых устройствах, где маловероятно использование свопа.


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

Ядро новой инфраструктуры модели устройств — новый объектно-ориентированный интерфейс, который должны использовать все низкоуровневые устройства. Эта объектная структура устройств ядра (называемая “К-объект”) включает все интерфейсы, необходимые для обеспечения связей и обработки подустройств. Низкоуровневые устройства (такие, как системные шины) теперь используют эту общую прослойку для представления системы в унифицированном виде, как в ядре, так и в пользовательском пространстве.
С этой новой информацией, полностью размещенной в ядре, Linux способен лучше поддерживать системы, где требуется глубокое знание оборудования. Очевидным примером использования этой информации является управление электропитанием. В последние годы стандартом управления питанием является ACPI. В отличие от APM, системы с этим новым интерфейсом должны индивидуально сообщать всем совместимым устройствам о том, что они должны изменить свое состояние питания. Другой пример использования данной возможности — шины с “горячим” подключением. Возможность подключать устройства после загрузки системы сейчас воспринимается как должное, но до версии 2.2. включительно ядро не поддерживало “горячее” подключение. Начиная с ядра 2.4. эта возможность была отработана и включена поддержка “горячего подключения” PCI, PC Card, USB, и Firewire устройств. Новая ревизия централизованной системы устройств ядра развивает данную поддержку и практически стирает разницу между устройствами с “горячим” подключением и без оного. Когда вы загружаете компьютер, подсистема обнаружения устройств систематически “подключает” все устройства вашей системы. После того, как были созданы представления в ядре для всех объектов системы после их обнаружения, независимо от того когда это произошло — во время загрузки или позже.


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

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


Внутренние шинные архитектуры устройств

В Linux 2.6. включено существенное обновление подсистемы ISA Plug-and-Play (PnP), делая ее практически законченной и хорошо интегрированной в остальную часть новой модели устройств. Среди новых возможностей — полная поддержка PnP BIOS, базы данных имен устройств и другие изменения, делающие поддержку более устойчивой.
Альтернативами PnP в ISA (довольно не популярными) были MCA (архитектура микро канала) и EISA (расширенная стандартная архитектура промышленного применения). Обе эти подсистемы были улучшены в процессе разработки Linux 2.6. с целью улучшения поддержки новой модели устройств. Более того, EISA была далее стандартизирована с другими подсистемами посредством включения базы данных имен устройств.
Шина PCI — наиболее распространенная и важная из всех шин — получила существенно улучшенную поддержку в процессе разработки ядра 2.6., включая усовершенствование “горячего” подключения и поддержки управления питанием.
Также новое ядро теперь поддерживает системы с несколькими AGP.
Кроме поддержки всех “физических” шинных архитектур, ядро 2.6. привнесло концепцию “функциональной” шины. Шина этого типа определена в каждой архитектуре и содержит все мыслимые и немыслимые устройства. В РС, например, она может включать набортные последовательный, параллельный и PS/2 порты — устройства, которые имеют место быть, но не привязаны к какой-либо физической шине в системе. На некоторых платформах данная функциональная поддержка может включать множество сложных вещей (таких, как запрос встроенного ПО), но чаще всего это лишь обертка, позволяющая устройству быть обработанным стандартным образом согласно новой парадигме драйвера.


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

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


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

В области беспроводных сетей устройства можно разделить на дальнодействующие (например, устройства АХ.25 поверх любительского радио) и короткодействующие (обычно 802.11, но есть и более старые протоколы). Обе подсистемы были усовершенствованы в процессе разработки ядра 2.6. Главное изменение заключается в том, что основные компоненты “короткодействующей” подсистемы, поддерживающие различные платы и протоколы, были объединены в единую “беспроводную” подсистему и API. Такое объединение решило проблему мелких несовместимостей различных поддерживаемых устройств, и усилило подсистему поддержки Linux’ом единого набора пользовательского инструментария, позволяющего работать со всеми поддерживаемыми устройствами. В дополнение к стандартизации, Linux 2.6. предлагает множество полноценных усовершенствований, включая улучшенную способность уведомления в случае изменения состояния устройства (например, состояние перемещающихся устройств) и изменения в ТСР, позволяющие лучше обрабатывать периодические задержки, возникающие в беспроводной сети.
Значительный прогресс был достигнут в обеспечении поддержки Bluetooth-устройств. Сам протокол работает с двумя различными типами передачи данных: SCO (Synchronous Connection Oriented, синхронно-ориентированное соединение), предназначенное для аудио приложений не чувствительных к потерям при передаче; и L2CAP (Logical Link Control and Adaptation Protocol, протокол контроля логического соединения и адаптации), для более устойчивого соединения, поддерживающий повторную передачу и подобное. Кроме того протокол L2CAP поддерживает различные под-протоколы (включая RFCOMM для соединения точка-точка и BNEP для Ethernet-подобного соединения в сеть). Следует упомянуть, что поддержка Bluetooth также была интегрирована в последние выпуски ядра 2.4.


Поддержка блочных устройств

Большинство основных изменений касается подсистемы IDE, которая была переписана в процессе разработки нового ядра, решив много проблем масштабирования и других ограничений. Например, приводы IDE CD-RW теперь могут писать непосредственно реальным драйвером дисков IDE, что более аккуратно чем ранее (прежде требовался специальный драйвер, эмулирующий SCSI, который был запутан и труден в понимании). Также, IDE-система теперь способна запрашивать у BIOS машины информацию о неподдерживаемом контроллере и использовать разумные значения таймингов и другие данные. В отношении SCSI было сделано множество мелких улучшений, относящихся к расширенной поддержке и масштабированию. Одним специфичным усовершенствованием стала поддержка многоканальных SCSI-2 устройств, которые имеют более чем 2 LUN на борту. Другим важным изменением стала возможность отката для проверки смены носителя, как делает Microsoft Windows, для большей совместимости с устройствами, не полностью следующим спецификации. Поскольку данные технологии со временем были стабилизированы, Linux включил их поддержку. Также теперь Linux имеет поддержку хоть и не самой шины хранилища, но прямой доступ к EDD (Enhanced Disk Device, усовершенствованное дисковое устройство) BIOS новейших машин , что позволяет ему “смотреть” глазами самого storage-сервера на его дисковые накопители. EDD BIOS включает всю известную ему информацию о том, какие шины хранилищ есть в системе (включая IDE и SCSI). Кроме простого определения конфигурации и другой полученной информации об имеющихся накопителях, имеется ряд других преимуществ. Например, новый интерфейс позволяет системе определить, с какого именно устройства была загружена система. Например, это позволяет продвинутым программам инсталляции использовать данную информацию чтобы определить, где разместить GRUB (загрузчик Linux).


Файловые системы (ФС)

Файловые системы ext2fs и ext3fs, чаще всего устанавливаемые с Linux’ом по умолчанию, были значительно улучшены в процессе разработки Linux 2.6. Основным изменением стала поддержка расширенных атрибутов, или метаданных, которые могут быть встроены в ФС для каждого файла. Некоторые из этих атрибутов используются системой и могут быть изменены только рутом. Многие другие ОС уже активно используют этот вид атрибутов. К сожалению, наследники Unix обычно не имели достаточной поддержки расширенных атрибутов, и многие пользовательские программы (такие, как tar) должны быть обновлены, прежде чем смогут сохранять и читать эти атрибуты.
Первым использованием подсистемы расширенных атрибутов являются списки контроля доступа (СКД, ACL) POSIX. Контроль доступа POSIX — это надстройка над стандартными правами доступа Unix, которая позволяет осуществлять более четкий контроль. При необходимости (например при экспорте файлов в NFS), эти ACL могут быть отображены (но с осторожностью) в стандартные права доступа пользователь/группа.
Linux также получил ряд усовершенствований на уровне ФС для повышения совместимости с другими ОС. Во-первых, ядро 2.6. поддерживает Windows Logical Disk Manager (или Dynamic Disks). Это новая схема таблицы разделов, которую WindowsXP и следующие версии приняли для упрощения создания и изменения множества разделов (конечно маловероятно, что Linux в ближайшее время будет использовать новую схему при инсталляции). В Linux 2.6. была изменена (переписана) поддержка NTFS, которая теперь может быть смонтирована в режиме чтение/запись. Поддержка записи все еще находится в экспериментальной стадии и постепенно совершенствуется.
Были сделаны изменения и в поддержке расширенных атрибутов HPFS (используемой в OS/2 и других ОС). Атрибуты в стиле HPFS были выделены в отдельное пространство имен.
Кроме вышеописанного, было сделано множество более мелких изменений в поддержке ФС. Была переписана quota, поддерживающая теперь гораздо большее количество пользователей. Отдельные каталоги могут быть помечены как синхронные, таким образом позволяя сделать все изменения “атомными” (положил сюда, появилось там). Данная возможность наиболее востребована в почтовых системах и базах данных, основанных на каталогах, что немного облегчает восстановление после сбоя диска. В ФС ISO9660 (используемую на CD-ROM) было добавлено “прозрачное сжатие”. И последнее, исключительно для улучшения поддержки баз данных с разделяемой памятью, была создана ФС, базирующаяся на памяти (hugetlbfs).


Интерфейсные устройства для пользователей

Главным внутренним изменением в Linux 2.6. стал сильно переработанный уровень интерфейса пользователя (ИП). Уровень ИП является центром в исследовании пользователем системы Linux, в него входят видеовыход, мышь и клавиатура. В новой версии ядра этот уровень был переработан и “модулирован” (от слова “модуль”, а не “модуляция”) намного больше чем прежде. Теперь стало возможным создать “безголовую” систему Linux, исключив поддержку дисплея и всего прочего. Основное преимущество подобной модульности получают разработчики встроенных систем, создающих устройства, которые могут администрироваться посредством сети или консоли, а для конечных пользователей преимуществом стал перенос в модули предположений по умолчанию об устройствах и архитектурах. Например прежде всегда предполагалось, что если вы работаете с РС, то вам необходима поддержка стандартного контроллера клавиатуры АТ (i8042); новая версия Linux устранила это требование, и ненужный код может быть удален из системы.


Сети

Передовая сетевая инфраструктура всегда была главным козырем Linux. Эта ОС, уже поддерживает большинство доминирующих в мире сетевых протоколов, включая TCP/IP (v4 и v6), AppleTalk, IPX и другие (фактически из распространенных и не поддерживаемых на ум приходит лишь старый и сильно запутанный протокол NetBIOS/NetBEUI от Майкрософта). Как и изменения во многих других подсистемах, большинство изменений в ядре 2.6., касающихся сетевого оборудования, скрыты от глаз и не очевидны. Сюда относятся изменения, дающие возможность воспользоваться преимуществами модели устройств и изменения во многих драйверах устройств. Например, теперь Linux имеет выделенную подсистему MII (Media Independent Interface, интерфейс, не зависящий от среды передачи, он же IEEE 802.3u), которая используется драйверами некоторых устройств. Эта подсистема исключает необходимость существования множества незначительно различных инстанций MII, которые поддерживались различными драйверами и различными способами, тем самым убрав дублирование кода и ненужную работу.
Одним из главных нововведений стала поддержка протокола IPSec. IPSec, или IP Security — это пул протоколов для IPv4 и IPv6, обеспечивающих криптографическую безопасность на сетевом уровне. На сегодняшний день поддерживается шифрование в ядре, включая разнообразные реализации SHA, DES и другие.
Касательно сетевых протоколов, была улучшена поддержка работы с групповой передачей (multicast networking). В основном эта возможность используется «пейджинговыми» системами (такими как Tibco) и ПО организации аудио/видео конференций. Теперь поддержка этих возможностей обеспечивается реализациями таких протоколов как SSM (Source Specific Multicast), MLDv2 (Multicast Listener Discovery) и IGMPv3 (Internet Group Messaging Protocol).
В ядре 2.6. протокол LLC выделен в отдельный стек LLC. LLC (Logical Link Control, он же IEEE 802.2) — это низкоуровневый протокол, используемый протоколами более высокого уровня. Частью данного изменения стало то, что драйверы протоколов IPX, AppleTalk, и Token Ring были переписаны с учетом новой общей подсистемы.
Среди мелких изменений — IPv6 был подправлен и теперь способен работать в сетях Token Ring. Реализация NAT/masquerading была расширена для лучшей поддержки протоколов, требующих нескольких соединений (H.323, PPTP и прочее). Также поддержка Линуксом конфигурирования VLAN-ов теперь не является “экспериментальной”.