Действительно ли необходимо ли программировать в ядре?

При размышлении о записи кода для среды ядра думайте тщательно. Программирование в ядре может быть трудной и опасной задачей. И часто существует способ выполнить то, что Вы хотите обойтись без касания ядра.

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

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

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

Со всем этим в памяти, сообщение ясно. Это находится в общих интересах поместить как можно меньше код в ядро. И любой код, заканчивающийся в ядре, должен быть заточен и строго протестирован.

Содержание:

Когда код должен находиться в ядре

Ряд варранта ситуаций, загружающего драйвер или расширение в среду ядра:

Если программное обеспечение, которое Вы пишете, не соответствует ни одного из этих критериев, оно, вероятно, не принадлежит ядра. Если Ваше программное обеспечение является драйвером для диска, сетевого контроллера или клавиатуры, оно должно находиться в ядре. Если это - расширение файловой системы, это должно жить в ядре. Если с другой стороны это используется только время от времени единственной программой пространства пользователя, это должно быть загружено программой и находиться в нем. Драйверы для принтеров и сканеров попадают в эту последнюю категорию.

Альтернативы резидентному ядром коду

Apple обеспечивает много технологий, которые могли бы позволить Вам выполнить то, что Вы хотите сделать и остаться вне ядра. Сначала высокоуровневый APIs, предоставляющий Вам некоторый доступ аппаратного уровня. Например, CFNetwork и POSIX, объединяющий APIS В СЕТЬ, являются мощным ресурсом для многих сетевых возможностей, и Базовая Графика (Кварц) позволяет Вам сделать некоторые довольно низкоуровневые вещи с графической подсистемой.

Во-вторых, и столь же важный, «технология» интерфейса устройства платформы Набора I/O. Используя сменную архитектуру, эта технология позволяет Вашему приложению взаимодействовать с ядром для доступа к большинству аппаратных средств. Кроме того, Вы можете – с небольшой справкой от Использования набора I/O POSIX APIs для доступа последовательный, хранение или сетевые устройства.