Организация ядра

Можно оценить организацию ядра FreeBSD двояко.

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

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

  • Базовые средства ядра: таймер и обработка системного времени, управление дескрип­торами и процессами.
  • Поддержка управления памятью: замещение страниц и подкачка.
  • Общие системные интерфейсы: операции ввода/вывода, управления и мульти­плексирования осуществляемые с дескрипторами.
  • Файловая система: файлы, каталоги, преобразование имен путей, блокировки файлов и управление буферированием ввода/вывода.
  • Поддержка управления терминалами: интерфейс псевдотерминалов и дисциплины линий связей терминалов. 
  • Средства межпроцессного взаимодействия: сокеты.
  • Поддержка сетевой коммуникации: коммуникационные протоколы и общие сетевые средства, такие, как маршрутизация.

Большая часть программного обеспечения в данных категориях является машинно-независимой и переносимой между различными аппаратными архитектурами.

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

  • Низкоуровневые действия по запуску системы.
  • Обработка исключений и отказов.
  • Низкоуровневая работа с контекстом времени выполнения процесса.
  • Конфигурирование и инициализация аппаратных устройств.

Лишь небольшая часть ядра отвечает за загрузку системы. Этот код используется во время начальной загрузки и отвечает за установку аппаратного и программного окруже­ния. Некоторые операционные системы (особенно с ограниченной физиче­ской памятью) сбрасывают или перекрывают (overlay) программное обеспечение, осу­ществляющее эти функции, после их отработки. Ядро FreeBSD не восстанавливает память, используемую кодом инициализации, поскольку это пространство памяти зани­мает лишь 0,2 процента ресурсов ядра, используемых на обычной машине. Код инициа­лизации не находится также в каком-то определенном месте ядра - он разбросан везде и появляется обычно в местах, логически связанных с тем, что инициализируется

Еще материалы

  • Доставка сигнала потоку -

    Большинство действий, связанных с доставкой сигнала потоку, выполняется в контек­сте этого потока. Поток проверяет свое поле td_siglist на предмет наличия ожидающих сигналов по крайней мере один раз при входе в систему, вызывая cursigQ.

  • Действия psignal в зависимости от состояния потока -

    SLEEPING - Поток заблокирован в ожидании события. Если поток находится в состоянии непрерываемого сна, больше ничего не должно предприни­маться. В противном случае ядро может предпринять действие - либо непосредственно, либо косвенно, - пробудив поток. Есть два дейст­вия, которые можно применить непосредственно. Для сигналов, вызывающих остановку процесса, все потоки в процессе помещаются в состояние STOPPED и родительский процесс уведомляется об из­менении состояния посредством отправки ему сигнала SIGCHLD.

  • Отправка сигнала -

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

  • История появления сигналов -

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

  • Сигналы процессов BSD (Часть 2) -

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