Как перезагрузить компьютер?

490

Как компьютер может перезагрузить себя? После того, как он выключен, как он говорит себе, чтобы вернуться снова? Какое программное обеспечение может это сделать?

Сет Карнеги
источник
8
@ jer.salamon: На самом деле это совершенно разные пути. Выключение вызывает процедуру ACPI, которая отправляет сигнал на источник питания ATX, который отключает главные шины напряжения.
Игнасио Васкес-Абрамс
13
Это контролируется через BIOS - если память служит, ключевые слова, представляющие интерес, APM и APIC
pst
118
Он никогда не выключается при перезапуске.
Моав
10
Там нет глупых вопросов. Нет, возможно, есть, но я думаю, что это на самом деле очень интересно. Показанный как вопрос кандидата недели .
slhck
4
Раньше я работал на удаленном сервере, который был просто компьютером без экрана или клавиатуры в центре обработки данных компании. Мой сервер вообще никогда не выключался, но иногда я перезагружал его с моего конца, используя WinXP Start-> TurnOffComputer-> Restart, чтобы разобраться в нестабильности, вызванной тестированием моего собственного кода. Я часто работал по собственному выбору, когда центр обработки данных был беспилотным. Это было очень утомительно , что я случайно выбран Turn Off , как окончательный вариант, и пришлось ждать , пока через два дня для оператора , чтобы пойти и нажмите на переключателе для меня!
FumbleFingers

Ответы:

598

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

Долго и бессвязно, но (на мой взгляд) более интересный ответ:

Soft Power и как это работает

В былые времена (ну, ладно, для студента колледжа, как я, 90-е годы были давным-давно), у нас были материнские платы AT (Advanced Technology) с мощностью ATуправление. Система питания AT была очень, очень простой. Кнопка питания на вашем компьютере была аппаратным переключателем (вероятно, в задней части корпуса), и ваш вход 120 В переменного тока прошел прямо через него. Он физически включал и выключал электропитание вашего блока питания, и когда этот переключатель находился в положении «Выкл.», Все в вашем компьютере было полностью разряжено (это делало батарею CMOS очень важной, потому что без нее не было бы блока питания для хранения оборудования часы тикают). Поскольку выключатель питания был физическим механизмом, не было программного способа включения и выключения питания. Windows будет показывать знаменитое сообщение «Теперь можно безопасно выключить компьютер», потому что, хотя все было припарковано и готово к отключению, ОС не смогла фактически щелкнуть выключателем питания. Эта конфигурация иногда упоминалась какжесткая сила , потому что это все оборудование.

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

  • Питание в режиме ожидания: возможно, вы видели разъем «5v SB» или «5v standby», помеченный на выводах блока питания. Резервный источник питаниялиния 5 В к материнской плате, которая всегда включена, даже когда компьютер выключен. Вот почему при обслуживании современных компьютеров важно отключать или отключать жесткий выключатель блока питания (если он есть), потому что даже когда он выключен, вы можете потенциально замкнуть 5В SB и повредить материнскую плату. Вот почему батареи CMOS на самом деле уже не так важны - 5В SB используется для замены батареи CMOS всякий раз, когда источник питания питается от сети, поэтому батарея CMOS используется только при полном отключении компьютера от сети. Линия 5В 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: Спящий режим. Абсолютно все выключено. Когда вы передаете свою операционную систему Hibernate, она останавливает процессы, сохраняет содержимое оперативной памяти на диск и затем переходит в этот режим.
  • G2: Soft Off. это ваш компьютер в выключенном состоянии. Питание отключено для всех устройств, кроме устройств, которые могут запускать загрузку.
  • G3: Механическое выключение.

Как происходит сброс?

Вы заметите, что перезагрузка не является одним из этих состояний. Так что же на самом деле происходит, когда ваш компьютер, когда он перезагружается? Ответ может быть удивительным, потому что с точки зрения управления питанием это почти ничего . Есть команда сброса ACPI, Когда вы говорите операционной системе, что она перезагружается, она следует своему обычному процессу выключения (останавливает все ваши процессы, выполняет небольшое обслуживание, отключает ваши файловые системы и т. Д.), А затем в качестве последнего шага вместо того, чтобы переводить компьютер в состояние питания. G2 (как если бы вы просто сказали отключить) устанавливает команду Reset. Обычно это называется «регистр сброса», потому что, как и большинство интерфейсов ACPI, это просто адрес, на который следует записать определенное значение для запроса сброса. Я процитирую спецификацию 2.0 о том, что она делает:

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

Итак, когда регистр сброса установлен, несколько вещей происходит последовательно.

  • Вся логика сброшена. Это означает отправку соответствующих команд сброса различным аппаратным элементам, включая ЦП, контроллер памяти, периферийные контроллеры и т. Д. В большинстве случаев это просто означает включение физического провода RST, как показано выше на AndrejaKo.
  • Затем компьютер загружается. Это часть «выполнить действия, аналогичные« холодной загрузке »». Материнская плата выполняет те же действия, что и если бы блок питания был готов после нажатия кнопки питания.

Конечный эффект этих двух шагов (которые на самом деле разбиваются на гораздо больше шагов) состоит в том, что все выглядит так же, как только что загруженный компьютер, но питание фактически было включено все время. Это означает, что для выключения и запуска требуется меньше времени (поскольку вам не нужно ждать, пока блок питания не будет готов), и, что немаловажно, запуск инициализации начнется после завершения работы операционной системы. Это означает, что не нужно использовать другой триггер запуска (WoL и т. Д.), И вы можете использовать перезагрузку как эффективный способ удаленного сброса системы, когда у вас нет способа инициировать загрузку.


Это был длинный ответ. Но, надеюсь, теперь вы знаете больше об управлении питанием компьютера. Я определенно узнал некоторые вещи, исследуя это.

jcrawfordor
источник
3
+1. Очень информативный и полезный ответ. Только одна точка - PS_ON имеет активный низкий уровень, т. Е. Переключается на 0 В, а не на + 5 В для включения основных выходов.
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 В постоянного тока. Он обеспечивает мощность около 50 мВт для различных устройств, которые включены, когда компьютер выключен.

Немного мелочей: контакт сброса на процессоре Intel 386 EX - это номер 110.

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

На Intel i7-900 это номер земли AL39.

Я надеюсь, что кто-то сможет дать ответ, который объяснит, как все работает с точки зрения высокого уровня, поскольку это довольно сложная система.

AndrejaKo
источник
Вау, полный ответ.
Сет Карнеги
13
@ Сид Карнеги: Это не так здорово. Я только что коснулся низкоуровневых вещей, которые актуальны для большинства компьютеров, от холодильника до ПК. Я даже не упомянул ACPI, APM и другие современные системы электропитания или то, как на старых ПК микроконтроллер Intel 8042, который контролирует клавиатуру, мог перезагружать процессор, как работает POST, векторы сброса и многое другое.
AndrejaKo
1
@netvope Слишком много, чтобы представить, я бы сказал. Вероятно, у вас есть по крайней мере один в вашей мыши, один на клавиатуре, более 10 для самых основных частей материнской платы (даже если мы принимаем во внимание высокоинтегрированные «чипсеты»), возможно, один в блоке питания на каждом диске (скорее всего на 2-3) по несколько на каждой плате расширения ... Мониторы - это тоже серьезное дело, и мой принтер теперь имеет больше оперативной памяти, чем мой первый настольный компьютер.
AndrejaKo
4
Говоря о памяти, кеш некоторых новых жестких дисков и процессоров теперь больше, чем оперативная память первого компьютера, который я использовал. Теперь мы можем полностью запустить Windows 95 в кеше L2 и сохранить весь системный раздел в кеше диска!
netvope
27

Этот пост описывает, как Linux запускает перезагрузку.

Выдержка:

У Linux есть множество различных способов сброса x86. Некоторые из них являются только 32-разрядными, и поэтому я просто буду их игнорировать, потому что, честно говоря, именно то, что вы делаете со своей жизнью. Кроме того, они ужасны. Итак, это оставляет нас с пятью из них.

  • kbd - перезагрузка через контроллер клавиатуры. В исходном IBM PC линия сброса ЦП была привязана к контроллеру клавиатуры. Запись соответствующего магического значения пульсирует в линии, и машина сбрасывается. Это все очень просто, за исключением того факта, что современные машины не имеют контроллеров клавиатуры (они на самом деле являются частью встроенного контроллера), и даже более современные машины даже не претендуют на наличие контроллера клавиатуры. Теперь встроенные контроллеры работают с программным обеспечением. И, как мы все знаем, программное обеспечение ужасно. Но, что еще хуже, программное обеспечение на встроенном контроллере было написано авторами BIOS. Совершенно очевидно, что любое притворство, что это когда-либо работает, является своего рода вымыслом. Некоторые машины очень требовательны к аппаратному обеспечению, находящемуся в точном состоянии, которое Windows будет программировать. Некоторые машины работают 9 раз из 10, а затем блокируются из-за нечетной проблемы с синхронизацией. А другие просто не работают вообще. Ура!

  • тройной - попытка сгенерировать тройную ошибку. Это делается путем загрузки пустой таблицы дескрипторов прерываний и последующего вызова int (3). Прерывание завершается неудачно (нет IDT), происходит сбой обработчика ошибок (нет IDT), и ЦП входит в состояние, которое теоретически должно вызвать сброс. За исключением того, что, кажется, нет требования, чтобы это произошло, и это просто не работает на куче машин.

  • pci - на самом деле не pci. Традиционный доступ к конфигурации PCI осуществляется путем записи 32-битного значения в порт io 0xcf8 для идентификации шины, устройства, функции и регистра конфигурации. Порт 0xcfc содержит соответствующий регистр. Но если вы напишите соответствующую пару магических значений в 0xcf9, машина перезагрузится. Зрелищный! И никак не стандартизированы (конечно, не являются частью спецификации PCI), поэтому разные чипсеты могут иметь разные требования. Booo.

  • efi - сервисы EFI обеспечивают точку входа для перезагрузки компьютера. Обычно это даже работает! Пока сервисы времени исполнения EFI работают вообще, что может растянуться.

  • acpi - последние версии спецификации ACPI позволяют указывать адрес (обычно память или пространство системного ввода-вывода) и значение для записи в него. Идея состоит в том, что запись значения в адрес сбрасывает систему. Оказывается, что это часто не удается. Также невозможно представить метод перезагрузки PCI через ACPI, потому что метод перезагрузки PCI требует пары значений, а ACPI дает только одно.

jabiko
источник
15
Это актуально, но ответ будет более полезным, если вы поместите здесь выдержку из информации о другой странице.
Calvinf
1
tl; dr есть много способов перезагрузки; некоторые доски разбиты настолько сильно, что притворяются окнами , а эвристика, которая включает в себя несколько попыток и немного спит, является единственным выходом.
Тобу
10

Он отображает местоположение ввода / вывода, которое понижает уровень строки данных, что говорит ЦПУ о том, что он должен прекратить все, что он делает, и запустить код из определенного места в BIOS.

Игнасио Васкес-Абрамс
источник
... а это местоположение указано в коде, который передается системному вызову перезагрузки?
Рыцарь Самар
1
@ Ночь Самар: Нет; расположение ввода / вывода обычно является архитектурной константой, которую знает ядро. Это можно увидеть, например, в коде перезагрузки Linux, например, arch / x86 / kernel / reboot.c.
слеське
У кого-нибудь есть хороший ресурс для дальнейшего чтения по этому вопросу?
Матиас Крулл
@ mugen.kenichi и все, друг дал мне это, чтобы сослаться на howstuffworks.com/bios.htm/printable
Рыцарь Самар
Я предлагаю superuser.com/a/347115/38062 .
JdeBP
10

Конечно, в прежние времена до управления питанием компьютеры могли перезагружаться. (Кто-нибудь помнит, когда зависшая программа означала, что вам пришлось использовать Ctrl + Alt + Delete для перезагрузки компьютера?)

На моем старом 486 команда на языке ассемблера JMP FFFF:0000(т. Е. Установка указателя инструкций процессора на указанный адрес) приводила к перезагрузке всего компьютера. Другими словами, FFFF: 0000 обращается к расположению в BIOS, в котором есть инструкции о том, что должен делать компьютер при первом запуске. Я подозреваю, что кнопка сброса, описанная в ответе AndrejaKo, или кнопки сброса в дни, предшествующие управлению питанием, также принудительно указывали бы на указатель инструкций по тому же адресу.

Поиск Google для JMP FFFF: 0000 показывает много интересных страниц об этом.

krubo
источник
3
Вам также нужно было записать определенное значение в 0040: 0072, чтобы определить, была ли это холодная (0x0000) или горячая загрузка (0x1234).
Synetech
9

Есть также вещь, названная сторожевым псом. Это устройство служит выключателем мертвеца. Компьютер должен сигнализировать сторожу каждую минуту, что он все еще жив. Когда компьютер выходит из строя, например, запустив бесконечный цикл, он не сможет сообщить сторожевому устройству, что он все еще работает, как предполагалось, и в этом случае сторожевой таймер выполнит аппаратный сброс. Это было продемонстрировано в популярном сериале терминатора, где робот был выбит из-за скачка напряжения. это сбрасывало бы себя через 2 минуты.

завивать волосы щипцами
источник
2
Это правильно, но на самом деле не отвечает на вопрос.
слеске
4
Существуют ли сторожевые таймеры, которые фактически перезагрузят весь компьютер? Я знаю, что они иногда используются для различных микроконтроллеров внутри компьютера, но есть ли они на уровне всего компьютера? Мой личный опыт побуждает меня говорить нет, но некоторые доказательства за или против будут приветствоваться.
AndrejaKo
5
@AndrejaKo: Раньше я работал в компании, которая производила коммуникационные серверы (в основном, блейд-серверы с подключенными к ним модемами). У них был сторожевой таймер, который был подключен к контактам сброса на материнской плате. Таймер периодически удалялся фоновой утилитой, работающей на материнской плате, поэтому, если процессор зависал, сторожевой таймер в конечном итоге нажимал кнопку сброса. Он был привязан к цепи, которая делала телефонную линию занятой во время перезагрузки материнской платы.
Роберт Харви
4

Вернувшись на старую IBM PC-1, клавиатурный контроллер, как ни странно, справился с перезагрузкой. IBM встроила небольшой микропроцессор для управления клавиатурой, и у него было несколько свободных линий ввода / вывода, поэтому они использовали одну из линий для управления линией сброса основного ЦП. Команда, отправленная на контроллер клавиатуры, приведет к перезагрузке ЦП, как если бы питание было только что включено.

Я предполагаю, что эта традиция продолжалась и в эпоху "АТ", и сегодня в ACPI могут остаться ее следы.

Добавлено: Там интересная деталь о вышеупомянутой схеме сброса. Во время ранней последовательности загрузки код искал определенный шаблон в ОЗУ, который мог быть установлен ранее исполняемым кодом. Если этот код присутствовал, некоторые из процедур POST (самопроверка при включении питания) были пропущены. Шаблон будет присутствовать только на «теплом» ботинке.

Даниэль Р Хикс
источник