Системи ініціалізації Linux. Що таке ініціалізація Що таке ініціалізація

Систем, яка запускає всі інші процеси. Працює як демон і має PID 1. Зазвичай (згідно Filesystem Hierarchy Standard) розташовується по дорозі /sbin/init . Існують відмінності в організації роботи підсистеми в операційних системах, що ведуть родовід від System V і систем у стилі BSD.

Довгий час була основною підсистемою ініціалізації в Linux, доки не була в більшості дистрибутивів замінена systemd . У Solaris 10 замість init застосовується Service Management Facility. У ряді Unix-систем застосовуються альтернативи init: Upstart, Runit, Daemontools, Launchd, Initng, OpenRC.

У процесі завантаження після ініціалізації ядра зазвичай запускається /sbin/init як перший процес користувальницького режиму , і init відповідає за подальше завантаження системи. Для цього запускаються стартові сценарії, які виконують перевірку та монтування файлових систем, запуск необхідних демонів, налаштування ядра (у тому числі завантаження модулів ядра згідно з встановленим обладнанням, налаштування IP-адрес, таблиць маршрутизації та інші завдання), запуск графічної оболонки. Основна інформація для завантаження зазвичай розміщується в / etc / inittab .

У реалізації init у стилі System V використовується поняття рівня виконання – ступеня завантаження операційної системи; у цьому випадку стартові сценарії кожного рівня розкладені за каталогами від /etc/rc0.d до /etc/rc6.d , де цифра після rc відповідає номеру рівня ініціалізації.

inittab

Приклад файлу /etc/inittab:

id:5:initdefault: si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait :/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc .d/rc 6 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 x:5:respawn:/etc/X11/prefdm -nodaemon

У першому рядку описаний термінал та його конфігурація за умовчанням. Спочатку у цьому файлі описуються рівні ініціалізації. Потім ініціюються віртуальні консолі. Запис ініціалізації консолей складається з полів, розділених двокрапкою і виглядає так:

  • 1 – порядковий номер консолі
  • 2345 – номери рівнів ініціалізації, для яких консоль ініціалізується
  • respawn - цей параметр означає, що init повинен перезапустити обслуговуючий консоль після виходу з сеансу або у разі краху.
  • /sbin/mingetty tty6 - програма (із зазначенням параметрів), яка обслуговуватиме консоль.

Таким чином, ви легко можете створити свій рівень ініціалізації (під номером 4 або 7, 8…) просто виправивши файл /etc/inittab і створивши необхідні посилання в каталозі /etc/rc.d/rc*.d .

SysVinit

Порівняно з його попередниками, AT&T UNIX System III представив новий стиль конфігурації запуску системи , який зберігся (зі змінами) UNIX System V і тому називається « SysVinit ».

У будь-який момент працююча система V знаходиться в одному із заздалегідь визначених станів, які називаються runlevel. Принаймні, один рівень виконання є нормальним робочим станом системи; як правило, інші рівні виконання становлять однокористувацький режим (використовується для відновлення несправної системи), вимкнення системи та різні інші стани. Перемикання з одного рівня виконання на інший викликає запуск набору сценаріїв для кожного рівня запуску, які зазвичай монтують файлові системи, запускають або зупиняють daemon, почати або зупинити X Window System, вимкнення машини і т.д.

В операційній системі Linuxта інших системах сімейства Unix після завершення завантаження ядра починається ініціалізація Linux системи, сервісів та інших компонентів. За це відповідає процес ініціалізації, він запускається ядром відразу після завершення завантаження, має PID 1, і буде виконуватися доки працюватиме система.

Процес ініціалізації запускає всі інші процеси, які мають бути запущені, це батьківський процес для всього, що виконується в системі. Інші процеси можуть також створювати дочірні процеси, але якщо батьківський процес завершується, для його дочірніх процесів батьківським стає процес ініціалізації.

За час розвитку операційних систем було створено різні системи ініціалізації Linux. У різних дистрибутивах використовувалися різні системи. У цій статті ми розглянемо найкращі системиініціалізації, які ви можете зараз використати. Ми почнемо з більш старих систем з меншим функціоналом, щоб зрозуміти з чого все починалося, потім підійдемо до нових, створених останнім часом.

System V або SysV - це досить стара, але досі популярна система ініціалізації Linux і Unix подібних операційних систем. Вона була основою для створення багатьох інших систем ініціалізації, а також першої комерційної системи ініціалізації, розробленої для Unix в AT&T. Вона була розроблена ще 1983 року.

Багато дистрибутивів Linux спочатку використовували SysV. Винятком була лише Gentoo, в якій використовувалася власна система ініціалізації та Slackware, з ініціалізацією у стилі BSD.

Основні можливості SysV:

  • Написання файлів запуску служб на bash;
  • Послідовний запуск служб;
  • Сортувати порядок запуску за допомогою номерів в іменах файлів;
  • Команди для запуску, зупинки та перевірки стану служб.

Жодного паралельного завантаження, системи залежностей, запуску на вимогу та автоматичного запуску тут не було й близько.

З моменту її розробки минуло багато років і через деякі недоліки були розроблені інші системи для її заміни, вони хоч і мали нові функції і були більш ефективними, але вони, як і раніше, були сумісні з SysV.

2. OpenRC

OpenRC - це система ініціалізації Linux і Unix подібних операційних систем, сумісна з Sys V Init і підтримує систему залежностей під час запуску. Вона приносить деякі покращення в SysV, і як і інші системи ініціалізації Linux, сумісна з нею, але ви повинні мати на увазі, що OpenRC не повністю замінює файл /sbin/init. Ця система ініціалізації використовується в Gentoo та дистрибутивах BSD.

Крім стандартних можливостей SysV тут підтримується також:

  • Підтримка залежностей служб;
  • Підтримка паралельного запуску служб;
  • Підтримує налаштування в одному окремому файлі;
  • Працює як демон;

Порівняно з SysV тут з'явилося багато нових можливостей, але все ще не всі, що потрібні для оптимальної роботи системи.

3. Systemd

Systemd - це нова системаініціалізації Linux. Вона була введена за замовчуванням у Fedora 15, а зараз використовується майже у всіх популярних дистрибутивах Linux. Це не тільки процес, що ініціалізує, що підтримує величезну кількість можливостей, але й набір інструментів для управління службами і цими можливостями із системи. Основна мета - мати повний контроль над усіма процесами під час їх запуску та протягом усього виконання.

Systemd дуже відрізняється від всіх існуючих систем ініціалізації, тим як вона працює з сервісами, і навіть конфігураційними файлами сервісів. Сумісності зі скриптами SysV немає, їх потрібно перетворити на linux systemd unit файли.

Ось її основні особливості:

  • Зрозумілий, простий та ефективний дизайн;
  • Найкращий APIv;
  • Підтримується завершення додаткових процесів;
  • Підтримується власний журнал за допомогою journald;
  • Підтримується планування завдань за допомогою таймерів Systemd;
  • Зберігання журналів у бінарних файлах;
  • збереження стану сервісів linux systemd для можливого відновлення;
  • Поліпшена інтеграція з Gnome;
  • Запуск сервісів на вимогу;

4. Upstart

Upstart - це система ініціалізації на основі подій, розроблена Canonical і покликана замінювати SysV. Вона може запускати системні служби, виконувати над ними різні завдання, перевіряти їх під час виконання, а також виконувати потрібні дії у відповідь на події в системі.

Це гібридна система ініціалізації, вона використовує як SysV скрипти запуску, і файли служб Systemd. Ось її найпомітніші особливості:

  • Спочатку розроблена для Ubuntu, але може використовуватись і в інших дистрибутивах;
  • Запуск та зупинення служб на основі подій;
  • Генерація подій під час запуску та зупинення служб;
  • Події можуть бути надіслані звичайними процесами;
  • Зв'язок із процесом ініціалізації через DBus;
  • Користувачі можуть запускати та зупиняти свої процеси;
  • Перезапуск служб, що несподівано завершилися;
  • Автоматичний перезапуск служб;

Більшість її можливостей працюють завдяки інтеграції із системою ініціалізації Systemd.

5. Runinit

Runinit – це кросплатформова система ініціалізації, яка може працювати в GNU Linux, Solaris, BSD та MacOS. Це чудова альтернатива для SysV з підтримкою моніторингу стану служб.

Тут є деякі цікаві особливості, яких немає в інших системах ініціалізації:

  • Повний контроль сервісів, кожен сервіс прив'язується до свого каталогу;
  • Надійний засіб журналування та ротації логів;
  • Швидка система завантаження та вимкнення;
  • Портативність;
  • Легке створення файлів конфігурації служб;
  • Невелика кількість коду системи ініціалізації.

Висновки

Як я вже казав, система ініціалізації запускає та керує всіма іншими процесами в системі Linux. SysV донедавна була основною системою ініціалізації в більшості дистрибутивів LinuxАле через деякі свої недоліки для неї було розроблено кілька замін, у тому числі Systemd.

Які системи ініціалізації Linux використовуються у вашому дистрибутиві? У списку позначені не всі існуючі системи, яку потрібно додати до списку? Напишіть у коментарях!

І змішав усі карти. Але хто ж був справжнім першопрохідником?

Daniel J. Bernstein математик і фахівець з криптографії, автор популярного MTA qmail та безлічі інших менш відомих програм, серед яких виділяється daemontools. Для безлічі сучасних системініціалізації daemontoolsбув прикладом і натхненником. Прошу всередину для того, щоб познайомитися з найелегантнішою, найпростішою та найвпливовішою системою управління службами в Unix/Linux.

DJB та Daemontools

Максвелла для управління процесами на Unix ОС.

Увага - не слід плутати daemontoolsнаписаний DJB із програмою-тезкою DAEMON Tools для монтування iso образів та створення віртуальних CD/DVD дисків.


Daniel J. Bernstein створив свою програму у 1997 р. Останній стабільний реліз був у липні 2001 р.


Зараз, коли в Linux співтоваристві спостерігається розкол через systemd, саме час згадати яким може бути справжній ініт у дусі принципів та філософії Unix. У цьому сенсі дзен-програміст DJB є втіленням мінімалізму та простоти, а бритва Оккама у нього вбудована у клавіатуру. Його рішення ґрунтовні та елегантні, на цьому фундаменті він будує надійне, безпечне ПЗ, яке споживає мінімальну кількість ресурсів ОС. Ось деякі особливості його стилю роботи.

  • Найбільший файс вихідного коду multilog.c має лише 13898, немає не рядків, а байтів. Команда wc вказує лише на 617 рядків коду.
  • Більшість функцій має менше 30 рядків.
  • Принцип – ніколи нічого не псувати.
  • Принцип – використовувати все, що дає ОС і не винаходити велосипеди.

Чому такі дивні принципи і ще з урахуванням того, що автор сповідує їх фанатично? Будівельний матеріал daemontools- директорії, процеси, FIFO, файли, що виконуються. Це дає масу переваг у розробці та налагодженні програми:

  • Тестувати запуск служби простіше - якщо запуститься виконуваний файл./run , то служба теж запуститься.
  • Можна використовувати будь-яку мову програмування, не лише Bash. Пригодиться навіть скомпільований бінарник.
  • Зрозуміло, що та як робить програма навіть без детального прочитання документації та вивчення вихідного коду.
  • Парсити різноманітні текстові структури - на диво важке завдання, якщо це робити з розуму. Автор уникає цього, вміло використовуючи ієрархічну властивість файлової системи Unix для відтворення структури змінних середовищаключ = значення.

Порівняльна таблиця DT

Варто звернути увагу на неортодоксальну структуру директорій daemontools, анітрохи не вагаючись програма створює каталоги в корені файлової системи Unix. DJB прописав у коді програми директорії /service, /command і рекомендує створити /package для вихідних програм. Це вважається дуже поганим тоном в Unix і Linux, творці дистрибутивів всіма силами уникають цього, як і користувачі з правами root.


features inittab ttys init.d rc.local /service
Easy service installation and removal No No Yes No Yes
Easy first-time service startup No No No No Yes
Reliable restarts Yes Yes No No Yes
Easy, reliable signalling No No No No Yes
Clean process state Yes Yes No No Yes
Portability No No No No Yes

Давайте пробіжимося по таблиці самовихваляння daemontools. Почнемо з першого рядка. Справді створення та видалення нового сервісу простіше простого, додав, або видалив нову директорію /service разом з файлом./run і на цьому все. Порівняйте зі скриптами sysvinit та інших інітів, щоб оцінити простоту такого способу досягти того самого.


Другий пункт менш переконливий у тому сенсі, що звичайно простіше коли сервіс і вперше стартує автоматично, але в інших системах ініціалізації та управління службами достатньо однієї команди для першого старту служби.


Можливість перезапустити сервіс, що завершився автоматичному режимібула на той момент великим кроком вперед. На сьогоднішній день це вже гаразд.


Четверта позиція – сигнали. Команда svc , як показано нижче, дозволяє надіслати службі практично будь-який сигнал стандартів POSIX.


Останні дві позиції здаються дещо надуманими, не зовсім зрозуміло як daemontoolsвідновлює стан процесу на відміну інших інітів. Незрозуміло також, чому автор лише свою програму вважає переносимою інші платформи.

Структура DT

За словами автора: daemontools- це набір інструментів для керування службами UNIX. Основними відмінностями від традиційних інітів (структури директорій rcX.d, rc.d, rc.local та ін.) є здатність перезапустити сервіс у разі його падіння та наявність програми ведення та ротації логів – multilog. Також, multilog дозволяє вести лог виведення програм, які не вміють перенаправляти виведення в syslog. Таким чином можна запускати як сервіс програми, для цього зовсім не призначені.


Внутрішній пристрій daemontools, межа обведена червоною переривчастою лінією.




Тепер трохи про принципи роботи програми.


На самому початку системний ініт запускає svscanboot, який потім запускає програму svscan у новоствореній директорії svscan. Далі svscanboot перенаправляє виведення запущеного svscan в налагоджувальний процес readproctitle .


Ядром daemontoolsЄ лише дві програми: svscan і supervise . Перша запускається з єдиним аргументом на вибір, а друга - з обов'язковим ключем.


Svscanслужить для запуску та стеження за сервісами. Кожні 5 секунд Svscan перевіряє каталог /service , якщо інший не заданий, наявність нових підкаталогів. Якщо таке буде виявлено, запускається нова копія supervise для кожного каталогу.


Superviseє, відповідно до назви, що контролює процесом. Він викликається з параметром, в якому міститься ім'я каталогу і шукає скрипт./run , який і запускає. Якщо з якихось причин./run перестав виконуватися, то тоді supervise його перезапустить після невеликої паузи - щоб не створювати додаткового навантаження на ОС. Supervise не перезапустить./run, якщо в каталозі буде виявлено файл./down. Supervise створює у каталозі сервісу подкаталог./supervise , у якому зберігаються дані про процес. Ці дані можуть бути прочитані за допомогою утиліти svstat. Для управління сервісом служить програма svc.


Синтаксис команди svc та опції представлені нижче.


svc options services
  • -u: Up, запустити сервіс, у разі зупинки – перезапустити.
  • -D: Down, зупинити сервіс.
  • -t: Terminate, надсилає сервісу сигнал TERM.
  • -k: Kill, посилає сервісу сигнал KILL.
  • -p: Pause, посилає сервісу сигнал STOP.
  • -c: Continue, надсилає сервісу сигнал CONT.
  • -h: Hangup, посилає сервісу сигнал HUP.
  • -a: Alarm, надсилає сервісу сигнал ALRM.
  • -h: Interrupt, надсилає сервісу сигнал INT.
  • -x: Exit, supervise завершить роботу як тільки./run або його нащадок завершиться.
  • -o: Once, запустити сервіс, але не перезапускати після завершення.

Є ще одна обставина, якщо в робочому каталозі supervise міститься підкаталог./log, в якому є./log/run, тоді буде запущена ще одна копія supervise і створено канал між./run і./log/run.


Спробуємо додати сервіс sshd.


#!/bin/sh # перенаправити stderr в stdout exec 2>&1 # з опцією -D sshd виконується явно, з опцією -e налагодження пишеться в stderr exec /usr/sbin/sshd -D -e

У такому разі структура директорій може мати такий вигляд.


- service/ |- ngetty/ | |- run | - log/ | |- run |- sshd/ | |- run | |- log/ | |- run |- squid/ | |- run | |- log/ | |- run

Після того, як svscan пробіжиться цим списком ми отримаємо дерево процесів, в якому процеси service стежать за сервісами та логуванням.


-svscan-+-service-+-ngetty | `-log-service +-service-+-sshd | `-log-service +-service-+-crond | `-log-service

Залежності між службами

Незважаючи на те, що програма не підтримує залежності між різними службами, є спосіб домогтися обліку залежностей, використовуючи для цього svok наступним чином.


#!/bin/sh svok postgres || (echo "waiting for postgres..." && exit 1) exec 2>&1 exec python3 your-web-app.py
  • svok - перевіряє, чи запущено певну службу. Нічого не виводить у stdout і stderr , якщо служба запущена, тоді програма повертає код 0, інакше - код 100.

У даному прикладі програма на python запуститься тільки в тому випадку, якщо стартував postgres, якщо ж останній поки не піднявся, скрипт завершиться і потім через певний час svscan його перезапустить. Коли postgres нарешті підніметься, python запустить веб додаток.

Квотування сервісу

За допомогою утиліти softlimit можна обмежити надані сервісу ресурси.


#!/bin/sh exec 2>&1 # змінити користувача на foo, обмежити стек 4096 байтами, відкриті # файлові дескриптори 15 та кількість процесів 1: exec setuidgid foo softlimit -n 4096 -o 15 -p 1 \ bar -n
  • softlimit – запускає програму з ресурсними обмеженнями.

Логування

Якщо у вас є програма foo , яка не веде логів, ви легко зробите це за допомогою multilog , зібравши в окремому файлі висновок stdout і stderr з тимчасовими мітками.

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

Що таке ініціалізація

Під цим поняттям мається на увазі підготовка до роботи та визначення параметрів налагодження програм для безпомилкової роботи. Принцип її дії спрямований ззовні щодо об'єкта, який ініціалізується. Насамперед ця процедура відповідає за налаштуванняпевних параметрів та правил, за якими здійснюватиметься робота програмного забезпечення.

Також існує поняття як апаратна ініціалізація. Найкраще її розглянути на прикладі завантаження персонального комп'ютера: коли ПК підключений до електромережі, він не виконує жодних функцій, контролери та мікросхеми містять випадкові числові послідовності, а процесор не виконує заданий код. Щоб завантажити ПКнеобхідно, щоб процесор виконав команду "Скидання". Після того, як її буде здійснено, контролери почнуть виконання заданого коду, при цьому він буде записаний у спеціальне сховище енергозалежної пам'яті (ROM). Дані, які зберігаються в ROM, передаються в BIOS, де використовуються для керування зовнішніми пристроями, які підключені до комп'ютера.

Апаратна ініціалізація є важливою процедурою, яка допомагає системі визначити типи пристроїв, що підключаються, і перевірити їх працездатність.

Напрями ініціалізації

Існує кілька напрямків:

  • ініціалізація програм та додатківвсіх типів;
  • жорстких магнітних накопичувачів;
  • пристроїв та підсистемпечатки;
  • додатків та модемівна мобільних апаратах.

Де використовується ініціалізація

Далі буде докладно розглянуто, у яких ситуаціях застосовується ця процедура. Насправді подібних варіантів і окремих випадків набагато більше, наприклад ініціалізація Flash плеєра, роутера при записі, сканера при підключенні, драйвера монітора. Але ми розглянемо лише основні випадки.

Програми

Ініціалізація програми передбачає встановлення початкових значень змінних або скидання даних параметрів в нуль перед тим, як вона буде запущена на комп'ютері. Параметри для правильної працездатності найчастіше містяться в спеціальному файлі конфігураціїразом із настановним.

Жорсткий диск

До ініціалізації жорсткого дискаможна віднести його форматування до іншого формату файлової системи, створення розділу чи тома. Ця процедура потрібна для налаштування параметрівнового вінчестера. Це необхідно у тих ситуаціях, коли у провіднику обладнання не відображається.

Підсистема друку

Ініціалізація для підсистем друку необхідна в тих випадках, коли користувачеві потрібно роздрукувати будь-який документ на папір. Для цього буде потрібний зовнішній пристрій друку – принтер. Для того щоб процес пройшов безпомилково, потрібно визначити початкові параметри. До пристрою звертається система та подає сигнал сканування його можливостей. Після закінчення процедури користувачеві пропонується варіант друку, який може виконати обладнання.

На телефоні

Ініціалізація на телефоні, як правило, буває пов'язана з визначенням параметрів SIM-картки, СМС-повідомлень та програм. Зазвичай вона відбувається при першому запуску мобільної системиабо під час встановлення програм. Якщо на телефоні з'явиться повідомлення « Зачекайте, йде ініціалізація», це означає, що здійснюється налаштування програмного забезпечення. Також вона можлива при підключенні телефону до модему або роутера для визначення налаштувань мережі.

Ініціалізація завантаження

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

Часті помилки ініціалізації

Нерідко у користувачів трапляються різні помилки. Помилка ініціалізації свідчить, що у процесі синхронізації чи перевірки стався збій. Далі будуть детально розглянуті основні проблеми з ініціалізацією у власників різних пристроїв.

Помилка 0×0175dcbb

Зустрічається при запуску гри SIMS 3, рідше в інших іграх. Повязана з встановленням сторонніх модівта з неправильною конфігурацією графічного драйвера. Рішення полягає в деінсталяції розширень та перевстановлення драйвера.

Помилка друку: Помилки ініціалізації поточного принтера

Найчастіше зустрічається при встановленні драйверівпринтер через Wi-Fi. Під час інсталяції драйвера в кінці установки спливає вікно «Ініціалізація пристрою». Рішенням буде встановлення драйвера по USB.

Помилка ініціалізації сторінки

Ця проблема зустрічається у користувачів операційної системи. Windows Server. Вона пов'язана зі збоєм у роботі служби захищеного сховища. Виправити її досить легко, необхідно просто перезапустити службу та перезавантажити ПК, проблему буде усунуто.

Failed to initialize 3D rendering (Не вдалося ініціалізувати 3D-рендерінг)

Подібне попередження пов'язане з некоректною роботою драйвера 3D-акселератора. Програми, які використовують цей модуль, просто не можуть його визначити. Проблема усувається просто, перезапускаємо драйвер відеокарти в диспетчері пристроїв або перевстановлюємо його.

Помилка ініціалізації програми 0xc0000005

Подібне повідомлення, як і попереднє, має відношення до графічного прискорювача. Програма під час запуску здійснює звернення до ОЗУі отримує відмову, оскільки доступ до неї блоковано. Доступ може бути заблокований, як операційною системою, так і помилкою конфігурації відеоадаптера. Виходом є перевстановлення драйвера або відновлення системи до стану, коли подібна несправність не спостерігалася.

Помилка ініціалізації Сім-карти

Цей збій зустрічається у власників смартфонів. Через деякий час після запуску смартфона з'являється помилка Failure to initialize, або подібна. Він полягає в тому, що телефон не бачить встановленої картки. Це може бути наслідком як програмного збою, так і апаратного. Щоб вирішити цю проблему, необхідно перезавантажити пристрій або вставити картку в інший слот.

Насправді "чисто" описати, як комп'ютер ініціалізується, не вийде - у багатьох системах це відбувається з невеликими відмінностями, та й треба враховувати набір обладнання, передустановки та ін. Але в основному - це виглядає так:
Включаємо живлення – відбувається загальне скидання логіки та процесора, процесор починає виконувати набір інструкцій, які спочатку зберігаються у ПЗУ на материнської плати. Набір можна логічно розбити на три частини:

  1. Power On Self Test (POST) - запускається лише один раз і одразу після включення живлення. У цьому вся тесті перевіряється апаратура наявність грубих помилок (функціонування апаратури взагалі). Одним із видимих ​​кроків на екрані – тестування пам'яті.
  2. Ініціалізація – запускається кожного разу, коли машина перевантажується (наприклад, коли користувач натискає Ctrl-Alt-Del) – ініціалізує всі доступні пристрої на платі та у слотах розширення (ISA, PCI, AGP).
  3. Третя частина – це власне BIOS (BASIC INPUT/OUTPUT SYSTEM) – базова система вводу/виводу на низькому рівні. Цими функціями користуються деякі Операційні системи(DOS, Windows та ін.) Зазвичай, весь BIOS розташовується на окремому чіпі, який програмується на заводі, хоча в сучасних комп'ютерахможе бути перепрограмований прямо із системи. Тобто. зараз використовується Flash Memory.

Особливість існуючих BIOS в тому, що вони дуже повільні (набагато повільніше, ніж звичайна) оперативна пам'ять). Тому багато систем просто копіюють весь BIOS в оперативну пам'ять.

Тест пам'яті - найбільш видима частина тесту апаратури на етапі POST. До речі, про видимість - відеоадаптер - теж апаратура, і його необхідно ініціалізувати в першу чергу - щоб користувач міг бачити процес тестування та ініціалізації пристроїв. Також необхідно встановити ще й режим (частоту оновлення, роздільну здатність) екрана. Адже відеокарти можуть бути зроблені різними фірмами, та ще й різні моделі- кому як не Біос самої картки знати досконало, як її потрібно ініціалізувати?
На кожній відеокарті є свій BIOS, який опитується на наявність при тестуванні апаратури. Спочатку системний БІОС шукає відео за стандартними адресами ISA VGA - якщо там немає адаптера, то він шукається на PCI, потім на AGP (або спочатку AGP, а потім PCI - це прописується в установках BIOS SETUP). І якщо відеобіос знайдено в одному з слотів, то управління передається на нього.

І взагалі, присутність БІОСа на різних адаптерах змушує системний БІОС віддавати їм управління - у випадку з відеоадаптером - це включення режиму і т.д., у випадку з мережевою картою - завантаження з мережі (у разі без дискових машин - віддалене завантаженняз мережі) - при наявності BIOS на мережевий картіі наявність жорсткого диска БІОС, наприклад, може запитати - як завантажуватимемося - з мережі або з наявного HDD? За наявності SCSI адаптера - він повинен проініціалізувати свої пристрої (диски, CD-приводи, стрічкові накопичувачі тощо) і якщо такі знайдуться з-поміж дисків SCSI - необхідно буде підтримати int13 для того, щоб система могла звертатися до них, як до звичайним жорстким дискам. Хоча, ініціалізація SCSI пристроїв необов'язкова – наприклад, при старті, її можна відключати – якщо SCSI пристрій не є завантажувальним, це розумно.

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

Отже, коротко можна описати так: все, крім SCSI, IDE, USB "оживає" відразу - з адаптерів виняток становить відеоадаптер, який ініціалізується навіть до перевірки пам'яті.

Далі – якщо в слотах ISA знаходяться інші пристрої, що мають свої ПЗП (з BIOS) – вони ініціалізуються на етапі перевірки зовнішніх пристроївпотім проходить перевірка і призначення PCI (перевірка пристроїв Plug and Play). До речі, PnP є і ISA адаптерах.
Тільки після цього починається перевірка наявності пристроїв на шині IDE.

Тут може виникнути питання - а як бути, якщо на ISA немає відеоадаптера, а є на PCI - але він "оживає" відразу - не чекаючи навіть перевірки всього PCI? Просто на PCI є BIOS, що відображається у звичайний простір пам'яті, і всі VGA PCI мають ще й стандартну VGA програмну частину, що знаходиться в тих же регістрах, як і у випадку, якби це був адаптер ISA. Системний BIOS перевіряє, чи є VGA на ISA шині - якщо так, то на PCI шину і "не лізе", якщо ні - сканує PCI.

Ну, і зрештою, після ініціалізації - зчитується перший сектор першої доріжки першої голівки жорсткого диска і управління передається завантажувальному сектору, який вже управляє подальшими діями (або видається повідомлення типу "NO SYSTEM TO BOOT"). Або подібним чином система вантажиться з дискети.

Сподобалася стаття? Поділіться з друзями!