Як комп’ютер перезавантажується сам?


491

Як комп'ютер може перезапустити себе? Після того, як він вимкнеться, як це говорить про те, щоб повернутися знову? Яке програмне забезпечення може це зробити?


8
@ jer.salamon: Це насправді зовсім різні шляхи. Вимкнення викликає процедуру ACPI, яка надсилає сигнал на джерело живлення ATX, який вимикає основні рейки напруги.
Ігнасіо Васкес-Абрамс

13
Це контролюється за допомогою BIOS - якщо служить пам'ять, цікаві ключові слова - APM та APIC
pst

118
Він ніколи насправді не вимикається при перезапуску.
Моаб

10
Дурних питань немає. Ні, можливо, є - але я думаю, що це насправді дуже цікаво. Представлений як питання кандидата на тиждень .
slhck

4
Раніше я працював на віддаленому сервері, який в основному був лише ПК без екрана або клавіатури в центрі даних компанії. Мій сервер взагалі ніколи не вимикався, але іноді я перезавантажував його з мого кінця за допомогою WinXP Start-> TurnOffComputer-> Перезапуск, щоб сортувати нестабільності, викликані тестуванням власного коду. Я часто працював у моєму виборі, коли датацентр був безпілотним. Це було дуже втомлює , що я випадково обраний Turn Off , як остаточний варіант, і довелося чекати , поки через два дні для оператора , щоб піти і натисніть на перемикачі для мене!
FumbleFingers

Відповіді:


599

tl; dr: стан живлення на вашому комп'ютері контролюється реалізацією ACPI (розширена конфігурація та інтерфейс живлення). В кінці процесу відключення ваша операційна система встановлює команду ACPI, яка вказує, що комп'ютер повинен перезавантажитися. У відповідь материнська плата скидає всі компоненти за допомогою відповідних команд скидання або рядків, а потім слідує процесу завантаження. Материнська плата ніколи насправді не вимикається, вона лише скидає різні компоненти, а потім поводиться так, ніби щойно натиснута кнопка живлення.

Довга і хитра, але (на мій погляд) більш цікава відповідь:

Soft Power і як це працює

За старих часів (ну гаразд, для студента коледжу, як я 90-х років був давно), у нас були материнські плати AT (Advanced Technology) з потужністю ATуправління. Система живлення AT була дуже-дуже простою. Кнопка живлення на вашому комп’ютері була апаратним перемиканням (ймовірно, в задній частині корпусу), і ваш вхід 120vac пройшов прямо через нього. Це фізично вмикало та вимикало джерело живлення, і коли цей перемикач був у положенні "Вимкнено", все на вашому комп’ютері було повністю мертвим (це зробило батарею CMOS дуже важливою, оскільки без неї не було джерела живлення для збереження обладнання годинник тикає). Оскільки вимикач живлення був фізичним механізмом, не було програмного способу включення та вимкнення живлення. Windows показала б відоме повідомлення "Тепер безпечно вимкнути комп'ютер", оскільки, хоча все було припарковано і готове вимкнутись, ОС не змогла насправді переключити вимикач живлення. Ця конфігурація іноді називаласяпотужна потужність , тому що це все обладнання.

На сьогоднішній день все по-іншому, через чудеса материнських плат ATX та потужність ATX (це розширена технологія eXtended, якщо ви слідкуєте). Поряд з низкою інших досягнень (mini-DIN PS / 2, хтось?) ATX принесла м'яку потужність . М'яке живлення означає, що живлення комп'ютера може контролюватися програмним забезпеченням. Це призвело до декількох змін імпорту:

  • Живлення в режимі очікування: можливо, ви бачили роз'єм "5 В SB" або "5 В режим очікування", позначений на розетках живлення. Блок живлення в режимі очікування- це лінія 5В до вашої материнської плати, яка завжди увімкнена, навіть коли комп'ютер вимкнено. Ось чому важливо відключити або вимкнути жорсткий перемикач блоку живлення (якщо він є) при обслуговуванні сучасних комп'ютерів, адже навіть тоді, коли він вимкнений, ви можете потенційно затримати 5 В SB і пошкодити материнську плату. Тому також CMOS батареї вже не такі важливі - 5В SB використовується для заміни батареї CMOS кожного разу, коли джерело живлення має живлення, тому батарея CMOS використовується лише тоді, коли ви повністю відключите комп'ютер. Лінія 5v SB важливо дозволяє компонентам вашого комп'ютера (головне, BIOS та мережеві адаптери) продовжувати працювати деяким простим програмним забезпеченням, навіть коли комп'ютер вимкнено.
  • Інтелектуальне управління живленням. Якщо ви подивитеся на розетку для роз'єму материнської плати джерела живлення (P1), ви помітите два штифти, як правило, з маркуванням PS_ON та PS_RDY. Вони означають "джерело живлення увімкнено" та "джерело живлення готовий". Якщо ви хочете експериментувати, не приймайте джерело живлення не на комп’ютері, підключіть його та обережно коротко заземляйте лінію (один із чорних проводів) до лінії PS_ON (зелений провід). Блок живлення помітно увімкнеться, при цьому вентилятор повернеться. Компоненти материнської плати, що працює на рівні 5 В SB, фактично включають і вимикають джерело живлення, підключаючи живлення до контакту PS_ON Оскільки в джерелі живлення є деякі конденсатори та інші компоненти, які потребують моменту заряджання, напруги від основних виходів джерела живлення можуть бути стабільними відразу після включення блоку живлення. Це те, для чого потрібен контакт PS_RDY, він виникає, коли внутрішня логіка блоку живлення визначає, що блок живлення "готовий" і забезпечить стабільну потужність.

Отже, ваш перемикач живлення більше не «вмикає» комп’ютер. Натомість він підключений до основних контролерів вашої материнської плати, які виявляють натискання кнопки та виконують ряд кроків для підготовки системи, включаючи освітлення PS_ON, щоб живлення було доступним. Кнопка живлення - не єдиний спосіб запустити процес запуску, пристрої на вашій шині розширення також можуть це зробити. Це важливо, оскільки адаптери мережі Ethernet насправді залишаються увімкненими, коли комп'ютер вимкнений, і шукають дуже специфічний пакет, який часто називають "Чарівний пакет". Якщо вони виявлять цей пакет, адресований їх MAC-адресу, вони запускають процес запуску. Ось так працює «Wake-on-LAN» (WoL). Годинник також може ініціювати завантаження (більшість BIOS дозволяють задавати час, у який комп'ютер повинен завантажуватися кожен день),

Розуміння управління потужністю

Ну, я пояснюю тему Soft Power і тим, що вважаю це цікавим (завжди ключовою причиною пояснення речей), і тому, що це дозволяє зрозуміти, яким чином програмне забезпечення контролює стан живлення та стан роботи / вимкнення комп'ютера. У більшості сучасних комп'ютерів ця програмна система є реалізацією розширеного інтерфейсу налаштування та живлення або ACPI . ACPI - це стандартизована уніфікована система, що дозволяє програмному забезпеченню керувати енергосистемою вашого комп'ютера. Можливо, ви чули про стан живлення ACPI. Основний механізм управління потужністю - це "стані живлення", ваша операційна система перемикається через режими живлення, готуючись до перемикання (процеси вимкнення / сплячки, які відбуваються до того, як живлення фактично відключається), а потім наказує материнській платі перемикати стан живлення . Стани влади виглядають приблизно так:

  • G0: Робота (стан "увімкнено" комп'ютера)
  • G1: Сон (режим очікування комп'ютера, розділений на підстанції S)
    • S1: живлення процесора та оперативної пам’яті залишається увімкненою, але процесор не виконує інструкцій. Периферійні пристрої вимкнено.
    • S2: процесор вимкнено, підтримується оперативна пам’ять
    • S3: Усі компоненти живлення вимкнено, крім оперативної пам’яті та пристроїв, які запускають відновлення (клавіатура). Коли ви скажете вашій операційній системі "Сон", вона зупинить процеси, а потім перейде в цей режим.
    • S4: Зимова сплячка. Абсолютно все вимкнено. Коли ви повідомляєте операційну систему в режим глибокого сну, вона зупиняє процеси, зберігає вміст ОЗУ на диску, а потім переходить у цей режим.
  • G2: Soft Off. це стан "комп’ютера". Вимкнено живлення для всіх, крім пристроїв, які можуть викликати завантаження.
  • G3: Механічне вимкнення.

Як насправді відбувається скидання

Ви помітите, що перезавантаження не є одним із цих станів. То що насправді відбувається, коли комп'ютер перезавантажується? Відповідь може бути дивовижною, адже з точки зору управління живленням це майже нічого . Існує команда скидання ACPI. Коли ви скажете вашій операційній системі перезавантажуватися, вона послідує її нормальному процесу відключення (зупиняє всі ваші процеси, виконує трохи технічного обслуговування, демонтує ваші файлові системи тощо), а потім як завершальний крок, замість того, щоб пересилати машину в стан живлення G2 (як це було б, якби ви просто сказали це «Завершити роботу»), він встановлює команду «Скидання». Це, як правило, називається "Скидання реєстру", тому що, як і більшість інтерфейсів ACPI, це лише адреса, на яку слід записувати певне значення, щоб вимагати скидання. Я цитую специфікацію 2.0 про те, що вона робить:

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

Отже, коли встановлено регістр скидання, кілька речей відбуваються послідовно.

  • Вся логіка скидається. Це означає надсилання відповідних команд скидання на різні біти обладнання, включаючи процесор, контролер пам'яті, периферійні контролери тощо. У більшості випадків це просто означає загоряння фізичного проводу RST, як показав AndrejaKo вище.
  • Потім комп'ютер завантажується. Це частина "виконайте дії, подібні до холодного завантаження". Материнська плата виконує ті ж дії, що і в тому випадку, якби блок живлення щойно підготувався після натискання кнопки живлення.

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


Це була довга відповідь. Але ей, сподіваємось, зараз ви знаєте більше про управління живленням комп'ютера. Я, звичайно, дізнався деякі речі, досліджуючи це.


3
+1. Дуже інформативна та корисна відповідь. Всього один момент - PS_ON активний низько, тобто перемикається на 0V, а не + 5VSB, щоб увімкнути основні виходи.
MikeJ-UK

2
Для USB-пристроїв, які запускають завантаження, деякі BIOS мають можливість розбудити комп'ютер подвійним клацанням або натисканням клавіші. Крім того, на деяких клавіатурах Mac є кнопки живлення (традиція йде повністю до оригіналу).
Стюарт П. Бентлі

1
Чудова відповідь, я, безумовно, багато чого навчився. Однак залишається одне питання: з точки зору материнської плати, яка різниця між станами S4 та G2? Збереження оперативної пам’яті на диску виконується ОС, тому S4 звучить так само, як «м'яке відключення» для обладнання.
EMP

1
Я вважаю, що S4 функціонально еквівалентний G2, але різниця зберігається. Здається, деякі BIOS роблять "швидкий POST" при запуску з S4, але повний POST при запуску з G2. Я не думаю, що для цього немає жодних причин, окрім того, що люди хочуть, щоб відновлення S4 було швидким.
jcrawfordor

1
Це насправді трохи спрощено; Є (безліч) способів перезавантаження комп'ютера, що не стосується ACPI, і іноді тільки ACPI не працює: superuser.com/questions/294681/…
Тобу,

81

Ось відправна точка:

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

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

Деякі процесори та мікроконтролери (які є мініатюрними автономними комп'ютерами, як правило, на 20 років позаду сучасних настільних комп'ютерів) можуть скинути себе за допомогою внутрішніх комутаторів. Як я вже сказав, як тільки сигнал, який генерує скидання, зникне, комп'ютер запуститься. Отже, передумова у питанні не зовсім правильна. Комп'ютер не знає, коли його увімкнути. Адже знаю, коли його потрібно "вимкнути" або скинути, і коли сигнал, який його утримує, зник, він увімкнеться.

Така поведінка може виглядати дивно на сучасному комп’ютері, який може бути налаштований на включення в певний час або через мережу тощо. Як я вже сказав, комп'ютери виготовлені з комп’ютерів. Тому, хоча основний процесор може бути вимкнено, всередині нього можуть бути численні інші мікросхеми та мікроконтролери. Найбільш очевидний випадок - годинник у режимі реального часу, який часто працює від акумулятора. Потім він може включати інші мікросхеми, які включатимуться інші мікросхеми, і ланцюгова реакція триває, поки не буде включений весь комп'ютер. На сучасних комп’ютерах існує лінія живлення блоку живлення, яка називається +5 VDC в режимі очікування. Він забезпечує потужність близько 50 мВт для різних пристроїв, які вмикаються, коли комп'ютер "вимкнено".

Трохи дрібниць: Штифт скидання на процесор Intel 386 EX - це контактний номер 110.

Таблиця даних 386EX рисунок 2

Для Intel i7-900 це номер землі AL39.

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


Вау, ґрунтовна відповідь.
Сет Карнегі

13
@Seth Carnegie Це не так здорово. Я просто торкнувся матеріалів низького рівня, що стосується більшості комп'ютерів - від холодильника до ПК. Я навіть не згадував про ACPI, APM та інші сучасні системи живлення або про те, як на старих ПК мікроконтролер Intel 8042, який контролер клавіатури міг скинути процесор, як працює POST, скидає вектори та багато іншого.
AndrejaKo

1
@netvope Занадто багато уявити, я б сказав. У вас, мабуть, принаймні одна у вашій миші, одна на клавіатурі, більше 10 для найбільш основних частин материнської плати (навіть якщо ми враховуємо високо інтегровані «чіпсети»), можливо, один у блоці живлення, принаймні один на кожному диску (скоріше 2-3), по кілька у кожній картці розширення ... Монітори теж серйозні, і мій принтер тепер має більше оперативної пам’яті, ніж мій перший настільний комп’ютер.
AndrejaKo

4
Якщо говорити про пам’ять, то кеші деяких нових жорстких дисків і процесорів зараз більше, ніж оперативна пам'ять першого комп'ютера, який я використовував. Тепер ми можемо повністю запустити Windows 95 в кеш-пам'яті L2 і зберегти весь системний розділ у кеш-накопичувачі!
netvope

27

У цій публікації блогу описано, як 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 дає лише одне.


15
Це актуально, але відповідь буде кориснішою, якщо ви розмістите тут уривок інформації іншої сторінки.
calvinf

1
tl; dr є багато способів перезавантажити; деякі дошки зламаються досить погано, що видають себе за вікна , єдиний спосіб - евристичний, який передбачає кілька спроб і трохи сну.
Тобу

10

Він замикає місце вводу-виводу, яке виводить рядок даних низько, що говорить процесору, що він повинен зупинити все, що він робить, і почати виконувати код з певного місця в BIOS.


... і це місце вказане в коді, який передається виклику перезавантаження системи?
Лицар Самар

1
@ Лицар Самар: Ні; місце вводу / виводу - це константа архітектури, яку ядро ​​знає. Це можна побачити, наприклад, у коді перезавантаження Linux, наприклад arch / x86 / kernel / reboot.c.
sleske

хтось має хороший ресурс для подальшого читання з цього питання?
matthias krull

@ mugen.kenichi і все, друг дав мені це, щоб посилатися на howstuffworks.com/bios.htm/printable
Лицар Самар

Я пропоную superuser.com/a/347115/38062 .
JdeBP

10

Ще в старі часи до управління живленням, звичайно, комп'ютери могли все-таки перезапуститись. (Хтось пам’ятає, коли заморожена програма означала, що вам доведеться використовувати Ctrl + Alt + Delete для перезавантаження комп'ютера?)

На моїй старій 486 команда мови збірки JMP FFFF:0000(тобто встановити вказівник інструкції процесора на вказану адресу) призведе до перезавантаження всього комп'ютера. Іншими словами, FFFF: 0000 розглядає місцеположення в BIOS, яке має вказівки щодо того, що повинен робити комп’ютер під час першого запуску. Я підозрюю, що PIN-код для скидання, описаний у відповіді AndrejaKo, або кнопки скидання в дні перед управлінням живленням також змусили б покажчик інструкцій на ту саму адресу.

Пошук Google для JMP FFFF 0000 показує багато цікавих сторінок про це.


3
Вам також потрібно було записати конкретне значення на 0040: 0072, щоб визначити, чи це холодний (0x0000) чи теплий черевик (0x1234).
Synetech

9

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


2
Це правильно, але насправді не відповідає на питання.
sleske

4
Чи є сторожові собаки, які фактично перезавантажать весь комп'ютер? Я знаю, що їх іноді використовують для різних мікроконтролерів всередині комп'ютера, але чи є такий на цілому комп'ютерному рівні? Мій особистий досвід змушує мене сказати «ні», але деякі докази «за» або «проти» будуть вітатися.
AndrejaKo

5
@AndrejaKo: Раніше я працював у компанії, яка виробляла сервери зв'язку (по суті, блейд-сервери з підключеними до них модемами). Вони мали сторожовий таймер, який був підключений до скидання штифтів на материнській платі. Таймер періодично стикався фоновою утилітою, що працює на материнській платі, тому, якщо процесор повісився, сторожовий працівник врешті-решт натисне кнопку скидання. Він був прив’язаний до ланцюга, завдяки якому телефонна лінія була зайнята під час перезавантаження материнської плати.
Роберт Харві

4

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

Я здогадуюсь, що ця традиція продовжувалась і в епоху "AT", і, можливо, сьогодні в ACPI залишаються її залишки.

Додано: цікава інформація про вищевказану схему скидання. Під час ранньої завантажувальної послідовності код шукав певну схему в оперативній пам'яті, яка, можливо, була встановлена ​​раніше виконаним кодом. Якщо цей код був присутній, частина діагностики POST (включене ввімкнення живлення) була пропущена. Візерунок буде присутній лише на "теплому" черевику.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.