Автозапуск

Матеріал з Wiki TNEU
Перейти до: навігація, пошук

При завантаженні комп'ютера відбувається послідовна передача управління від BIOS до завантажувача, а від нього - до ядра. Потім ядро ​​запускає планувальник (для реалізації багатозадачності) і виконує програму Init (яка налаштовує користувальницьке оточення і дозволяє здійснювати взаємодію з користувачем і вхід в систему), після чого ядро ​​переходить у стан бездіяльності до тих пір, поки не отримає зовнішній виклик. Основні етапи завантаження: 1.BIOS виконує завантажувальні кроки, специфічні для даного апаратного забезпечення. 2.Когда всі пристрої розпізнані й правильно запущені, BIOS завантажує та виконує завантажувальний код з одного з розділів заданого завантажувального пристрою, який містить фазу 1 завантажувача Linux. Фаза 1 завантажує фазу 2 (значний за розміром код завантажувача). Деякі завантажувачі можуть використовувати для цього проміжний етап (під назвою фаза 1,5), оскільки сучасні диски великого обсягу можуть некоректно зчитуватися без подальшого коду. 3.Загрузчік найчастіше пропонує користувачеві меню з доступними варіантами завантаження. Потім він завантажує ядро, яке розпаковується в пам'ять, налаштовує системні функції, такі як робота необхідного устаткування й управління сторінками пам'яті, після чого робить виклик start_kernel (). 4.Після цього start_kernel () виконує основну налаштування системи (переривання, інші функції управління пам'яттю, ініціалізацію пристроїв, драйверів і т д..), А потім породжує процес бездіяльності, диспетчер і окремо від них - процес Init (виконується у просторі користувача) . 5.Планіровщік починає більш ефективно управляти системою, в той час як ядро ​​переходить до бездіяльності. 6.Процесс Init виконує необхідні сценарії, які налаштовують всі служби і структури, не пов'язані з рівнем ядра, в результаті чого буде створено користувальницьке оточення, і користувачеві буде надано екран входу в систему. Коли відбувається завершення роботи, Init викликається для керованого закриття програм користувацького рівня, теж згідно сценаріями. Після цього Init закривається, а ядро ​​виробляє своє власне завершення роботи. <nowiki> Фаза загрузчікаФази завантажувача різняться залежно від платформи. Оскільки ранні етапи завантаження не залежать від операційної системи, процес завантаження зазвичай починається так:

Для x86 або x86-64: код із завантажувального сектора розділу диска виконується в реальному режимі і завантажує першу фазу завантажувача (як правило - частина LILO або GRUB). З цього моменту завантаження триває. Перша фаза завантажує решті код завантажувача, який зазвичай запитує, яку операційну систему (або вид її сесії) користувач хоче запустити. При використанні LILO це робиться шляхом зчитування конфігураційного файлу / і т.д. / lilo.conf, в якому визначені доступні системи. Цей файл містить, зокрема, інформацію про завантажувальному розділі і розташуванні ядра для кожної з таких систем, а також додаткові параметри завантаження, якщо вони задані. У результаті вибору відповідне ядро ​​завантажується в ОЗУ, мінімальна початкова файлова система налаштовується з файлу-образу (Initrd), а потім, разом з відповідними параметрами управління передається нової ОС.

LILO і GRUB мають певні відмінності: [1]

LILO не розпізнає файлові системи, тому він використовує безпосередні (сирої) зсуву на диску і відомості з BIOS для завантаження даних. Він завантажує код меню, а потім, залежно від вибору, завантажує або 512-байтним сектори диска для системи, що грунтується на MBR (наприклад Microsoft Windows), або образ ядра для Linux. [1] GRUB, навпаки, розпізнає поширені файлові системи (наприклад ext2 і ext3). [2] Так як GRUB зберігає свої дані у файлі конфігурації, а не в завантажувальної запису, і має інтерфейс командного рядка, то найчастіше параметри GRUB легше поправити або змінити, якщо вони налаштовані неправильно або пошкоджені. [3]

GRUBОсновная стаття: GRUB

1.Загрузчік 1-ї фази зчитується BIOS з MBR (головний запис завантаження). [4] 2.Он завантажує частину завантажувача (2-у фазу). Якщо друга фаза знаходиться на великому диску, іноді завантажується проміжна фаза 1,5, яка містить додатковий код, що дозволяє зчитувати циліндри з номерами більше 1024 (диски LBA). Завантажувач фази 1,5 зберігається (якщо це необхідно) в MBR або в завантажувальному розділі [4]. 3.Виполняется друга фаза завантажувача і відображає меню запуску GRUB. Воно також дозволяє вибрати середовище виконання та переглянути параметри системи. 4.Когда операційна система обрана, вона завантажується і їй передається керування [4]. GRUB підтримує і прямий, і ланцюгової спосіб завантаження, а також LBA, ext2, і «істинно командно-орієнтовану, доопераційну середу на машинах x86». Він має три інтерфейси:. Меню вибору, редактор налаштувань і командну консоль [4]

LILOОсновная стаття: LILO

LILO старше GRUB і практично аналогічний йому в дії, за винятком того, що не містить інтерфейсу командного рядка. Тому всі зміни потрібно вносити до його налаштування і записувати в MBR, після чого систему перезавантажують. Таким чином, помилка в налаштуваннях може зробити диск нездатним до завантаження без використання окремого завантажувального пристрою (дискети і т п..), Що містить програму для виправлення помилки [3] Крім того, LILO не розпізнає файлові системи;. Замість цього, адреси файлів- образів зберігаються безпосередньо в MBR, [3] а BIOS використовується для прямого доступу до них.

LoadlinОсновная стаття: Loadlin

Ще один спосіб завантажити Linux - з DOS або Windows 9x, де ядро ​​Linux повністю замінить виконуються копію операційної системи. Це може бути доцільно, якщо апаратне забезпечення повинно включатися програмно, а відповідні програми існують тільки для DOS, а не для Linux, будучи пропрієтарним ПЗ виробника і об'єктом комерційної таємниці. Цей виснажливий метод завантаження вже не дуже актуальне, оскільки в Linux є драйвери для безлічі апаратних пристроїв, хоча у минулому він був вельми корисний. Інший приклад: коли Linux знаходиться на пристрої зберігання даних, яке не призначене для завантаження з BIOS: DOS або Windows, можуть завантажити відповідні драйвери, щоб обійти таке обмеження BIOS, а потім завантажити звідти Linux.

Фаза ядраЯдро Linux управляє головними функціями, такими як управління пам'яттю, диспетчер задач, введення-виведення, межпроцессное взаємодію та загальне управління системою. Завантаження проходить в два етапи: на першому ядро ​​(у вигляді стислого файлу-образу) завантажується в пам'ять і розпаковується, далі налаштовуються такі базові функції як основне керування пам'яттю. Потім управління Востаннє передається основного процесу запуску ядра. Як тільки ядро ​​стає повністю працездатним (тобто завантаженим і виконав свій код), воно знаходить і запускає процес ініціалізації, який самостійно налаштовує користувальницьке простір та процеси, необхідні для функціонування користувацького оточення та підсумкового входу в систему. Саме ядро ​​переходить в режим бездіяльності та готовності до викликів з боку інших процесів.
Етап завантаження ядраЯдро при завантаженні зазвичай має вигляд файлу-образу, стиснутого в формат zImage або bzImage за допомогою Zlib. У ньому міститься головний програма, яка проводить мінімальну налаштування обладнання, розпаковує образ цілком у верхню пам'ять і монтує RAM-диск, якщо він передбачений. [5] Після цього вона виконує запуск ядра за допомогою ./arch/i386/boot/head і процесу startup_32 () (для процесорів сімейства x86).
Етап запуску ядраІсточнік: Опис процесу завантаження Linux фірмою «IBM» (англ.) + перекладена версія з того ж сайту Подробиці процесу завантаження Linux (рос.)

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

start_kernel () виконує безліч завдань ініціалізації. Вона налаштовує обробники переривань (IRQ), потім налаштовує пам'ять, запускає процес Init (перший процес користувацького режиму), а потім запускає завдання бездіяльності викликом cpu_idle (). Слід зауважити, що процес запуску ядра також монтує ініціює RAM-диск («Initrd»), який раніше був завантажений в ролі тимчасової кореневої файлової системи у фазі завантаження. Це дозволяє завантажувати модулі драйверів, не спираючись на інші фізичні пристрої та драйвери, і підтримувати невеликий розмір ядра. Коренева файлова система згодом підміняється за допомогою виклику pivot_root (), який размонтірует тимчасову і замінює її справжньої кореневої ФС, як тільки остання стане доступна. Використана тимчасової системою пам'ять потім звільняється.

Таким чином, ядро ​​ініціалізує пристрої, монтує зазначену завантажувачем файлову систему в режимі "тільки читання" і запускає процес Init (/ sbin / ініціалізації), що позначається як перший процес, запущений системою (з ідентифікатором процесу PID = 1). [1] Відповідні повідомлення виводить ядро ​​(при монтуванні файлової системи) і Init (при запуску однойменного процесу). Ядро також може виконати Initrd для обробки налаштувань і ініціалізації пристроїв до монтування кореневої файлової системи [1].

За заявою компанії «Red Hat», деталі процесу завантаження на цьому етапі можна підсумувати так: [2]

Коли завантажується ядро, воно відразу ж ініціалізує і конфігурує пам'ять комп'ютера і налаштовує різне підключене до системи обладнання, включаючи всі процесори, підсистеми вводу-виводу та пристрої зберігання даних. Потім воно шукає стиснений образ Initrd в заздалегідь певній ділянці пам'яті, розпаковує його, монтує і завантажує всі необхідні драйвери. Потім воно ініціалізує віртуальні пристрої, пов'язані з файловою системою, наприклад LVM або програмні RAID-масиви, перш ніж демонтувати образ диска Initrd і звільнити всю пам'ять, раніше займану чином. Потім ядро ​​створює кореневе пристрій, монтує кореневий розділ тільки для читання і звільняє всю невикористану пам'ять. До цього часу ядро ​​завантажене в пам'ять і працездатно. Проте, оскільки немає для користувача програм для здійснення осмисленого введення даних в систему, з нею мало що можна робити.

Тепер, коли включені переривання, диспетчер може прийняти загальне управління системою, щоб забезпечити багатозадачність, а процес ініціалізації залишається продовжувати завантаження користувацького оточення в просторі користувача. </nowiki> Перший спосіб полягає у використанні такої команди як chkconfig. В ASPLinux вона знаходиться в каталозі / sbin. У цієї команди є список параметрів для різних випадків життя. Наприклад, нам необхідно додати в автозавантаження сервіс (демон) squid. Якщо він встановлений в системі разом з установкою Linux, то в списку сервісів він вже буде. Якщо ми його тільки що встановили, то його необхідно додати в список сервісів. Це робиться так: / Sbin / chkconfig-add squid Команда повинна виконуватися під рутом або привілейовані користувачем. Також шлях до сервісу chkconfig теж буде відрізнятися в інших системах. Якщо сервіс squid в списку chkconfig є, то він може бути в двох станах - включений або виключений. Перевірити можна наступною командою: / Sbin / chkconfig-list Якщо сервіс вимкнений, то його можна включити. Для цього треба вказати на якому рівні системи треба його включити. Як відомо, є 7 рівнів системи. Насправді використовується в основному 2 рівня: 3-ій і п'ятий рівні. Третій - текстовий мережевий повноцінний режим без графічної оболонки, п'ятий - графічний мережевий повноцінний режим. Тому, рекомендую запускати сервіси як мінімум в цих двох режимах. Це виглядає приблизно так: / Sbin / chkconfig-level 345 squid on Таким чином ми включили автозапуск даного демона при старті системи на третьому, четвертому і п'ятому рівнях. Для виключення робимо таку ж команду з параметром off. Це один із способів зробити сервіс автозагрузочним. Є другий спосіб, який годиться не тільки для сервісів, а й для звичайних користувальницьких скриптів. Для цього потрібно використовувати файл / etc / rc.d / rc.local. В інших системах цей файл може знаходитися в інших місцях. Але суть залишається та ж. Всі рядки, записані в цьому файлі виконуються по черзі. Після всіх сервісів виконується саме цей файл. Тому, наприклад, щоб запустити squid, можна у вищевказаний файл записати наступну рядок: / Etc / init.d / squid start або / Sbin / service squid start

Особисті інструменти
Простори назв

Варіанти
Дії
Навігація
Інструменти