Sunday, Feb 05th

Last update12:13:00 PM GMT

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

Инициализация модулей устройств. Подсистема mbuf.

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

Модули устройств

Модуль

Первая процедура

SI_SUB.

MBUF

mbuf_init()

SI_SUB

INTR

intr_init()

SI_SUB.

SOFTINTR

start_softintr(), start_netisr()

S1_SUB.

DEVFS

devfs_init(), devs_set_ready()

SI_SUB.

INITJF

if_init()

SI_SUB_

DRIVERS

Множество различных процедур

SI_SUB.

CONFIGURE

configure_first()

SI_SUB.

VFS

vfsinitO

SI_SUB_

CLOCKS

initclocks()

SI_SUB

CLIST

clist_init()


Прежде чем могут быть инициализированы какие-либо устройства - в частности, сетевые интерфейсы, - должна быть установлена подсистема mbuf, чтобы у сетевых интерфейсов был набор буферов, который они могут использовать при своей собственной инициализации. Инициализация подсистемы mbuf осуществляется модулем SISUBMBUF и процедурой mbufinit(). Подсистеме mbuf нужно управлять двумя видами памяти: небольшими mbuf и кластерами mbuf cluster. Каждый вид памяти выделяется из своей собственной области памяти, чтобы сохранить распределитель простым и чтобы остающаяся память не фрагментировалась выделениями различных размеров.

В этот момент последовательности запуска в системе не разрешены прерывания. Теперь ядро устанавливает все потоки прерываний, которые будут обрабатывать прерывания, когда система начнет работу. Прерывания устанавливаются двумя модулями: SISUBINTR, который устанавливает потоки прерываний, обрабатывающие прерывания от устройств, и SISUBSOFTINTR, который создает потоки программных прерываний. Потоки программных прерываний используются службами, которые обрабатывают асинхронные события, которые не генерируются аппаратно. Потоки программных прерываний предоставляют программные часы, которые поддерживают подсистему выносок (callout). Они также предусматривают сетевой поток, который забирает входящие пакеты из очередей сетевых интерфейсов и передает их через сетевой стек.

Как часть запуска реальных аппаратных устройств, ядро сначала инициализирует файловую систему устройств, а затем готовит сетевой стек для работы с устройствами посредством вызова процедуры if_init(). Процедура if_init() не инициализирует какие-либо сетевые интерфейсы; она лишь устанавливает структуры данных, которые будут их поддерживать. В конечном счете устройства сами инициализируются модулями SISUBDRIVERS и SISUBCONFIGURE. Все устройства в системе инициализируются посредством автоконфигурирования.

После конфигурирования устройств инициализируется виртуальная файловая система. Запуск VFS является многоэтапным процессом, который влечет за собой инициализацию самой VFS, подсистемы vnode и подсистемы кеша имен и имен путей, которая отображает имена путей на массив inode. Поддержка именованных каналов также инициализируется как часть VFS.

Следующими системами для запуска являются системы, относящиеся к часам реального времени, предоставляемым аппаратным обеспечением. Процедура initclocks(), являющаяся частью модуля SISUBCLOCKS, вызывает специфическую для архитектуры процедуру cpu_initclocks() для инициализации в системе аппаратных часов и их запуска. После начала работы аппаратных часов запускаются другие службы, такие, как протокол сетевого времени (Network Time Protocol - NTP), опрос устройств и счетчик времени. Последние структуры данных для инициализации находятся в подсистеме терминалов модуля SI SUBCLIST. Все, что нужно сделать, - это выделить начальный набор cblock и добавить их в clist.

mbuf, mbuf freebsd, mbuf cluster


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

Интернет-магазин мебели MebSalon:  мебель для кухни . Мои рецепты.
Сейчас 20 гостей онлайн

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