CFA LogoCFA Logo Computer
Загрузка поиска
Новости Компьютеры Прайс-лист [Новое] Прайс-лист [Б/У] Для ноутбуков Конфигуратор ПК Заказ, Оплата, Доставка Сервис объявления Драйвера Статьи Как нас найти Контакты
Новости
RSS канал новостей
Тайваньская компания MSI осуществила сегодня анонс фирменной модели графического ускорителя GeForce ...
Компания Manli опубликовала официальный пресс-релиз, посвященный своей новой видеокарте. Энтузиастам ...
Компания Sony накануне раскрыла некоторые подробности доступности своего нового флагманского смартфона ...
В списке новинок формата фаблет японская компания Sony готовит нового флагмана, который в настоящее ...
Компания Acer сделала наконец официально доступным свой новый ноутбук, рассчитанный на профессиональных ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Дела сердечные

Сергей А.ЯРЕМЧУК grinder@ua.fm

Прошло уже больше десяти лет с того момента, как в одной из конференций раздалось: «Hello everybody out there using minix — I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386 (486) AT clones». C тех пор Linux превратился из жалкого подобия Minix в своебразный символ проекта GNU (кстати, первоначальное название было Freax). И вопреки утверждению Торвальдса, что «it probably never will support anything other than AT-harddisks, as that's all I have », Linux сейчас поддерживает большинство устройств, и встретить эту систему можно практически везде — от мобильных телефонов и банкоматов до суперкомпьютеров. Само ядро, первоначально поддерживающее только базовые функции управления памятью, задачами и межпроцессорным взаимодействием, сейчас превратилось во вполне жизнеспособную, защищенную и стабильную систему, на которую обратили внимания банки, правительства и даже рядовые пользователи. В сентябре развитие этой системы получило новый толчок. Положив конец многочисленным бетам, ядро версии 2.5 наконец перешло в пока что тестовый предрелизный номер 2.6. Для тех, кто не в курсе, сообщаю, что четные версии стабильны и предназначены для широкого использования, а нечетные — в основном для разработчиков. Предлагаю вкратце пройтись по новым функциям, чтобы узнать, что нас ожидает в будущем. Да что там в будущем — это уже все есть! Тем более, что производители дистрибутивов уже заявили о готовности выпустить в ближайшее время системы с новым ядром.

Работа с процессами

Начнем с главного. Ядро 2.6 получило новый планировщик задач, написанный Ingo Molnar’ом, о котором я уже упоминал в материале о real-time (см. статью «Чисто реальный Linux», МК №28 (251)). Алгоритм назван O(1) sheluder. В планировщике задач ядер серии 2.4 алгоритм пересчета интервала требует, чтобы все процессы отработали свой интервал прежде, чем будут повторно вычислены новые. В системе с большим количеством процессов большинство из тех, что отработали свой временной интервал и ждут пересчета (для нового интервала), остаются некоторое время не у дел, что уменьшает эффективность в многопроцессорных системах. К тому же при таком варианте процесс может захватить временно незанятый процессор, который может готовиться к выполнению более важной задачи, а потом так и прыгать (bouncing) между процессорами, что, естественно, приведет к уменьшению КПД. В планировщике задач каждый процесс закреплен за своим процессором. В O(1) sheluder при планировании процессов для пущей справедливости используются две матрицы: активные (active) и истекшие (expired). В активной матрице содержатся задачи, еще не отработавшие свой timeslices, в истекшей — отсортированный список задач с истекшими временными интервалами. По мере опустошения active, когда все текущие задачи выполнены, матрицы меняются местами. Поиск индексов задач с более высокими приоритетами в данном случае легче. При этом удалось избежать ситуаций, когда на нескольких «камнях» процессы могли одновременно засыпать, пробуждаться или производить context-switch: если есть работающий процесс, он будет продолжать работать, тем самым предотвращается простой системы. Если процесс генерирует большую нагрузку на систему (больше определенной величины), чтобы избежать захват процессора, его приоритет автоматически уменьшается. Но особое внимание уделено интерактивным событиям вроде щелчка мышки или нажатия клавиши, для обработки которых приспособлены realtime-подобные механизмы, так что теперь пользователю не придется дожидаться реакцию на эти события. Цикл пересчета интервалов был устранен полностью. O(1) sheluder используется для пробуждения, переключения контекста и прерывания по таймеру.

Из новинок, также принадлежащих перу Ingo Molnar, следует отметить улучшенную модель нитей (потоков управления, использующихся в SMP) — по схеме 1:1: одна нить ядра — одна пользовательская нить, — и поддержка NPTL (Native Posix Threading Library), которую уже могли попробовать в работе пользователи RedHat 9. Улучшенное управление потоками помогает решать такие задачи сервера как исполнение Java-программ и СУБД, а также способствует и повышению производительности некоторых настольных программ, таких как web-браузер Mozilla, комплекс ПО OpenOffice и др. Обработка потоков управления заметно возросла, а число самих процессов (PID) возросло до 2 миллиардов, так что на крупных серверах не придется постоянно следить за лимитом PID. Это удалось достигнуть благодаря применению TLS (Thread Local Storage), технологии системных вызовов, которая учитывает их распределение в таблице дескрипторов GDT (Global Descriptor Table) и позволяет снять ограничение на число нитей (для версии 2.4 существовал лимит в 8.192 на процессор). Введен новый системный вызов exit_group (), который совместно с O(1) sheluder позволяет за две секунды закрыть процесс с сотней тысяч нитей — для сравнения, в ядре 2.4 на это уходило 15 минут, так что почувствуйте разницу. Плюс, согласуясь с новыми требованиями, переработана файловая система процессов /proc, которая ранее при значительном их количестве начинала нагружать систему. Теперь же главная ее задача сводится к слежению за родительским процессом, потомки же отодвигаются на второй план. Согласно различным тестам, нововведения дают выигрыш в первую очередь на многопроцессорных системах, в однопроцессорных пока лидирует ветка 2.4, но разработчики обещают к выходу официального релиза эту проблему побороть.

Preemptible kernel

То ли Торвальдс наконец уступил давлению общественности, то ли веяния времени на него повлияли, но начиная с версии 2.5.4-pre6 в ядро включен код, который позволяет делать его выгружаемым (рreemptible). При этом пользовательское приложение получает возможность захватить процессор на большее время (основное ядро как бы выгружается, резервируется), дополнительно уменьшается время отклика на событие (латентность), что позволит обрабатывать аудио/видео и другие задачи в реальном времени. Дополнительно, чтобы уменьшить время отклика, крупные узлы ввода-вывода также были переписаны. Помимо специализированных задач, такое приоритетное ядро может быть эффективно в любом интерактивном контексте. Это найдет применение не только на пользовательских и промышленных компьютерах, но также и на встроенных устройствах.

Управление виртуальной памятью

Естественно, повышение числа максимально возможных процессов потребовало переработки механизма виртуальной памяти. Как известно, аппаратная память, установленная на компьютере, переадресуется в виртуальную, в которой и работают процессы, и которая гораздо больше реально установленной. Переадресация между виртуальной и физической памятью происходит в аппаратных таблицах страниц, для каждой виртуальной памяти выдающих соответствующий участок физической. Все хорошо, но есть маленький такой недостаток. Некоторые общие для всех процессов участки памяти (там могут быть, например, библиотеки) содержатся в одном и том же физическом адресе, и это правильно — зачем плодить кучу одинаковых данных? Этот адрес содержится во всех виртуальных адресах, использующих соответствующий физический участок. И теперь, чтобы сделать доступной физическую память, освобождающуюся при завершении работы программы, приходится искать этот адрес сплошь по всем работающим процессам, и освобождается он тогда и только тогда, когда счетчик для физического адреса во всех программах обнулится. А теперь представьте себе хорошо нагруженный сервер и количество программ, которые могут быть на нем запущены. Поиск свободного адреса может затянуться. В менеджере памяти используется механизм, названный reverse mapping (rmap), использующий дополнительную структуру pte_chain, которая содержит адреса занятых страниц и может вернуть адреса, где эта страница упомянута. Таким образом, «удаление» происходит мгновенно. Правда, такая структура забирает 64 Кб памяти на каждые 256 Мб, но это, согласитесь, мелочи.

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

В новом ядре наконец появилась поддержка журналируемых файловых систем XFS и JFS, так что уже не придется возиться с установкой и поиском патчей. Можно форматировать раздел и под файловую систему Reiser как третьей, так и четвертой версии —при помощи соответствующих утилит. Естественно, некоторые уточнения получила и стандартная ext2/ext3: для них добавилась возможность создания списков контроля доступа (ACL, Access Control List, его поддерживают все файловые системы ядра 2.6), появление в ядре поддержки этой возможности позволяет утверждать, что Linux потихоньку идет к нормальным стандартам. Кроме того, теперь не придется накладывать патчи, чтобы иметь возможность работать с UDF. Да и вообще, включена поддержка всех файловых систем, известных на данный момент, в том числе и LVM второй версии (эта система позволяет не беспокоиться о правильном разбиении жесткого диска, объединяя все указанные разделы в один том, из которого можно выбрать любой объем). Для сравнения приведу результат теста Linux: Benchmarking Filesystems In 2.6.0-test2, найденный мной на странице http://kerneltrap.org/node/view/715. Там же можно найти и мнения различных людей по поводу полученных результатов. При записи и копировании каталога (mozilla build tree) размером 295 Мб файловые системы показали результат, который, я полагаю, снимает все вопросы (Табл. 1).

Таблица 1.

Security

В ядро встроено около двух десятков crypto API для поддержки различных алгоритмов шифрования (HMAC, MD4, MD5, SHA-1, SHA256, SHA384, SHA512, DES, Triple DES EDE, Blowfish, Twofish, Serpent, AES, CAST5, CAST6). Появилась и возможность организовать шифрование IP-траффика при помощи IPSec (IP Security), также теперь будет проще организовать VPN стандартными средствами. Но и это мелочи по сравнению с добавлением патча SELinux, разрабатываемого в недрах US National Security Agency (NSA) (http://www.nsa.gov/selinux). При помощи этого патча можно заменить стандарную Unix'овскую модель доступа к файлам DAC (Discretionary Access Control) — она описывает права каждого пользователя на доступ к конкретным файлам, выполняющиеся программы при этом имеют те же права доступа, что и запустивший их пользователь, но при этом игнорируется другая, не менее значимая информация о роли пользователя в системе, функции и уровне доверия конкретной программы. При этом скомпрометированная программа, запущенная от имени root, несет серьезную угрозу системе. SELinux использует совсем другую модель доступа RBAC (Role Based Access Control), предполагающую понятия ролей, которые раздаются пользователям по необходимости, и объектов, к которым эти роли могут обращаться. Теперь задача принудительного контроля доступа заметно упрощается, и Apache, запущенный под root, никогда не получит доступ к /etc/passwd (если сисадмин этого не захочет :-)). Дополнительно улучшена работа с модулями, которые теперь не могут «перегружать» важные системные вызовы их собственными и изменять таблицу системных вызовов, что устраняет проблему атаки при помощи LKM (loadable kernel modules). Генератор случайных последовательностей задействует для работы различные прерывания аппаратуры, действия пользователя и другие случайные явления в системе.

Audio и мультимедиа

Кроме printable kernel, позволяющего улучшить работу с мультимедиа, в ядро 2.6 дополнительно к драйверам OSS (которые помечены как DEPRECATED) встроены драйвера ALSA (Advanced Linux Sound Architecture), имеющей, помимо меньших задержек при обработке звука, еще множество достоинств, вроде поддержки нескольких звуковых карт, USB-audio и MIDI, full-duplex и пр. Добавилась поддержка новых устройств (при этом многое было перезаписано наново). Теперь Linux будет поддерживать большее число всевозможных radio- и TV-тюнеров, web-камер, устройств захвата видео и устройств Digital Video Broadcasting (DVB), всяких беспроводных девайсов.

Кратко об остальных изменениях

Многие проекты, доселе развивавшиеся отдельно и устанавливаемые в виде патчей, теперь были включены в основное ядро. В первую очередь это новая концепция поддержки субархитектур, позволяющая легче переносить систему на другие платформы; добавилась и поддержка встроенных систем (проект uCLinux), переработан код, отвечающий за поддержку hyperthreading, появившуюся еще в ядре 2.4.17 (раньше, чем в Microsoft) — ранее не всегда в приложениях достигалась максимально возможная производительность, добавлена возможность эмуляции Linux в Linux (проект UML (User mode Linux)). Также появилась поддержка процессоров, установленных на ноутбуках и умеющих понижать рабочую частоту при неполной нагрузке для экономии батарей (ее можно пристроить и отдельно, взяв с http://sourceforge.net/projects/cpufreqd). Изменения также коснулись обработки прерываний, работы IDE\SCSI-устройств. В последнем случае применена концепция объединенной модели устройства, представляющую его полную архитектуру и надстройку системы, содержащую ряд структур данных. Выгоды включают улучшенное управление электропитанием, контроль над устройствами и более простой администрацией связанных с устройством задач.

Пару слов о компиляции

Наконец-то разработчики перестали мучить новичков, пытающихся запомнить все шаманские команды при сборке ядра. Теперь для компиляции достаточно ввести make или make all, и система сама соберет (но не установит — в Linux без спроса ничего не делается) все необходимое. Но перед сборкой необходимо обновить некоторые основные утилиты, чтобы собрать новое ядро (см. Табл. 2), очень желательно также обновить утилиты работы с файловыми системами, сетью и пр.

Таблица 2.

Далее распаковываем новое ядро, полученное с http://www.kernel.org/, размером 39.5 Мб:

Создаем символическую ссылку на /usr/src/linux:

Теперь заходим:

Для конфигурирования вводим одну из следующих команд:

make config — выбираем параметров в bash-подобной оболочке, просто отвечая на вопросы, без возможности вернуться к предыдущему пункту;

make menuconfig — настройка при помощи псевдографического меню;

make xconfig — настройка в новой графической среде, используя QT-библиотеку для вывода меню (вероятно, для тех, кто не любит Gnome);

make gconfig — то же, но используется библиотека Gtk;

make oldconfig — очень полезная штука при обновлении ядра и стабильной конфигурации системы. Копируем все в каталог, в котором сейчас находимся файл .config со старой конфигурацией ядра, и вводим данную команду. Все старые настройки берутся по умолчанию, а пользователю задаются только вопросы относительно новых пунктов, которых не было в предыдущем ядре.

Команда make dep, которая вводилась после конфигурирования ядер 2.4 и ниже, уже не используется, и при попытке ее ввести система выдаст сообщение: мол, на дворе двадцать первый, а вы ерундой страдаете, и собирает систему по команде make (она же make all), при которой выполняется полная сборка ядра. Но вместо этого лучше ввести каждую команду отдельно, чтобы контролировать ход процесса:

Копируем ядро на свое место:

Конфигурируем загрузчик, и после перезагрузки наслаждаемся полученным результатом.

В новом ядре изменений так много, что первоначально даже поговаривали, будто номер его будет 3.0, а не 2.6. Ведь перед нами действительно продукт совсем иного качества, и это даже не шаг, а прыжок вперед. Но ведь в общем-то не в нумерации дело. Фактом остается то, что все это уже доступно, причем бесплатно, а пользователям других систем остается только ждать, пока все эти нововведения переберутся на их компьютеры :-). Линуксоиды же получат новое ядро в ноябре, именно тогда обещают финальную версию. В Интернете сейчас скопилось достаточно материала, но тем, кто хочет познакомиться с изменениями более подробно, первоначально советую заглянуть на http://kerneltrap.org.

Linux forever!

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы: *
captcha
Обновить






Рейтинг@Mail.ru
Хостинг на серверах в Украине, США и Германии. © www.sector.biz.ua 2006-2015 design by Vadim Popov