Sunday, Feb 05th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Запуск и выключение Передача информации ядру и от ядра. Вызов sysctl conf в FreeBSD.

Передача информации ядру и от ядра. Вызов sysctl conf в FreeBSD.

В 4.3 BSD и более ранних системах утилиты sysctl conf, которым была нужна информация от ядра, открывали специальное устройство /dev/kmem, которое предоставляло доступ к памяти ядра. Используя список имен из двоичного файла ядра, утилиты искали адрес нужного символа и читали значение в этом месте. Утилиты с привилегиями суперпользователя могли также использовать эту методику для изменения sysctl переменных ядра.

Хотя этот подход работал, у него было четыре проблемы.

  1. У приложений не было способа надежным образом найти двоичный файл для текущего работающего ядра. Использование неверного двоичного файла привело бы к просмотру /dev/kmem в неправильном месте, что дало бы совершенно неправильный вывод. Для программ, которые изменяли ядро, использование неверного двоичного файла обычно приводило к сбою системы с засорением не имеющих отношения к делу структур данных.
  2. Чтение и интерпретация списка имен ядра требует большого времени. Поэтому приложения, которым приходилось читать структуры данных ядра, работали медленно.
  3. Приложения, которые получали доступ к памяти ядра, могли читать всю память ядра. Злонамеренные программы могли подсматривать входные очереди терминалов или сетей в поиске пользователей, набирающих важную информацию, такую, как пароли.
  4. По мере того как все больше структур данных ядра становились динамически выделяемыми, становилось труднее надежно извлекать нужную информацию.

Например, в 4.3BSD все структуры процесса содержались в одной статически выделяемой таблице, которую можно было прочесть за одну операцию. В FreeBSD структуры процессов выделяются динамически, а ссылки на них осуществляются через связанные списки. Поэтому можно считывать лишь по одному процессу за раз. Поскольку элемент процесса подразделен на множество отдельных частей, каждая из которых находится в разных местах памяти ядра, для извлечения из /dev/kmem каждого элемента процесса требуется по несколько операций поисков и чтений.

Для решения этих проблем в 4.4BSD был введен системный вызов sysctl conf freebsd. Этот расширяемый интерфейс ядра дает возможность управляемого доступа к структурам данных ядра. Перечисленные ранее проблемы разрешаются следующим образом.

  1. Приложениям не нужно знать, с каким двоичным файлом ядра они работают. Работающее ядро отвечает на их запрос и знает, где находятся их структуры данных. Таким образом, всегда возвращаются или изменяются нужные структуры данных.
  2. Не тратится время на чтение или интерпретацию списков имен. Доступ к структурам данных ядра требует лишь нескольких системных вызовов.
  3. Нельзя получить доступ к важным структурам данных. Ядро контролирует набор структур данных, которые оно возвращает. Все остальное в ядре является недоступным. Ядро может наложить свои собственные ограничения на доступ к структурам данных на основе структур данных.
  4. Ядро может использовать свои стандартные механизмы для обеспечения согласованного доступа к распределенным структурам данных. При запросе элементов процесса ядро может получить соответствующие блокировки для обеспечения того, что может быть возвращен согласованный набор данных.

Дополнительные преимущества этого интерфейса включают в себя следующее.

  • Интерфейс sysctl conf в FreeBsd полностью интегрирован с системным вызовом jail, так что процессы, работающие в тюрьмах, могут получить доступ лишь к тем переменным ядра, которые согласуются с их представлением о системе.
  • До обновления структуры данных можно проверить данные, которые должны быть изменены. Если изменение структуры данных требует исключительного доступа, до совершения обновления может быть получена соответствующая блокировка. Таким образом, в связанный список может быть добавлен элемент без риска того, что другой процесс обходит этот список в ходе его обновления.
  • Информация может вычисляться лишь по требованию. Нечасто запрашиваемая информация может вычисляться лишь тогда, когда она затребована, а не все время. Например, значительная часть статистики виртуальной памяти вычисляется лишь, когда ее запрашивает программа отслеживания системы.
  • Этот интерфейс дает суперпользователю возможность изменять параметры ядра, даже когда система работает в безопасном режиме. Чтобы предотвратить должностные преступления, ядро не допускает открывания /dev/kmem, когда система работает в безопасном режиме. Даже когда система FreeBSD работает в безопасном режиме, интерфейс sysctl по-прежнему будет позволять суперпользователю изменять структуры данных ядра, которые не влияют на безопасность.
  • Системный вызов sysctl в FreeBSD описывает пространство имен ядра, используя базу управляющей информации (management information base - MIB). MIB является иерархическим пространством имен, во многом подобным пространству имен файловой системы, за тем исключением, что каждый компонент описывается целым значением, а не строковым именем. У иерархического пространства имен есть несколько преимуществ.
  • Можно добавлять новые поддеревья без влияния на существующие приложения.
  • Если ядро не включает поддержку для подсистемы, информация sysctl conf для этой части системы может быть опущена.
  • Каждая подсистема ядра может определять свои собственные соглашения по именованию. Таким образом, сеть можно разделить на семейства протоколов. Каждое семейство протоколов может быть разделено на специфическую для протокола информацию и т.д.
  • Пространство имен можно разделить на те части, которые являются машинно-независимыми и доступны на каждой архитектуре, и части, которые являются машинно-зависимыми и определяются на основе отдельной архитектуры.

С момента добавления в 4.4BSD системного вызова sysctl conf число переменных, которые он контролирует, было расширено до примерно 1000 значений, управляющих системой виртуальной памяти, файловыми системами, сетевыми стеками и нижележащим оборудованием, а также самим ядром.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 19 гостей онлайн

Реклама на сайте:

Самоучитель по раскрутке сайта: продвижение сайтов.

angry birds