Як комп'ютер може перезапустити себе? Після того, як він вимкнеться, як це говорить про те, щоб повернутися знову? Яке програмне забезпечення може це зробити?
Як комп'ютер може перезапустити себе? Після того, як він вимкнеться, як це говорить про те, щоб повернутися знову? Яке програмне забезпечення може це зробити?
Відповіді:
tl; dr: стан живлення на вашому комп'ютері контролюється реалізацією ACPI (розширена конфігурація та інтерфейс живлення). В кінці процесу відключення ваша операційна система встановлює команду ACPI, яка вказує, що комп'ютер повинен перезавантажитися. У відповідь материнська плата скидає всі компоненти за допомогою відповідних команд скидання або рядків, а потім слідує процесу завантаження. Материнська плата ніколи насправді не вимикається, вона лише скидає різні компоненти, а потім поводиться так, ніби щойно натиснута кнопка живлення.
Довга і хитра, але (на мій погляд) більш цікава відповідь:
За старих часів (ну гаразд, для студента коледжу, як я 90-х років був давно), у нас були материнські плати AT (Advanced Technology) з потужністю ATуправління. Система живлення AT була дуже-дуже простою. Кнопка живлення на вашому комп’ютері була апаратним перемиканням (ймовірно, в задній частині корпусу), і ваш вхід 120vac пройшов прямо через нього. Це фізично вмикало та вимикало джерело живлення, і коли цей перемикач був у положенні "Вимкнено", все на вашому комп’ютері було повністю мертвим (це зробило батарею CMOS дуже важливою, оскільки без неї не було джерела живлення для збереження обладнання годинник тикає). Оскільки вимикач живлення був фізичним механізмом, не було програмного способу включення та вимкнення живлення. Windows показала б відоме повідомлення "Тепер безпечно вимкнути комп'ютер", оскільки, хоча все було припарковано і готове вимкнутись, ОС не змогла насправді переключити вимикач живлення. Ця конфігурація іноді називаласяпотужна потужність , тому що це все обладнання.
На сьогоднішній день все по-іншому, через чудеса материнських плат ATX та потужність ATX (це розширена технологія eXtended, якщо ви слідкуєте). Поряд з низкою інших досягнень (mini-DIN PS / 2, хтось?) ATX принесла м'яку потужність . М'яке живлення означає, що живлення комп'ютера може контролюватися програмним забезпеченням. Це призвело до декількох змін імпорту:
Отже, ваш перемикач живлення більше не «вмикає» комп’ютер. Натомість він підключений до основних контролерів вашої материнської плати, які виявляють натискання кнопки та виконують ряд кроків для підготовки системи, включаючи освітлення PS_ON, щоб живлення було доступним. Кнопка живлення - не єдиний спосіб запустити процес запуску, пристрої на вашій шині розширення також можуть це зробити. Це важливо, оскільки адаптери мережі Ethernet насправді залишаються увімкненими, коли комп'ютер вимкнений, і шукають дуже специфічний пакет, який часто називають "Чарівний пакет". Якщо вони виявлять цей пакет, адресований їх MAC-адресу, вони запускають процес запуску. Ось так працює «Wake-on-LAN» (WoL). Годинник також може ініціювати завантаження (більшість BIOS дозволяють задавати час, у який комп'ютер повинен завантажуватися кожен день),
Ну, я пояснюю тему Soft Power і тим, що вважаю це цікавим (завжди ключовою причиною пояснення речей), і тому, що це дозволяє зрозуміти, яким чином програмне забезпечення контролює стан живлення та стан роботи / вимкнення комп'ютера. У більшості сучасних комп'ютерів ця програмна система є реалізацією розширеного інтерфейсу налаштування та живлення або ACPI . ACPI - це стандартизована уніфікована система, що дозволяє програмному забезпеченню керувати енергосистемою вашого комп'ютера. Можливо, ви чули про стан живлення ACPI. Основний механізм управління потужністю - це "стані живлення", ваша операційна система перемикається через режими живлення, готуючись до перемикання (процеси вимкнення / сплячки, які відбуваються до того, як живлення фактично відключається), а потім наказує материнській платі перемикати стан живлення . Стани влади виглядають приблизно так:
Ви помітите, що перезавантаження не є одним із цих станів. То що насправді відбувається, коли комп'ютер перезавантажується? Відповідь може бути дивовижною, адже з точки зору управління живленням це майже нічого . Існує команда скидання ACPI. Коли ви скажете вашій операційній системі перезавантажуватися, вона послідує її нормальному процесу відключення (зупиняє всі ваші процеси, виконує трохи технічного обслуговування, демонтує ваші файлові системи тощо), а потім як завершальний крок, замість того, щоб пересилати машину в стан живлення G2 (як це було б, якби ви просто сказали це «Завершити роботу»), він встановлює команду «Скидання». Це, як правило, називається "Скидання реєстру", тому що, як і більшість інтерфейсів ACPI, це лише адреса, на яку слід записувати певне значення, щоб вимагати скидання. Я цитую специфікацію 2.0 про те, що вона робить:
Необов'язковий механізм скидання ACPI вказує стандартний механізм, який забезпечує повне скидання системи. При реалізації цей механізм повинен скинути всю систему. Сюди входять процесори, основна логіка, всі шини та всі периферійні пристрої. З точки зору OSPM, затвердження механізму скидання є логічним еквівалентом потужності, що рухається на машині. Отримавши контроль після скидання, OSPM буде виконувати дії подібним чином до холодного завантаження.
Отже, коли встановлено регістр скидання, кілька речей відбуваються послідовно.
Кінцевий ефект цих двох кроків (які фактично розбиваються на набагато більше кроків) полягає в тому, що він виглядає на все так само, як комп'ютер, щойно завантажився, але потужність була фактично весь час. Це означає менше часу, необхідного для вимкнення та запуску (оскільки вам не доведеться чекати, коли джерело живлення стане готовим), і що важливо дозволяє ініціювати завантаження при відключенні операційної системи. Це означає, що ще не потрібно використовувати інший тригер запуску (WoL тощо), і він дозволяє використовувати Перезавантаження як ефективний спосіб дистанційного скидання системи, коли у вас немає способу запускати завантаження.
Це була довга відповідь. Але ей, сподіваємось, зараз ви знаєте більше про управління живленням комп'ютера. Я, звичайно, дізнався деякі речі, досліджуючи це.
Ось відправна точка:
Фішки зазвичай не вимикаються, а потім включаються. Натомість є лінія скидання, яка приведе процесор у так званий стан скидання, коли зазвичай вся пам'ять очищена, а процесор виглядає так, що він щойно увімкнено. Хоча цей штифт утримується високим (або низьким, залежно від процесора), процесор скидається. Після звільнення штифта він продовжить завантажуватись нормально, як якщо б він був увімкнений вперше. Сенс цього в тому, що відключення електроенергії само по собі немає.
То як же цей масштаб поширюється на більші системи, як сучасні ПК? Добре сучасні комп'ютери виготовляються з комп’ютерів, які іноді виготовляються із самих комп'ютерів. Отже, коли ви встановите комп'ютер на скидання, "комп'ютери", які створюють комп'ютер, почнуть зберігати свої стани (якщо скидання контролюється), або просто витягнуть їх шпильки для скидання.
Деякі процесори та мікроконтролери (які є мініатюрними автономними комп'ютерами, як правило, на 20 років позаду сучасних настільних комп'ютерів) можуть скинути себе за допомогою внутрішніх комутаторів. Як я вже сказав, як тільки сигнал, який генерує скидання, зникне, комп'ютер запуститься. Отже, передумова у питанні не зовсім правильна. Комп'ютер не знає, коли його увімкнути. Адже знаю, коли його потрібно "вимкнути" або скинути, і коли сигнал, який його утримує, зник, він увімкнеться.
Така поведінка може виглядати дивно на сучасному комп’ютері, який може бути налаштований на включення в певний час або через мережу тощо. Як я вже сказав, комп'ютери виготовлені з комп’ютерів. Тому, хоча основний процесор може бути вимкнено, всередині нього можуть бути численні інші мікросхеми та мікроконтролери. Найбільш очевидний випадок - годинник у режимі реального часу, який часто працює від акумулятора. Потім він може включати інші мікросхеми, які включатимуться інші мікросхеми, і ланцюгова реакція триває, поки не буде включений весь комп'ютер. На сучасних комп’ютерах існує лінія живлення блоку живлення, яка називається +5 VDC в режимі очікування. Він забезпечує потужність близько 50 мВт для різних пристроїв, які вмикаються, коли комп'ютер "вимкнено".
Трохи дрібниць: Штифт скидання на процесор Intel 386 EX - це контактний номер 110.
Для Intel i7-900 це номер землі AL39.
Я сподіваюся, що хтось зможе надати відповідь, яка пояснить, як все працює з точки зору високого рівня, оскільки це досить складна система.
У цій публікації блогу описано, як Linux запускає перезавантаження.
Витяг:
У Linux є маса різних способів скидання x86. Деякі з них є лише 32-бітними, тому я просто збираюся їх ігнорувати, бо, чесно кажучи, що ти робиш зі своїм життям. Також вони жахливі. Отже, це залишає нас з п'ятьма з них.
kbd - перезавантаження через контролер клавіатури. На оригінальному комп'ютері IBM було встановлено лінію скидання процесора, пов'язану з контролером клавіатури. Введення відповідного магічного значення імпульсує лінію і машина скидає налаштування. Це все дуже просто, за винятком того, що сучасні машини не мають контролерів клавіатури (вони насправді є частиною вбудованого контролера), а ще більш сучасні машини навіть не претендують на наявність контролера клавіатури. Тепер вбудовані контролери запускають програмне забезпечення. І, як ми всі знаємо, програмне забезпечення є жахливим. Але, що ще гірше, програмне забезпечення на вбудованому контролері написано авторами BIOS. Настільки очевидно, що будь-яка претензія, що це коли-небудь працює, - це якась вигадка вигадка. Деякі машини дуже вибагливі до того, що апаратне забезпечення знаходиться у тому стані, який програмував би Windows. Деякі машини працюють 9 разів з 10, а потім замикаються через певну проблему з тимчасовими термінами. А інші просто взагалі не працюють. Ура!
потрійна - спроба генерувати потрійну помилку. Це робиться, завантажуючи порожню таблицю дескрипторів переривання, а потім викликаючи int (3). Помилка переривання (немає IDT), помилка обробки помилок (немає IDT) і процесор вводить умову, яка теоретично повинна викликати скидання. За винятком випадків, якщо цього не відбувається, це не вимагає, і це просто не працює на купі машин.
pci - насправді pci. Традиційний доступ до простору конфігурації PCI досягається записом 32-бітного значення на порт iox 0xcf8 для ідентифікації шини, пристрою, функції та реєстру конфігурації. Порт 0xcfc містить реєстр, про який йдеться. Але якщо записати відповідну пару магічних значень до 0xcf9, машина перезавантажиться. Видовищний! І не стандартизовано жодним чином (звичайно не входить до специфікації PCI), тому різні чіпсети можуть мати різні вимоги. Буо.
efi - служби виконання EFI надають точку входу для перезавантаження машини. Зазвичай це навіть працює! Поки служби виконання EFI взагалі працюють, що може бути розтяжкою.
acpi - останні версії специфікації ACPI дозволяють вам вказати адресу (як правило, пам'ять або системний простір вводу-виводу) та значення для запису. Ідея полягає в тому, що записування значення на адресу скидає систему. Виявляється, робити це часто не вдається. Також неможливо представити метод перезавантаження PCI через ACPI, оскільки метод перезавантаження PCI вимагає пари значень, а ACPI дає лише одне.
Він замикає місце вводу-виводу, яке виводить рядок даних низько, що говорить процесору, що він повинен зупинити все, що він робить, і почати виконувати код з певного місця в BIOS.
Ще в старі часи до управління живленням, звичайно, комп'ютери могли все-таки перезапуститись. (Хтось пам’ятає, коли заморожена програма означала, що вам доведеться використовувати Ctrl + Alt + Delete для перезавантаження комп'ютера?)
На моїй старій 486 команда мови збірки JMP FFFF:0000
(тобто встановити вказівник інструкції процесора на вказану адресу) призведе до перезавантаження всього комп'ютера. Іншими словами, FFFF: 0000 розглядає місцеположення в BIOS, яке має вказівки щодо того, що повинен робити комп’ютер під час першого запуску. Я підозрюю, що PIN-код для скидання, описаний у відповіді AndrejaKo, або кнопки скидання в дні перед управлінням живленням також змусили б покажчик інструкцій на ту саму адресу.
Пошук Google для JMP FFFF 0000 показує багато цікавих сторінок про це.
Існує також річ, яку назвали сторожовою. Цей пристрій служить перемикачем мертвої людини. Комп’ютер повинен щохвилини повідомляти сторожовому собаці, що він ще живий. Коли комп'ютер виходить з ладу, наприклад, запустившись у нескінченний цикл, він не зможе подати сигнал сторожовій собаці, що вона все ще працює за призначенням, і з цього приводу сторожовий собака виконає апаратне скидання. Це було продемонстровано у популярній телевізійній серії термінатора, де робота був вибитий від перенапруги високої напруги. він би скинувся через 2 хвилини.
Поверніть на старий IBM PC-1 контролер клавіатури, як не дивно, обробляти перезавантаження. IBM вбудував невеликий мікропроцесор для роботи з клавіатурою, і він мав кілька запасних ліній вводу / виводу, тому вони використовували одну з ліній для керування лінією скидання основного процесора. Команда, що надсилається на контролер клавіатури, призведе до скидання центрального процесора, як би щойно включене живлення.
Я здогадуюсь, що ця традиція продовжувалась і в епоху "AT", і, можливо, сьогодні в ACPI залишаються її залишки.
Додано: цікава інформація про вищевказану схему скидання. Під час ранньої завантажувальної послідовності код шукав певну схему в оперативній пам'яті, яка, можливо, була встановлена раніше виконаним кодом. Якщо цей код був присутній, частина діагностики POST (включене ввімкнення живлення) була пропущена. Візерунок буде присутній лише на "теплому" черевику.