Tuesday, Sep 07th

Last update09:09:00 PM GMT

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

Инициализация ядра

Когда ядро FreeBSD запускается программой boot, она выполняет инициализацию, готовясь к выполнению прикладных программ. Процесс инициализации делится примерно на три этапа. На первом этапе необходим созданный вручную на языке ассемблера код для настройки оборудования для того, чтобы мог действовать более общий код не на языке ассемблера.

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

Запуск на языке ассемблера

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

  • Установку стека времени выполнения.
  • Идентификацию типа процессора, на которой выполняется система.
  • Вычисление объема физической памяти на машине.
  • Включение аппаратной трансляции виртуальных адресов.
  • Инициализацию аппаратного управления памятью.
  • Установку при необходимости таблиц для SMP.
  • Создание аппаратного контекста для процесса 0.
  • Вызов начальной, написанной на С точки входа в систему.

Хотя детали этих шагов могут отличаться от архитектуры к архитектуре, описанная здесь общая схема применима к любой машине, на которой работает FreeBSD.
Когда программа boot запускает ядро FreeBSD, она устанавливает лишь два компонента состояния машины.

1. Все прерывания блокируются.
2. Аппаратная трансляция адресов отключается таким образом, что все ссылки памяти относятся к адресам физической памяти.

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

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

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

такелажные работы услуги включают в себя транспортировку предметов меблировки рояли шкафы кровати и т
Сейчас 21 гостей онлайн

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

"яхонты" - качественный индивидуальный и корпоративный отдых в Подмосковье.