SYSINIT основан на возможности компоновщика брать статические данные, объявленные во многих местах, из исходного кода программы и группировать их вместе как один сплошной блок данных. Эта техника компоновки называется ''linker set'' (компоновочный набор). SYSINIT использует два набора компоновки для работы с двумя наборами данных, содержащих все последовательности вызовов, функцию и указатель на данные для передачи этой функции.
SYSINIT использует два приоритета при организации последовательности вызовов функций. Первый приоритет это идентификатор (ID) подсистемы, дающий общий порядок диспетчеризации функции через SYSINIT. Текущие предопределенные ID перечислены в файле <sys/kernel.h> в списке sysinit_sub_id. Второй используемый приоритет является порядковым номером элемента в подсистеме. Текущие предопределенные порядковые номера элементов подсистемы находятся в <sys/kernel.h> с списке sysinit_elem_order.
На данный момент есть два применения SYSINIT. Диспетчеризация функций при загрузке системы и модулей ядра, и диспетчеризация функций при выключении системы и выгрузке модулей ядра. Подсистемы ядра часто используют SYSINIT при загрузке системы для инициализации структур данных. К примеру, подсистема планирования процессов использует SYSINIT для инициализации структуры с данными живой очереди. Драйверы устройств не должны напрямую использовать SYSINIT(). Вместо этого, драйверы реальных устройств должны использовать DRIVER_MODULE() для вызова функции, которая определит устройство, и если оно присутствует - произведёт его инициализацию. Также будут сделаны некоторые вещи, специфичные для устройств и только после этого будет произведён вызов SYSINIT(). Для псевдо устройств используйте DEV_MODULE().
Пред. | Начало | След. |
Механизм SYSINIT | Уровень выше | Использование SYSINIT |
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.