Ядро ОС Linux


         

B.1. Загрузка системы. - часть 2


  • Устанавливает границы памяти и вызывает paging_init().
  • Устанавливает каналы IRQ и планирование.
  • Грамматически разбирает командную строку.
  • Если надо, распределяет памть под буффер.
  • Устанавливает драйвера устройств и буферизацию диска, также как и други неосновные компоненты.
  • Определяет циклическую задержку.
  • Проверяет работает-ли прерывание 16 с сопроцессором.
  • После этого ядро готово к move_to_user_mode() (перемещение в пользовательский режим. Затем 0-й процесс, так называемая идеальная задача, продолжает функционировать в бесконечном цикле.

    Процесс init петаетса запустить /exec/init, или /bin/init, или /sbin/init. Если ни один из перечисленных методов не запускается, система запускает "/bin/sh /etc/rc" и ведает основную оболочку на первый терминал. Эта процедура была написана в Linux 0.01, когда ОС состояла из одного ядра и не поддерживала операцию login.

    После запуска функцией exec() программы init с одной из стандартных позиций (предположим что мы находимся в одной из них), ядро не контролирует процесс работы программы. Его ролью в этот момент становится поддерживать процессы с помощью системных вызовов и обслуживать асинхронные события, такие как прерывания аппаратного обеспечения. Многозадачность также устанавливается до этого, поэтому управлением доступа задач с помощью fork() и login занимается программа init. Данный обзор рассмотрит обслуживание ядром асинхронные события, также подробно как размещение информации и организацию кода.




    Содержание  Назад  Вперед