69767

Завантаження операційної системи Linux

Лекция

Информатика, кибернетика и программирование

Під час завантаження Linux використовують двоетапний завантажувач. Є кілька програмних продуктів, що реалізують такі завантажувачі, найвідоміший із них l i l o (від Іішіх loader). Він може бути встановлений як у MBR (замінивши там код, що завантажує перший сектор активного розділу)...

Украинкский

2014-10-09

57.5 KB

0 чел.

Тема 15. Завантаження операційної системи Linux

15.1. Особливості завантажувача Linux

Під час завантаження Linux використовують двоетапний завантажувач. Є кілька програмних продуктів, що реалізують такі завантажувачі, найвідоміший із них l i l o (від Іішіх loader). Він може бути встановлений як у MBR (замінивши там код, що завантажує перший сектор активного розділу), так і у завантажувальному секторі якогось (звичайно активного) розділу диска. Другий підхід є безпечнішим за умов, коли на комп'ютері встановлено кілька ОС у режимі мультизавантаження, оскільки деякі ОС можуть перезаписувати MBR за своєю ініціативою.

Перша частина l i 1 о, записана у завантажувальний сектор або MBR, під час свого виконання готує пам'ять і завантажує в неї другу частину. Та зчитує із диска двійкове відображення карти наявних на комп'ютері варіантів завантаження (різні ОС, різні установки Linux тощо) і пропонує користувачу вибрати один із них (за допомогою підказки «LILO boot:»). Зазначимо, що вихідну версію карти варіантів завантаження створює користувач (системний адміністратор) у вигляді звичайного текстового файла /etc/lilo.conf. Після кожної зміни карти необхідно обновлювати її відображення на диску, використовуване завантажувачем. Для цього виконують команду (із правами root):

Після вибору користувачем одного із варіантів завантаження поведінка завантажувача залежить від характеру файлової системи для розділу. У разі вибору розділу з іншою ОС (наприклад, Windows) зчитують у пам'ять і виконують завантажувальний сектор цього розділу (тому за допомогою 1 і 1 о можна завантажити будь-яку ОС), якщо ж вибрано розділ із Linux, у пам'ять завантажують ядро системи (його адреса на диску міститься в карті варіантів завантаження). Після завантаження у пам'яті з'являється стиснуте ядро системи і придатний для виконання код двох функцій завантаження: setup () і startup_32(). Код завантажувача переходить до виконання функції setup(), починаючи ініціалізацію ядра.

15.2. Ініціалізація ядра

Перший етап ініціалізації ядра відбувається у реальному режимі процесора. Переважно здійснюється ініціалізація апаратних пристроїв (Linux не довіряє цього BIOS). Функція setupO визначає фізичний обсяг пам'яті у системі, ініціалізує клавіатуру, відеокарту, контролер жорсткого диска, деякі інші пристрої, переви-значає таблицю переривань, переводить процесор у захищений режим і передає управління функції startup_32(), код якої також перебуває поза стиснутим ядром.

Функція startup_32() задає сегментні регістри і стек, розпаковує образ ядра і розташовує його у пам'яті. Далі виконують код розпакованого ядра, при цьому керування спочатку дістає функція, яку також називають startup_32(). Вона формує середовище виконання для першого потоку ядра Linux («процес 0»), створює його стек (із цього моменту вважають, що він є), вмикає підтримку сторінкової організації пам'яті, задає початкові (порожні) оброблювачі переривань, визначає модель процесора і переходить до виконання функції start_kernel ().

Функцію start_kernel() виконують у межах потоку ядра «процес 0», завершуючи ініціалізацію ядра. Вона доводить до робочого стану практично кожен компонент ядра, зокрема:

ініціалізує таблиці сторінок і всі дескриптори сторінок;

остаточно ініціалізує таблицю переривань;

ініціалізує кусковий розподілювач пам'яті;

встановлює системні дату і час;

виконує код ініціалізації драйверів пристроїв;

робить доступною кореневу файлову систему (де розташовані файли, необхідні для завантаження системи).

Крім того, за допомогою функції kernel_thread() створюють потік ініціалізації («процес 1»), що виконує код функції і n і t(). Цей потік створює інші потоки ядра і виконує програму /sbin/init, перетворюючись у перший у системі процес користувача і nit. Зазначимо, що для коректного завантаження іnіt повинна бути доступна коренева файлова система із найважливішими розділюваними бібліотеками (каталог /lib має бути на тому самому розділі, що і кореневий каталог /).

На перетворенні цього потоку в і nit ініціалізація ядра завершена, функція start_kernel () переходить у нескінченний цикл простою (idle loop), не займаючи ресурсів процесора. Подальша ініціалізація системи відбувається під час виконання і nit.

15.3. Виконання процесу init

Процес init є предком усіх інших процесів у системі. Після запуску він читає свій конфігураційний файл /etc/inittab і запускає процеси, визначені в ньому. Набір процесів, які запускаються, залежить від дистрибутива Linux. Приклад виконання init під час завантаження системи Red Hat Linux наведено нижче.

Файл /etc/inittab визначає кілька рівнів роботи (runlevels). Кожен із них - це особлива програмна конфігурація системи, у якій може існувати тільки певна група процесів. Рівень роботи визначає режим функціонування ОС (однокори-стувацький, багатокористувацький, перезавантаження тощо). Стандартними рівнями роботи є рівні з 0 по 6. Ось найважливіші з них:

  •  0 — завершення роботи (shutdown);
  •  1 — однокористувацький режим (single user mode) - у ньому не дозволене виконання деяких фонових процесів, доступ до системи через мережу тощо;
  •  3 — стандартний багатокористувацький режим (звичайно цей рівень задають за замовчуванням);
  •  6 — перезавантаження (reboot).

Для деяких рівнів задано символьні синоніми (наприклад, для рівня 1 синонімом є рівень S). У файлі /etc/inittab визначено різні командні файли (із програмами, написаними мовою командного інтерпретатора, далі їх називатимемо скрип-тами), які повинні виконуватися для різних рівнів виконання.

Синтаксис рядка /etc/inittab такий:

ідентифікатор:рівень_роботи:дія:програма

Перший скрипт, який запускає і nit, визначений у рядку /etc/inittab із дією, заданою ключовим словом sysinit. Точне його ім'я залежить від поставки Linux, у Red Hat це /etc/rc.d/rc.sysinit. Його називають також стартовим скриптом. Ось відповідний рядок /etc/inittab:

si::sysinit:/etc/rc.d/rc.sysinit

Стартовий скрипт налаштовує базові системні сервіси, зокрема: 4-  час від часу перевіряє диски на помилки командою fsck;

♦ завантажує модулі ядра для драйверів пристроїв, які не повинні бути завантажені раніше;

  •  ініціалізує ділянку підкачування командою swapon;

♦ монтує файлові системи відповідно до файла /etc/fstab.

У файлі /etc/fstab задано, яка файлова система має бути змонтована у який каталог кореневої файлової системи. Кожний рядок цього файла відповідає одній операції монтування і містить інформацію про тип файлової системи, розділ, де вона розташована, точку монтування тощо.

Крім стартового скрипта, у каталозі /etc/red перебувають кілька інших скриптів:

♦ /etc/rc.d/rc — викликають у разі зміни рівня виконання; як параметр він приймає номер рівня, звичайно запускає всі скрипти, що відповідають рівню (такі скрипти розглянемо трохи пізніше);

♦ /etc/rc.d/rc.local — викликають останнім під час завантаження системи; він містить специфічні для конкретної машини команди (зазвичай не рекомендують поміщати такі команди у стартовий скрипт, оскільки у разі перевстановлення або відновлення системи той файл стирають, a rc.local - ні).

Запуск системних фонових процесів та ініціалізацію системних служб (наприклад, мережних інтерфейсів) виконують із використанням набору файлів і підкаталогів у каталозі /etc.

У каталозі /etc/rc.d/initd зберігають набір індивідуальних стартових скриптів, відповідальних за керування різними фоновими процесами і службами. Наприклад, скрипт /etc/rc.d/init.d/httpd відповідає за керування веб-сервером Apache. Кожний стартовий скрипт має обробляти отримані як параметри ключові слова start і stop, запускаючи і зупиняючи відповідний процес.

# /etc/rc.d/init.d/httpd start

Стартові скрипти не запускаються безпосередньо процесом і nit під час завантаження системи. Для організації такого запуску в /etc/red є набір каталогів (rcO.d ... rc6.d), кожен із них містить символічні зв'язки, що вказують на стартові скрипти. У разі переходу на певний рівень виконання і nit запускає скрипт /etc/rc.d/rc, який переглядає всі зв'язки каталогу, що відповідає рівню, і виконує дії відповідно до їх імен. Кожен зв'язок має деяке ім'я у форматі Кютім'я або Бигам'я (де пп - цифри, наприклад S70httpd), яке характеризується такими особливостями.

  •  Якщо ім'я починається на S, то на цьому рівні служба має бути запущена (якщо вона не запущена, потрібно виконати відповідний стартовий скрипт із параметром start); на К - на цьому рівні служба не повинна бути запущена (якщо вона запущена, її потрібно зупинити, виконавши стартовий скрипт із параметром stop).

♦ Число nn задає номер послідовності, що визначає порядок запуску або зупинки служб у разі переходу на рівень. Що більший nn, то пізніше виконається скрипт; важливо, щоб до цього часу вже були запущені всі служби, від яких залежить ця. Наприклад, ініціалізацію мережі потрібно виконувати якомога раніше, тому зв'язок, що вказує на скрипт, при цьому може бути такий: S20network.

♦ Ім'я зв'язку завершують іменем стартового скрипта, на який він вказує.
Наприклад, коли і
nit переходить на рівень виконання 3, усі зв'язки, що почи
наються на
S у каталозі /etc/rc.d/rc3.d, буде запущено в порядку їхніх номерів, і для кожного запуску буде задано параметр start. Після виконання всіх скриптів вимоги до рівня виконання 3 задовольняться.

В /etc/inittab має бути заданий рівень виконання за замовчуванням, для чого потрібно включити у файл рядок із ключовим словом і nitdefault. Система завершить своє завантаження після переходу на цей рівень. Звичайно, це - рівень 3.

id:3:initdefault:

Після запуску всіх скриптів для переходу на рівень за замовчуванням і nit завжди запускає спеціальну програму getty, що відповідає за зв'язок із користувачем через консоль і термінали (звичайно створюють кілька таких процесів - по одному на кожну консоль). Є різні реалізації цієї програми, у Linux популярними є agetty і mingetty. Саме getty видає підказку «login:».

Рядок у /etc/inittab, що задає запуск версії getty, має такий вигляд (ключове слово respawn означає, що процес буде перезапущено, якщо він припиниться):

1:2345:respawn:/sbin/mi ngetty ttyl

Після того як користувач ввів своє ім'я, getty викликає програму /bin/login, що запитує пароль (видавши підказку «password:»), перевіряє його та ініціалізує сесію користувача. У більшості випадків це зводиться до запуску для користувача копії командного інтерпретатора (звичайно bash) у його домашньому каталозі. У результаті користувач може розпочати роботу із системою.

Процес іnit залишається у пам'яті і після завантаження. Він відповідає за автоматичний перезапуск процесів (для цього потрібно прописати програму в /etc/ inittab із дією respawn, як getty); і nit також стає предком для всіх процесів, чий безпосередній предок припинив свою роботу.

Як зазначалося, у разі перезавантаження або зупинки система також переходить на певні рівні виконання, і при цьому виконуються скрипти з /etc/rc.d/init.d через зв'язки в каталогах для цих рівнів (rcO.d для зупинки, rc6.d для перезавантаження; такі зв'язки починаються на К). Для того щоб розпочати перезавантаження або зупинити систему, використовують спеціальну програму /sbin/shutdown, доступну лише суперкористувачу root. Консоль Linux також підтримує організацію перезавантаження від клавіатури натисканням на Ctrl+Alt+Del.

Контрольні питання:

1. Особливості завантажувача Linux.

2. Ініціалізація ядра.

3. Виконання процесу init.


 

А также другие работы, которые могут Вас заинтересовать

41804. Проверка выполнения внутренних соединений обмоток электрических машин 53.42 KB
  Укладку в пазы секций обмоток и соединение их а также изоляцию соединений производят по инструкции предприятия изготовителя. Проверку выполнения внутренних соединений обмоток приходится производить в следующих случаях: после капитального ремонта электрических машин если по каким-либо причинам отсутствует или перепутана маркировка выводов а также когда нарушен нормальный режим работы машины выявленный при пуске и испытаниях. Проверка правильно выполненных внутренних соединений обмоток и выводов машин Постоянного тока производится указанными...
41805. Настройка зубодолбёжного станка 5А12 на нарезание зубчатого колеса 531.85 KB
  Зацепление сопровождается следующими рабочими движениями: Возвратнопоступательных движением долбяка главное движение осуществляющим процесс резания. Вращением долбяка являющимся круговым движением подачи. Вращением заготовки согласованным с вращением долбяка движение обкатки. Радикальным врезанием долбяка в заготовку на полную высоту зуба если колесо обрабатывается за один проход или на часть высоты если колесо обрабатывается в несколько проходов.
41806. Система питания бензинового двигателя 231.95 KB
  Система питания автомобилей ВАЗ-21213 включает приборы подачи топлива и воздуха, приготовления горючей смеси и выпуска отработавших газов. Система питания состоит из топливного бака 34, топливного насоса 27, топливопроводов, воздушного фильтра, карбюратора 26, глушителей и трубопроводов. Система с обратным сливом части топлива от карбюратора 26 через калиброванное отверстие патрубка карбюратора в топливный бак. Ось рычага механической подкачки топлива; 2. Рычаг механической подкачки топлива; 3. Рычаг ручной подкачки топлива; 15. Фильтр тонкой очистки топлива; 29.
41808. Статистические функции MS Excel 2010. Построение рядов данных 495.52 KB
  Формат записи функции: МИН число1; число2; Количество допустимых аргументов среди которых находится минимальное значение равно 255. Формат записи функции: МАКС число1; число2; Количество допустимых аргументов среди которых находится максимальное значение равно 255. Формат записи функции: СРЗНАЧчисло1; число2; Количество допустимых аргументов среди которых находится среднее значение равно 255. Формат записи функции: СЧЕТчисло1; число2; Количество допустимых аргументов среди которых находится среднее значение равно 255.
41809. Команды черчения элементов конструкции в программе AutoCAD 69.08 KB
  После этого в командной строке появиться приглашение Specify strt point:.0000 Specify next point or [rc Close Hlfwidth Length Undo Width]: Программа сообщает что текущая толщина полилинии равна 0 и предлагает указать следующую точку линии. После ввода А rc в командной строке появляется подсказка с предложением выбрать метод построения дуги: Specify endpoint of rc or [ngle Center Close Direction Hlfwidth Line Rdius Second pt Undo Width]: В данном случае доступны следующие методы. В командной строке отобразится следующая подсказка: Specify...
41810. Продукт компании SkyBiz-2000 368.42 KB
  Компания предоставляет годовой абонемент на использование пакета InterNetуслуг стоимостью 100. Став членом клуба каждый получает доступ к постоянно обновляемым ресурсам InterNet. Это также ряд онлайновых учебных пособий возможность приобрести практические навыки ведения бизнеса в InterNet включая рекламу. Кроме того клуб предоставляет возможность обмена опытом с InterNetбизнесменами различных стран.
41811. Программная реализация несложного алгоритма 112.6 KB
  Листов 7 Лабораторная работа №7 Тема: Программная реализация несложного алгоритма Цель:изучить на основе готовой программы операторы циклической структуры языка QBsic и научиться составлять программы с использованием операторов цикла ДО и ПОКА. Теоретические сведения к лабораторной работе Определение циклической программы Если необходимо выполнить одинаковые действия в которых изменяется только какаялибо величина то применяются операторы цикла. Виды операторов цикла Оператор цикла ДО Общий вид оператора: FOR K=Kнач TO Kкон STEP...
41812. Определение коэффициента теплопередачи при установившемся тепловом процессе 48.88 KB
  темпра горячей воды т. темпра горячей воды Т2С Начальн. воды t1C Конечн. воды t2c Расход холодной воды.